JAVA/Java 의 기본!

Java 메서드 오버로딩과 오버라이딩: 초보자를 위한 쉬운 설명과 예제

CodeCaine Explorer 2024. 12. 19. 11:15
728x90
반응형
SMALL

안녕하세요! 😊 Java에서 자주 헷갈리는 오버로딩(Overloading)오버라이딩(Overriding)에 대해 쉽게 설명드릴게요. 이 두 개념은 자바 메서드의 활용과 관련이 있지만, 서로 다른 상황에서 사용되며 의미도 다릅니다. 차근차근 이해해보아요! 💪


오버로딩 (Overloading)

1. 정의

오버로딩은 같은 이름의 메서드매개변수의 타입이나 개수를 다르게 정의하는 것입니다.
즉, 하나의 클래스 내에서 같은 이름의 메서드를 여러 번 정의할 수 있습니다.

특징

  • 메서드 이름은 같아야 합니다.
  • 매개변수의 개수나 타입이 달라야 합니다.
  • 반환값의 타입은 오버로딩에 영향을 주지 않습니다.

예시 코드

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;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        System.out.println(calc.add(3, 4));         // 7
        System.out.println(calc.add(3.5, 4.5));     // 8.0
        System.out.println(calc.add(1, 2, 3));      // 6
    }
}

요약

  • 언제? 메서드 이름은 같게 유지하면서 다양한 매개변수 조합을 처리하고 싶을 때.
  • 어디에서? 같은 클래스 내부에서 사용.

오버라이딩 (Overriding)

1. 정의

오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것입니다.
즉, 부모로부터 상속받은 메서드의 기능을 덮어씌우는 것입니다.

특징

  • 메서드 이름, 매개변수, 반환 타입 모두 부모 클래스와 동일해야 합니다.
  • 부모 클래스의 접근 제어자보다 더 좁은 범위로 변경할 수 없습니다. (예: protectedprivate 불가)
  • @Override 어노테이션을 붙이는 것이 권장됩니다.

예시 코드

class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Dog barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Dog();
        myAnimal.sound(); // Dog barks
    }
}

요약

  • 언제? 부모 클래스의 메서드를 자식 클래스에서 새로운 동작으로 대체하고 싶을 때.
  • 어디에서? 상속 관계에서 사용.

오버로딩 vs 오버라이딩 차이점

구분 오버로딩(Overloading) 오버라이딩(Overriding)
목적 같은 이름의 메서드로 다양한 매개변수 처리 부모 클래스의 메서드를 자식 클래스에서 재정의
클래스 관계 같은 클래스 내에서 사용 상속 관계에서 사용
메서드 이름 같아야 함 같아야 함
매개변수 개수나 타입이 달라야 함 부모 클래스와 완전히 동일해야 함
반환 타입 다를 수 있음 부모 클래스와 동일해야 함
접근 제어자 영향 없음 부모 클래스보다 더 좁은 범위로 설정 불가

정리

  • 오버로딩: 같은 클래스에서 메서드 이름은 유지하고, 매개변수를 달리하여 다양한 작업 처리.
  • 오버라이딩: 부모 클래스 메서드를 자식 클래스에서 재정의하여 새로운 기능 추가.

💡 헷갈릴 땐 이렇게 기억하세요!

  • 오버로딩은 같은 클래스 내에서 "메서드를 다양하게 만드는 것."
  • 오버라이딩은 상속 관계에서 "부모의 것을 덮어쓰는 것."

😊 이해가 잘 안 되는 부분이 있으면 댓글로 질문 남겨주세요. 끝까지 포기하지 말고 조금만 더 힘내세요! 💪

728x90
반응형
SMALL