오버라이딩과 오버로딩은 자바를 공부하는 사람이라면 자주 접해봤을 용어이다.
두 용어는 분명 다르지만 발음이 비슷하고, 일부 특징이 헷갈릴 수 있어서, 잘 구분해서 알아두는 게 좋다.
오버라이딩(Overriding)
오버라이딩에 대해 알기 위해서는 자바의 상속 개념을 이해해야 한다.
상속은 간단히 설명하자면 말 그대로 부모의 특성들을 받아와서 사용하는 것을 말한다.
이렇게 부모 클래스를 상속받은 자식클래스에서 부모 클래스의 메소드를 재정의하는 것을 오버라이딩이라고 한다.
자바 개발을 하면 IDE에서 개발하는 경우가 많을 텐데, IDE에서는 어떤 클래스나 인터페이스를 상속 받아서 Override가 가능한 경우 자동 완성을 시켜주는 기능이 있다. 이클립스의 경우 다음과 같다.
그리고 이 자동완성 메소드를 선택하면 다음과 같이 오버라이드 메소드가 자동 완성된다.
이렇게 부모 클래스의 메소드를 그대로 받아와 필요에 맞게 다시 구현해 정의하는 것이 오버라이딩이다.
자동완성 기능을 사용하는 경우 Override 되었다는 것을 표시해주기 위해 @Override 어노테이션이 붙는 것을 볼 수 있다. 필수는 아니고, 어노테이션을 쓰지 않아도 오버라이드가 가능하다. 하지만 @Override를 붙인다면 개발자도 명시적으로 이 메소드가 Override 되었음을 알 수 있고, 컴파일러도 Override된 메소드가 정상적으로 작성되었는지 체크할 수 있다.
오버라이딩 필수 조건
- 오버라이딩한 자식클래스의 메소드는 부모클래스 메소드와 메소드명, 매개변수, 리턴 타입이 모두 같아야 한다.
오버로딩(Overloading)
오버로딩은 오버라이딩과 다른 맥락에서 사용되는 용어이다. (같은 이름의 메소드를 정의하는 점에선 비슷할 지도..)
자바에서는 메소드의 이름이 같아도, 매개변수의 개수나 타입이 다르다면 한 클래스에서 중복해서 정의할 수 있다.
이 때, 리턴 타입만 다르다면 오버로딩이라고 할 수 없고 컴파일 에러가 발생할 것이다.
예를 들어, 자바에서는 다음 메소드를 한 클래스에 동시에 정의할 수 있다.
public class Example1 {
public String method1(String a, int b) {
return a + b;
}
public String method1(String a) {
return a;
}
public String method1(int a) {
return a + "";
}
}
위의 메소드는 모두 method1이라는 이름을 가지고 있지만, 매개변수의 개수와 종류가 다르기 때문에 오버로딩을 이용하여 여러 개 정의할 수 있다.
단, 아래의 경우처럼 매개변수의 개수와 종류가 같지만 리턴 타입만 다르면 오버로딩할 수 없다.
public class Example2 {
public int method2(int a) {
return a;
}
public String method2(int a) {
return a + "";
}
}
실제로 개발하는 상황을 생각해 보면, 메소드 이름이 같은데 매개변수의 종류까지 모두 같은데 오버로딩이 가능하다?
이러면 자동 완성 기능을 쓸 때 너무 헷갈릴 것 같다.
개발자는 아무래도 IDE의 자동 완성을 많이 사용할 텐데,,
단적인 예로 만약 이름과 매개변수가 같은 메소드가 5개라고 하자. 이러면 어떤 걸 골라야 할 지 엄청 헷갈릴 듯...
어차피 오버로딩이 안 되는 경우긴 하지만! 이렇게 실제 개발에서도 불편할 거라고 생각하면 쉽게 이해할 수 있을 듯하다.
오버로딩 필수 조건
- 오버로딩한 메소드는 메소드명이 같고, 매개변수의 종류 또는 개수가 달라야 한다. (리턴 타입은 무관하다.)
정리
- 오버라이딩: 자식클래스에서 부모클래스의 메소드를 재정의하는 것. 메소드명, 매개변수, 리턴타입 같음
- 오버로딩: 같은 이름의 매개변수가 다른 메소드를 정의하는 것. 메소드명 같고, 매개변수 다르며, 리턴타입은 무관
'개발 지식 > Java 자바' 카테고리의 다른 글
[Java/자바] 객체 지향의 특징, 장단점과 5대 원칙 SOLID 설명 (0) | 2023.06.01 |
---|---|
[Java/자바] static이란? static의 사용 이유와 예시 (0) | 2023.05.26 |
댓글