오버로딩 vs 오버라이딩
기술노트
🔄 오버로딩 (Overloading) vs 오버라이딩 (Overriding)
오버로딩과 오버라이딩은 객체 지향 프로그래밍(OOP)에서 메서드(함수)의 이름을 재사용하는 두 가지 다른 방법입니다. 둘 다 메서드의 다형성(Polymorphism)과 관련이 있지만, 적용되는 범위와 목적이 다릅니다.
🔄 오버로딩 (Overloading)
오버로딩은 하나의 클래스 내에서 같은 이름의 메서드를 여러 개 정의하되, 매개변수의 개수나 타입을 다르게 하는 것입니다. 반환 타입은 오버로딩에 영향을 주지 않습니다.
- 적용 범위 : 같은 클래스 내
- 목적 : 하나의 메서드 이름으로 다양한 형태의 입력을 처리하여, 코드의 가독성과 편의성을 높입니다.
- 예시 : `print()` 함수는 정수, 문자열, 실수 등 다양한 타입의 인자를 받아 출력할 수 있도록 오버로딩되어 있습니다.
```java public class Calculator {
int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } // 매개변수 타입 다름 int add(int a, int b, int c) { return a + b + c; } // 매개변수 개수 다름
} ```
🔄 오버라이딩 (Overriding)
오버라이딩은 부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하는 것입니다. 부모 클래스의 메서드와 이름, 매개변수, 반환 타입이 모두 동일해야 합니다.
- 적용 범위 : 상속 관계에 있는 부모-자식 클래스 간
- 목적 : 부모 클래스의 기능을 자식 클래스의 특성에 맞게 변경하거나 확장합니다. 다형성을 구현하는 핵심적인 방법입니다.
- 예시 : `Animal` 클래스의 `cry()` 메서드를 `Dog` 클래스에서 `멍멍`으로, `Cat` 클래스에서 `야옹`으로 재정의합니다.
```java class Animal {
void cry() { System.out.println("동물이 웁니다."); }
}
class Dog extends Animal {
@Override void cry() { System.out.println("멍멍!"); } // 부모 메서드 재정의
} ```
💡 정보처리기사 핵심 Point
- 정보처리기사 시험에서는 오버로딩과 오버라이딩의 개념, 적용 범위, 그리고 차이점을 명확히 구분하는 문제가 자주 출제됩니다.
- 오버로딩은 같은 클래스 내에서 매개변수만 다르게 하는 것이고, 오버라이딩은 상속 관계에서 부모 메서드를 재정의하는 것입니다.
- 두 개념 모두 객체 지향 프로그래밍의 다형성을 구현하는 중요한 방법입니다.