Java

[Java] 오버로딩(overloading)과 오버라이딩(overriding)

Sigfriede 2024. 1. 19. 12:00

  오버로딩(overloading)과 오버라이딩(overriding)은 명칭은 비슷하지만 사용하는 상황과 용도는 엄연히 구분된다. 오버로딩은 메소드명은 같지만 매개변수의 개수 또는 타입이 다른 것을 의미한다. 컴파일 시 메소드의 이름이 같아도 다른 매개변수로 메소드를 구분할 수 있다. 그러나 오버라이딩은 상속받은 메소드의 내용에 관한 것이다. 상속받은 클래스가 클래스 자신에 맞게 메소드의 내용을 변경하는 경우이다. 오버라이딩을 사용하기 위해서는 상속받은 메소드의 이름과 매개변수와 반환타입이 모두 같아야만 한다.

public class Parent {
    void parentMethod() {}
}

public class Child extends Parent {
	void parentMethod(int i) {} // 오버로딩
 	void parentMethod() {} // 오버라이딩
}

 

  코드로 확인하면 차이가 좀 더 명확히 보인다.

  개인적으로는 오버라이딩을 자주 사용하는 편인데, 특히 서비스 계층에서 서비스 인터페이스와 서비스 구현 클래스를 분리하는 어댑터 패턴으로 구현 시에 유용하게 쓰고 있다. 어댑터 패턴은 클래스 간 결합도를 줄여주기도 하고, 사용과 구현을 분리하여 기존 클래스를 수정하지 않고도 손쉽게 코드를 변경할 수 있다는 게 장점이다. 나중에 기회가 된다면 이와 관련한 내용도 작성하고자 한다.

 

  ※ 자바의 정석(남궁성)을 참고하여 작성한 글입니다. 참고자료에는 게시글보다 상세하고 정확한 설명이 기재되어 있습니다. 이 게시글에  문제가 되거나 부정확한 부분이 있다면 알려주시면 감사하겠습니다.

'Java' 카테고리의 다른 글

[Java] 접근 제어자(access modifier)  (0) 2024.01.24
[Java] 제어자(modifier)  (0) 2024.01.22
Thread safety  (0) 2024.01.17
자바의 실행 과정  (1) 2023.12.11