💡 오버로딩 vs 오버라이딩
오버로딩(overloading): 이름은 같지만 기존에 없던 새로운 기능의 메서드를 새로 정의하는 것 (new)
오버라이딩(overriding): 상속 받은 메서드의 내용을 변경/재정의하는 것 (change, modify)
🧐 결론을 먼저 말하자면 둘의 차이는 위와 같다.
각 역할의 자세한 내용에 대해서는 아래에서 알아보자.
overloading, 한국말로 "과적하다."
오버로딩의 대표적인 예시가 바로 println()
이다.
우리는 println()
메소드를 쓸 때, 어떤 매개변수를 써야할지 고민한 적이 한번도 없다.
왜냐하면 PrintStram 클래스 안에 아래와 같은 메서드들이 정의되어있고
컴파일러가 알맞은 메소드를 호출해주었기 때문이다.
void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(float x)
void println(int x)
void println(long x)
void println(Object x)
void println(String x)
이렇게 메서드 한 개로 여러가지 기능들을 할 수 있는 것이 오버로딩이다.
자바가 오버로딩을 지원하지 않는다면 모든 메서드의 이름은 달랐어야할 것이고
우리는 println을 호출할때 마다 알맞은 메서드명을 떠올리느라 애를 먹었을지도 모른다.
void printlnInt(int x)
void printlnChar(char x)
void printlnFloar(floar x)
.
.
.
class MyMath3 {
int add(int a, int b) {
System.out.print("int add(int a, int b) - ");
return a+b;
}
long add(int a, long b) {
System.out.print("long add(int a, long b) - ");
return a+b;
}
long add(long a, int b) {
System.out.print("long add(long a, int b) - ");
return a+b;
}
long add(long a, long b) {
System.out.print("long add(long a, long b) - ");
return a+b;
}
int add(int[] a) { // 배열의 모든 요소의 합을 결과로 돌려준다.
System.out.print("int add(int[] a) - ");
int result = 0;
for(int i=0; i < a.length;i++)
result += a[i];
return result;
}
}
long add(int a, long b)
long add(long a, int b)
위와 같은 메서드 두개가 있을 때, add(3, 3)
처럼 메소드를 호출하는 경우 컴퓨터는 어떤 메서드를 호출해야할지 모호하다. 그래서 "The method is ambiguous" 오류가 발생한다. 따라서 add(3, 3L)
혹은 add(3L, 3)
처럼 명확하게 사용해야 한다.
override, 한국말로 "덮어쓰다."
class Point {
int x;
int y;
String getLocation(){
return "x: " + x + ", y: " + y;
}
}
위 Point 클래스를 상속받은 아래 Point3D 클래스에서 getLocation()을 그냥 호출하면
Point3D 클래스에서 추가된 z의 좌표값을 알 수 없을 것이다.
class Point3D extends Point {
int z;
//오버라이딩
String getLocation(){
return "x: " + x + ", y: " + y + ", z:" + z;
}
}
상속받은 Point의 getLocation()을 아래처럼 자신의 상황에 맞게 재정의하는 것이 오버라이딩이다.
💡 오버로딩 vs 오버라이딩
오버로딩(overloading): 이름은 같지만 기존에 없던 새로운 기능의 메서드를 새로 정의하는 것 (new)
오버라이딩(overriding): 상속 받은 메서드의 내용을 변경/재정의하는 것 (change, modify)