Backend/Java

overloading vs overriding 차이 오버로딩 vs 오버라이딩 차이

개발하는루루 2022. 10. 31. 20:35

1. 오버로딩

  • 같은 이름의 메서드(함수)를 여러개 가지면서 매개변수 유형과 개수가 다르도록 하는 것
class TestOverloading {
	
    //매개변수가 없는 sol 메서드
	void sol() {
    	System.out.println("매개변수가 없습니다");
    }
    
    //매개변수가 int형 2개인 sol 메서드
	void sol(int a, int b) {
    	System.out.println("매개변수" + a + "와" + b);
    }
    
    //매개변수가 String형 1개인 sol 메서드
	void sol(String c) {
    	System.out.println("매개변수" + c);
    }
}

public class TestOverLoad {
	public static void main(String[] args) {
    	TestOverloading ob = new TestOverloading();
        
        ob.sol();
        
        ob.sol(1,2);
        
        ob.sol("오버로딩 테스트");
    }
}

출력물 :

"매개변수가 없습니다"

"매개변수1와2"

"매개변수오버로딩테스트"

 

 

2. 오버라이딩

  • 상위 클래스가 가지고 있는 메서드도 하위 클래스로 상속되어 하위 클래스에 사용
  • 하위 클래스에서 메서드를 재정의해서 사용할 수 있음
  • 쉽게 말해 메서드 이름이 같고, 매개변수가 같고, 반환형이 같을 경우 상속받은 메서드를 덮어쓴다고 생각하면 됨
  • '부모 클래스의 메서드는 무시하고, 자식 클래스의 메서드 기능을 사용하겠다' 와 같음
//부모 클래스
class Woman {
	public String name;
    public int age;
    
    public void info() {
    	System.out.println("여자 이름은 "+name+", 나이는 "+age+"살");
    }
}

// Woman 클래스 상속받은 Job 클래스
class Job extends Woman {
	String job;
    
    // 부모 클래스(Woman)에 있는 info 메서드 재정의
    public void info() {
        System.out.println("여자의 직업은 "+job+"입니다.");
    }
}


public class TestOverRide {
	public static void main(String[] args) {
        
        //Job 객체 생성
        Job job = new Job();
        
        //변수 설정
        job.name = "솔이";
        job.age = 26;
        job.job = "개발자";
        
        //호출
        job.info();
        
    }  
}

출력물 : 

"여자의 직업은 개발자입니다."

 

  오버로딩 오버라이딩
메서드 이름 동일 동일
매개변수, 타입 다름 동일
리턴 타입 상관없음  동일

 

참고 : https://velog.io/@ohsol/JAVA-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9%EA%B3%BC-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9-%EC%B0%A8%EC%9D%B4%EC%99%80-%EC%98%88%EC%A0%9C