오버로딩 & 오버라이딩
Aug 05, 2024
오버로딩(Overloading)과 오버라이딩(Overriding)
이 둘은 다형성을 높여주는 개념이며, 비슷한 이름을 가지고 있지만, 전혀 다른 개념이라고 봐도 될만큼 차이가 있다
오버로딩(Overloading)
- 오버로딩은 같은 이름의 메서드를 여러 개 정의해, 인자의 수나 타입에 따라 다른 동작을 수행하게 하는 것을 의미.
- 동일한 이름을 가진 메서드가 여러 개 정의됨.
- 메서드의 파라미터 수나 타입이 달라야 함.
- 어떤 메서드가 호출될 지 컴파일 타임에 결정됨.
class Math {
// 두 개의 정수를 더하는 메서드
int add(int a, int b) {
return a + b;
}
// 세 개의 정수를 더하는 메서드
int add(int a, int b, int c) {
return a + b + c;
}
// 두 개의 실수를 더하는 메서드
double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Math math = new Math();
// 메서드 오버로딩 호출 예시
System.out.println(math.add(1, 2)); // Output: 3
System.out.println(math.add(1, 2, 3)); // Output: 6
System.out.println(math.add(1.5, 2.5)); // Output: 4.0
}
}
오버라이딩(Overriding)
- 오버라이딩은 부모 클래스에 정의된 메서드를 자식클래스에서 재정의하여, 부모 클래스의 메서드를 덮어쓰는 것을 말함. 이는 런타임에 결정되며, 동적 다형성을 구현함.
- 부모 클래스와 동일한 이름의 메서드를 자식 클래스에서 재정의함.
- 메서드의 파라미터, 반환타입이 동일해야 한다.
- 어떤 메서드가 호출이 되는지 런타임에 결정됨.
// 상위 클래스
class Animal {
// 상위 클래스의 메서드
public void sound() {
System.out.println("Some sound");
}
}
// 하위 클래스
class Dog extends Animal {
// 메서드 오버라이딩
@Override
public void sound() {
System.out.println("Bark");
}
}
// 또 다른 하위 클래스
class Cat extends Animal {
// 메서드 오버라이딩
@Override
public void sound() {
System.out.println("Meow");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
Animal dog = new Dog();
Animal cat = new Cat();
// 메서드 오버라이딩 호출 예시
animal.sound(); // Output: Some sound
dog.sound(); // Output: Bark
cat.sound(); // Output: Meow
}
}
요약 비교
특성 | 오버로딩(Overloading) | 오버라이딩(Overriding) |
메서드 이름 | 동일 | 동일 |
파라미터(매개변수) | 다름 | 동일 |
반환 타입 | 다를 수 있음 | 동일 |
접근 제어자(public,private…) | 상관없음 | 동일 혹은 더 넓은 범위 |
결정 시점 | 컴파일 타임 | 런타임 |
사용하는 상황 | 같은 클래스 내에 여러 버전의 메서드를 제공할 때 | 부모 클래스의 메서드를 자식 클래스에서 재정의 할 때 |
Share article