개발공부/CS

오버로딩(Overloading) vs. 오버라이딩(Overriding) 차이점

카슈밀 2025. 2. 16. 00:09
반응형

📌 오버로딩(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) → 부모 메서드를 자식 클래스에서 새로운 동작으로 재정의

 

이제 차이점 확실히 알겠지? 😊 더 궁금한 거 있으면 질문해줘! 🚀🔥

 
728x90

'개발공부 > CS' 카테고리의 다른 글

Git과 GitHub 차이점  (0) 2025.02.16
추상화란?  (0) 2025.02.16
가비지 컬렉터란?  (0) 2025.02.16
Docker란?  (0) 2025.02.15
API란?  (0) 2025.02.15