자바에서 오버로딩(Overloading)과 오버라이딩(Overriding)은 다른 개념이며, 각각의 특징과 목적이 다릅니다.
오버로딩 (Overloading)
1. 정의
- 같은 이름의 메서드가 여러 개 정의되는 것을 오버로딩이라고 합니다.
- 메서드 이름은 같지만 매개변수의 개수, 타입, 순서가 서로 달라야 합니다.
2. 목적
- 같은 기능을 하는 메서드에 대해 다양한 매개변수를 지원하여 사용자 편의성을 높입니다.
- 예를 들어, print 메서드가 정수형, 실수형, 문자열 등 다양한 타입을 출력할 수 있도록 여러 버전으로 오버로딩될 수 있습니다.
3. 컴파일 시점 결정
오버로딩은 컴파일 시점에서 어떤 메서드를 호출할지 결정됩니다. 이를 정적 바인딩(Static Binding)이라고도 합니다.
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
오버라이딩 (Overriding)
1. 정의
- 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 동일한 시그니처로 다시 정의하는 것을 오버라이딩이라고 합니다.
- 메서드의 시그니처(이름, 매개변수 타입, 순서, 반환 타입)가 부모 클래스와 동일해야 합니다.
2. 목적
부모 클래스의 메서드를 자식 클래스에서 필요에 맞게 재정의하여 확장하거나 변경합니다.
3. 런타임 시점 결정
오버라이딩은 런타임 시점에서 객체의 실제 타입에 따라 동적으로 어떤 메서드를 호출할지 결정됩니다. 이를 동적 바인딩(Dynamic Binding) 또는 런타임 다형성이라고 합니다.
class Animal {
void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("강아지가 짖습니다.");
}
}
오버로딩과 오버라이딩의 비교
1. 메서드 시그니처
- 오버로딩은 메서드 이름이 같지만 매개변수의 개수, 타입, 순서가 달라야 합니다.
- 오버라이딩은 메서드의 시그니처가 완전히 동일해야 합니다.
2. 상속
- 오버로딩은 상속과 무관하게 어떤 클래스에서든 사용될 수 있습니다.
- 오버라이딩은 상속 관계에서만 발생합니다.
3. 결정 시점
- 오버로딩은 컴파일 시점에 결정됩니다.
- 오버라이딩은 런타임 시점에 결정됩니다.
4. 목적
- 오버로딩은 다양한 매개변수를 처리하기 위해 사용됩니다.
- 오버라이딩은 상속 관계에서 부모 클래스의 메서드를 재정의하여 다양한 동작을 제공합니다.
5. 어노테이션
- 오버로딩에는 @Overload와 같은 어노테이션은 없습니다.
- 오버라이딩은 @Override 어노테이션을 사용하여 명시적으로 표시할 수 있습니다.
class Example {
// 오버로딩
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
// 오버라이딩
void someMethod() {
// 부모 클래스의 동일한 메서드를 오버라이딩
}
}
간단하게 말하면, 오버로딩은 같은 이름의 메서드를 매개변수를 다르게 정의하는 것이고, 오버라이딩은 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것입니다.
With ChatGPT
'JAVA > 포스팅' 카테고리의 다른 글
자바 super() (0) | 2023.11.11 |
---|---|
자바 super (0) | 2023.11.11 |
자바 오버라이딩의 조건 (0) | 2023.11.10 |
자바 오버라이딩이란 (0) | 2023.11.10 |
자바 Object클래스 (0) | 2023.11.10 |