[Java] 오버로딩 vs 오버라이딩

HodooHa·2024년 4월 23일
0

오버로딩과 오버라이딩의 차이를 알아보자.

오버로딩기존에 없던 새로운 메서드를 추가하는 것이고, 오버라이딩조상으로부터 상속받은 메서드의 내용을 변경하는 것이다.

오버로딩(overloading) - 기존에 없는 새로운 메서드를 정의하는 것(new)
오버라이딩(overriding) - 상속받은 메서드의 내용을 변경하는 것(change, modify)

메서드 오버로딩은 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것이다.
이때 조건이 있다. 매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다.

[예시1] 오버로딩

public void test() {}

public void test() {} // 컴파일 에러 - 메서드의 시그니처가 동일한 경우 
// 메서드시그니처 : "메서드명(변수)"를 가리킨다.

private void test() {} // 에러 - 접근제어자는 메서드 시그니처에 해당하지 않는다.

public int test() { return 0; } // 에러 - 반환형은 메서드 시그니처에 해당하지 않는다.
	
public void test(int num) {} // 매개변수의 개수에 따른 오버로딩이 성립됨

public void test(int num2){} // 에러 - 매개변수가 위와 동일함 (타입, 숫자)

public void test(int num, int num2) {} // 매개변수의 개수에 따른 오버로딩이 성립됨

public void test(int num, String str) {} // 매개변수의 타입에 따른 오버로딩이 성립됨

public void test(String str, int num) {} // 매개변수의 순서에 따른 오버로딩이 성립됨

[예시2] 오버라이딩과 오버로딩 구별

class Parent {
	void parentMethod() {}
}

class Child extends Parent {
	void parentMethod() {} // 오버라이딩
    void parentMethod(int i) {} // 오버로딩 - 기
    
    void childMethod() {}
    void childMethod(int i) {} // 오버로딩
    // void childMethod() {} // 에러 - 중복정의 되었음
}

[주의] 조상 클래스의 메서드를 자손 클래스에서 오버라이딩할 때

1. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
2. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
3. 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다.

[출처] 자바의 정석, 남궁성, 도우출판

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

profile
성장하는 개발자, 하지은입니다.

0개의 댓글