오버라이딩과 오버로딩은 이름이 비슷해 초심자가 헷갈릴 수 있는 개념이다. 둘 다 ‘동일한 이름의 메서드’에 대한 개념이라는 공통점이 있는데, 어떤 차이점이 있는지 알아보자. 본론으로 들어가기 전에 단도직입적으로 둘을 비교해보면 이렇다.
구분 | 오버라이딩 | 오버로딩 |
---|---|---|
메서드 이름 | 같음 | 같음 |
파라미터 | 같음 | 다름 |
리턴 타입 | 같음 | 무관 |
Overriding
- 상위 클래스에서 상속받은 메서드를 하위 클래스에서 재정의해서 사용하는 것
- 예컨대, 앞으로 걷는
Human
클래스와 옆으로 걷는Crab
클래스가 있다고 하자. 이 둘다Animal
이라는 클래스의 자식 클래스로,walk
메서드를 갖고 있다. 대부분의 동물이 앞으로 걷기 때문에 이walk
메서드는 앞으로 걷게끔 기능하지만,Crab
같은 경우 옆으로 걷는 메서드가 필요하다. 이를 위해sideWalk
라는 메서드를 추가해주는 것도 물론 가능은 하지만, 비효율적이고 활용 측면에서도 메서드의 이름이 다른 동물들과 달라져 불편하므로walk
메서드를 오버라이드 하는 게 낫다.
Overloading
- 같은 이름의 메서드를 여러 개 정의하고, 각각 받는 파라미터의 타입이나 개수를 다르게 하여 다양한 유형의 파라미터를 받아들일 수 있게 하는 것