둘 다 다형성을 높여주는 개념이고 비슷한 이름이지만, 전혀 다른 개념이라고 봐도 무방할 만큼 차이가 있음(오버로딩은 다른 시그니쳐를 만든다는 관점에서 다형성으로 보지 않는 의견도 있다). 공통점으로는 같은 이름의 다른 함수를 호출한다는 것!

1. 오버라이딩(Overriding)

상위 클래스 혹은 인터페이스에 존재하는 메소드를 하위 클래스에서 필요에 맞게 재정의하는 것을 의미. 자바의 경우는 오버라이딩 시 동적바인딩된다.

ex) 아래와 같은 경우, SuperClass의 fun이라는 인터페이스를 통해 SubClass의 fun이 실행됨

SuperClass object = new SubClass();
object.fun();

2. 오버로딩(Overloading)

메소드의 이름은 같음. return 타입은 동일하거나 다를 수 있지만, return 타입만 다를 수는 없다. 매개변수의 타입이나 갯수가 다른 메소드를 만드는 것을 의미. 다양한 상황에서 메소드가 호출될 수 있도록 한다. 언어마다 다르지만, 자바의경우 오버로딩은 다른 시그니쳐를 만드는 것으로, 아예 다른함수를 만든것과 비슷하다고 생각하면 된다. 시그니쳐가 다르므로 정적바인딩으로 처리 가능하며, 자바의 경우 정적으로 바인딩된다.

ex) 아래와 같은 경우 fun(SuperClass super)이 실행된다.

main(blabla) {
  SuperClass object = new SubClass();
  fun(object);
}

fun(SuperClass super) {
  blabla....
}

fun(SubClass sub) {
  blabla....
}

※ 시그니처란 ?

자바 프로그래밍 언어에서 메서드 시그니처는 메서드 명과 파라미터의 순서, 타입, 개수를 의미. 리턴 타입과 exceptions는 메서드 시그니처가 아님!

 

아래 두 메서드는 다른 시그니처를 가진다.

doSomething(String[] y);
doSomething(String y);

아래 메서드들은 모두 같은 시그니처를 가진다.

int doSomething(int y) 
String doSomething(int x)
int doSomething(int z) throws java.lang.Exception
반응형

'Spring' 카테고리의 다른 글

PSA란?  (0) 2022.02.23
접근제어자 종류와 기능  (0) 2022.02.09
Java 코드의 컴파일 과정  (0) 2022.02.08
정적 타입 언어 vs 동적 타입 언어  (0) 2022.02.08
Redis란?  (0) 2021.12.20

BELATED ARTICLES

more