자바의 오버로딩(overloading)과 오버라이딩(overriding)에 대해서 살펴보자.
한 줄 요약을 통해 기본적인 느낌을 알고가자
오버로딩(overloading): 기존에 없는 새로운 메서드를 정의하는 것
오버라이딩(overriding): 상속받은 메서드의 내용을 변경하는 것
✅ Overloading(오버로딩)
오버로딩은 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 오버로딩이라 한다.
같은 이름의 메서드를 정의한다고 해서 무조건 오버로딩인 것은 아니며 오버로딩이 성립하기 위해서는 다음과 같은 조건을 만족해야 한다.
1. 메서드 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.
3. 반환 타입은 관계없다.
메서드의 이름이 같다고 하더라도 매개변수가 다르면 서로 구별될 수 있기 때문에 오버로딩이 가능하다. 위에 언급한 조건들을 충족하지 못하는 메서드는 중복 정의로 간주하여 컴파일 시에 에러가 발생한다.
오버로딩의 가장 대표적인 예로는 println()메서드가 있다. println메서드에 매개변수로 어떠한 타입의 값을 넣어도 컴파일 에러가 일어나지 않는다. 이는 println이 아래와 같이 10개의 오버로딩 된 메서드를 정의해놓기 때문이다.
void println()
void printIn(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int ×)
void println(long x)
void println(Object x)
void println(String x)
println메서드를 호출할 때 매개변수로 넘겨주는 값의 타입에 따라서 위의 오버로딩된 메서드들 중의 하나가 선택되어 실행된다.
✅ Overriding(오버라이딩)
오버라이딩은 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. 코드의 재사용성을 높이기 위해 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경할 수도 있다. 이러한 경우를 오버라이딩이라고 한다.
class Point {
int x;
int y;
String getLocation() {
return x + y;
}
}
class Point3D extends Point {
int z;
String getLocation() {
return x + y + z;
}
}
Point 클래스가 2차원 Point3D가 3차원을 표현하기 위한 클래스라고 가정한다면 Point3D클래스는 Point 클래스를 상속받고, 오버라이딩을 통해 z축의 좌표값도 포함하여 반환하도록 오버라이딩하였다. 이와 같이 새로운 메서드를 생성하는 것보다 기존에 있던 메서드를 오버라이딩하는 것이 효율적이다. 다만 오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야 한다.
'Java' 카테고리의 다른 글
Spring Boot + JPA + MySQL연동(Gradle) (0) | 2023.07.23 |
---|---|
[Annotation] Spring Framwork Annotation 알아보기 (0) | 2023.05.22 |