Java

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

hyerann 2020. 5. 3. 21:51

이번에는 오버로딩(overloading)과 오버라이딩(overriding)에 대해 알아보겠습니다.

이 두 개념은 동일한 메서드명을 기반으로 동작한다는 공통점 때문에 많이 헷갈리는 개념인데요!

 

1. 오버로딩은 같은 이름의 메서드이지만 매개변수 부분을 다르게 정의하는 것입니다.

2. 오버라이딩은 상위 클래스의 메서드를 하위 클래스에서 재정의하는 것입니다.

 

오버로딩 예시 코드를 살펴볼까요❓

이렇게 같은 이름의 메서드이지만 매개변수의 개수나 종류를 다르게 정의가 가능합니다.

생성자도 마찬가지입니다.

 

오버로딩을 사용하는 이유는 무엇일까요?

만약 오버로딩이 허용되지 않는다면 위의 코드에서 메서드명이 add 하나로 처리될 수 없고,

addNumTwo, addNumThree, addStringTwo 이런식으로 메서드명이 복잡해지고 메서드를 재사용하기 힘들겠죠?

 

위의 코드에서 오버로딩된 메서드가 add 말고도 하나가 더 있습니다!

바로 println입니다!

첫번째 println은 add에서 return된 int형 변수가 매개변수이죠

세번째 println은 add에서 return된 String형 변수가 매개변수이죠

하지만 같은 메서드명으로 동작을 처리하고 있습니다.

 


 

오버라이딩 예시 코드를 살펴볼까요❓

A의 하위 클래스인 B의 test 함수를 호출했을때 해당 함수가 재정의되었다면 하위 클래스인 B의 test 함수가 호출됩니다!

B의 test 함수에서는 상위 클래스의 test 함수를 호출하고, 그 밑에서 또 새로운 println을 호출하고 있죠.

그래서

A 클래스의 test 함수입니다.

B 클래스의 test 함수입니다.

가 출력된것입니다.

 

만약 B의 test 함수를 주석처리하면 어떻게 될까요?

하위 클래스인 B에서 test 함수가 오버라이딩이 되지 않았기 때문에 상위 클래스인 A의 test 함수가 호출됩니다.

 

오버로딩과 오버라이딩의 차이점! 모두 잘 이해가셨나요? 😊