티스토리 뷰

728x90
반응형

메서드 오버로딩오버라이딩은 모두 자바의 다형성을 구현하는 방법이다.

 

게다가 이름과 구현과정까지 나름 비슷해서 가끔 헷갈릴 때가 있는데,

 

오늘도 헷갈린 김에 잊지 않으려 정리를 한다.

 

Method Overloading

 

가장 먼저 짚고 넘어가야 할 오버로딩과 오버라이딩의 근본적인 차이는 두 행위가 구현되는 타이밍이다.

 

오버로딩의 경우 컴파일 과정에서 구현되며, 오버라이딩실행시, 혹은 런타임으로 구현된다.

 

계속해서 오버로딩같은 클래스 안에서 두 개 이상의 같은 이름을 가진 메서드를 정의하는 것을 가리키며,

 

여기엔 아래와 같은 몇 가지 규칙이 존재한다.

 

  1. 메서드 이름이 같아야 한다.
  2. 리턴 타입과 예외처리는 같아도 되고 달라도 된다.
  3. 파라미터의 개수가 다르거나, 같다면 타입이 달라야 한다.

즉, 시그니처(변수)가 변경된 동일한 이름의 메서드를 정의하는 것이라고 할 수 있으며

 

사용되는 메서드를 정하는 것은 메서드가 호출될 때 사용되는 변수라는 것도 추측할 수 있다.

 

마지막으로 메서드 오버로딩의 장점은 당연하게도 개발 시간 단축난이도 하향 가독성 향상,

 

혹은 Static Polymorphism을 구현하는데 유리하다는 것 등이 있다.

 

Method Overriding

 

오버라이딩자식 클래스가 부모 클래스의 메서드를 재정의하는 것을 가리킨다.

 

여기에도 앞서 본 것과 비슷하게 몇 가지 규칙이 존재한다.

 

  1. 부모 클래스의 메서드와 같은 이름의 메서드를 정의해야 한다.
  2. 메서드 파라미터의 개수와 타입이 같아야 한다.
  3. 메서드 리턴 타입이 같아야 한다.
  4. 메서드 바디는 같아도 되고 달라도 된다.

시그니처를 그대로 두고 바디만 변경하는 것이라 할 수 있다.

 

또한 오버로딩에서 호출시 사용되는 변수가 메서드를 결정했던 것과는 달리,

 

오버라이딩에서는 해당 메서드를 호출하는 객체에 따라 달라지게 된다.

 

Summary

 

 

  Method Overloading Method Overriding
다형성 컴파일, 혹은 Static Polymorphism 런타임, 혹은 Dynamic Polymorphism
바인딩 정적 바인딩 동적 바인딩
목적 가독성 향상 메서드의 구체적인 구현
파라미터 개수가 다르거나 타입이 다름 개수와 타입이 같음
리턴 타입 상관 없음 반드시 같아야 함
예외 상관 없음 예외를 던지지 않거나
같거나 좁은 범위의 예외를 던져야 함
클래스 동일 클래스 상속 관계의 두 클래스
상속 요구되지 않음 반드시 필요함
static, final, private 메서드 가능 불가능
속도 빠름 느림(동적 바인딩)
조합 정적 프로그래밍 객체 지향 프로그래밍
접근 제어자 모두 사용 가능 부모와 같거나 넓어야 함

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함