728x90

면접 단골 질문인 오버로딩(Overloading)과 오버라이딩(Overridding)의 차이점에 대해서 확실히 개념을 잡고가고자 아래 포스팅을 작성한다.
1. 오버로딩(Overloading)
한 클래스 내에서 동일한 이름의 메소드(함수)를 복수로 정의하는 것
단, 메소드의 이름은 동일해야하며 매개변수(parameter)의 갯수 또는 타입이 달라야 한다.
*리턴 타입만 다른 경우는 오버로딩이라고 볼 수 없다.
예제)
public class Main {
public static void main(String[] args) {
}
int add(int x, int y, int z) {
return x+y+z;
}
long add(int a, long b, long c) {
return a+b+c;
}
}
Main 클래스 내 add라는 동일한 이름을 가지는 두 개의 메소드가 정의되어 있다. 상단의 add 메소드의 매개변수는 모두 int형임에 비해 하단의 add 메소드의 매개변수는 int, long, long이며 매개변수가 long이 있음에 따라 리턴 타입 또한 long으로 리턴한다.
여기서 중요한 점은 한 클래스 내 동일한 이름의 메소드지만 매개변수 또는 갯수가 서로 다르다는 점이다.
2. 오버라이딩 (Overridding)
부모 클래스로부터 상속받은 자식 클래스에서 부모 클래스의 메소드 내용을 덮어써서 메소드의 내용을 새로 작성하는 것을 일컫는다.
예제)
class Car {
String model;
String color;
public Car(String model) {
this.model = model;
}
public void powerSource() {
System.out.println(model + "는 엔진으로 굴러갑니다.");
}
}
class EVCar extends Car {
public EVCar(String model) {
super(model);
}
@Override
public void powerSource() {
System.out.println(model + "는 전기모터로 굴러갑니다.");
}
}
public class Main {
public static void main(String[] args) {
Car car1 = new EVCar("테슬라 모델3");
car1.powerSource();
Car car2 = new Car("BMW 520d");
car2.powerSource();
}
}
EVCar 클래스는 Car라는 부모 클래스를 상속받은 자식 클래스다. 이 때 powerSource(동력원) 이라는 메소드를 상속 받은 뒤 새로운 내용으로 덮어쓰는 과정이 이루어졌다. 이를 오버라이딩(Overridding)이라고 일컫는다.
위 소스코드의 실행결과는 아래와 같다.
테슬라 모델3는 전기모터로 굴러갑니다.
BMW 520d는 엔진으로 굴러갑니다.
면접 단골 질문이므로 꼭 머리 속에 새겨둘 수 있도록 하자.
728x90