📌 오버로딩(Overloading) vs. 오버라이딩(Overriding) 차이점
오버로딩(Overloading)과 오버라이딩(Overriding)은 객체지향 프로그래밍(OOP)에서 자주 사용되는 개념
하지만 둘은 완전히 다른 개념이니까 헷갈리지 않도록 정리해볼게! 😊
구분 오버로딩 (Overloading) 오버라이딩 (Overriding)
정의 같은 이름의 메서드를 매개변수(파라미터)만 다르게 여러 개 정의하는 것 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것
적용 대상 같은 클래스 내에서 적용 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 변경
메서드 이름 같아야 함 같아야 함
매개변수(파라미터) 다르게 설정해야 함 (개수, 타입 등 변경) 부모 메서드와 완전히 동일해야 함
반환 타입 다르게 설정 가능 부모 메서드와 동일해야 함 (일부 언어에서는 covariant 반환 타입 허용)
접근 제한자 자유롭게 설정 가능 부모 메서드보다 접근 범위를 좁힐 수 없음
대표적인 사용 예 생성자 오버로딩, println() 메서드 다형성 구현, 부모 메서드 기능 확장
📌 오버로딩(Overloading) 예제 (Java)
💡 같은 이름의 메서드지만 매개변수가 다름!
class MathUtil {
// 정수 덧셈
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;
}
}
public class Main {
public static void main(String[] args) {
MathUtil math = new MathUtil();
System.out.println(math.add(2, 3)); // 5 (int 버전 호출)
System.out.println(math.add(2.5, 3.5)); // 6.0 (double 버전 호출)
System.out.println(math.add(1, 2, 3)); // 6 (3개 매개변수 버전 호출)
}
}
📌 같은 add() 메서드지만 매개변수 개수나 타입이 다르면 다른 메서드로 인식!
📌 오버라이딩(Overriding) 예제 (Java)
💡 부모 클래스의 메서드를 자식 클래스에서 재정의!
class Animal {
void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
void makeSound() { // 부모의 makeSound()를 오버라이딩
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.makeSound(); // "멍멍!" 출력 (오버라이딩된 메서드 호출)
}
}
📌 부모 클래스의 makeSound()를 자식 클래스 Dog에서 새롭게 재정의했어!
➡️ 이제 Dog 클래스의 인스턴스가 makeSound()를 호출하면 "멍멍!"이 출력돼! 🐶
📌 오버로딩 vs. 오버라이딩 핵심 요약
항목 오버로딩 (Overloading) 오버라이딩 (Overriding)
기본 개념 같은 클래스 내에서 같은 이름의 메서드를 여러 개 정의 부모 클래스의 메서드를 자식 클래스에서 재정의
매개변수 다르게 설정해야 함 부모와 동일해야 함
반환 타입 다르게 설정 가능 부모와 동일해야 함
적용 대상 같은 클래스 내에서 사용 상속 관계에서 사용
접근 제한자 자유롭게 설정 가능 부모보다 좁힐 수 없음
📌 결론:
✅ 오버로딩(Overloading) → 같은 이름, 다른 매개변수로 같은 클래스 내에서 여러 메서드를 정의
✅ 오버라이딩(Overriding) → 부모 메서드를 자식 클래스에서 새로운 동작으로 재정의
이제 차이점 확실히 알겠지? 😊 더 궁금한 거 있으면 질문해줘! 🚀🔥