• 오버로딩(Overloading), 오버라이딩(Overriding)

    2025. 2. 27.

    by. hyunji1109

    출처: https://medium.com/@mesfandiari77

     

     

    오버로딩(Overloading)

    • 같은 이름의 메서드를 매개변수를 달리해서 여러 번 정의
    • 같은 이름의 메서드를 여러 개 정의하는 것
    • 단, 메서드의 매개변수가 달라야 한다
    • 같은 클래스 안에서 이루어진다

     

    특징

     

    • 메서드 이름은 같지만 매개변수의 개수, 타입, 순서가 달라야 한다
    • 리턴 타입은 달라도 되지만 매개변수로만 구분
    • 프로그램 실행 전에 결정

     

    예)

    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, 5));         // 출력: 8
            System.out.println(calc.add(3.5, 4.2));     // 출력: 7.7
            System.out.println(calc.add(1, 2, 3));      // 출력: 6
        }
    }

     

     

     


     

    Overriding (오버라이딩)

    • 부모 클래스나 인터페이스의 메서드를 자식 클래스에서 재정의하는 것
    • 부모 메서드를 재정의하여 자식 클래스에 맞게 변경
    • 상속 관계에서 이루어진다

     

    특징

     

    • 메서드 이름, 매개변수, 리턴 타입이 부모와 완전히 동일해야 한다
    • 부모의 기능을 유지하거나 새롭게 재정의
    • 프로그램 실행 중에 결정
    • @Override 애너테이션을 사용하는 것이 좋다

     

     

    예)

    class Parent {
        void sayHello() {
            System.out.println("Hello from Parent!");
        }
    }
    
    class Child extends Parent {
        @Override
        void sayHello() { // 부모의 메서드를 재정의
            System.out.println("Hello from Child!");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Parent parent = new Parent();
            parent.sayHello(); // 출력: Hello from Parent!
    
            Parent child = new Child();
            child.sayHello();  // 출력: Hello from Child!
        }
    }

     

     

     

     

    특징 Overloading Overriding
    클래스 관계 같은 클래스 부모-자식 클래스 (상속 관계)
    메서드 이름 동일 동일
    매개변수 달라야 함 완전히 동일
    리턴 타입 달라도 가능 동일해야 함
    실행 시점 컴파일 타임 런타임
    키워드 필요 없음 @Override 권장

     


     

    @Override 

    • Java에서 메서드를 재정의할 때 사용하는 애너테이션
    • 부모 클래스 또는 인터페이스의 메서드를 자식 클래스에서 재정의(오버라이드)하고 있음을 컴파일러에 알림
    • 코드의 가독성이 높아지고, 재정의 과정에서 실수를 방지

     

    장점

    • 컴파일 오류 방지
      • 부모 클래스의 메서드 이름이나 시그니처를 잘못 입력했을 경우, 컴파일 시 오류를 발생시켜 실수를 잡아준다
    • 가독성 향상
      • 이 메서드가 부모 클래스의 메서드를 재정의한 것임을 다른 개발자들이 바로 이해할 수 있다
    • 일관성 유지
      • 코드 리뷰 및 유지보수 시, 의도적으로 재정의한 메서드임을 명확히 알 수 있다

     

    예)

    class Parent {
        void sayHello() {
            System.out.println("Hello from Parent!");
        }
    }
    
    class Child extends Parent {
        @Override
        void sayHello() { // 부모 메서드 재정의
            System.out.println("Hello from Child!");
        }
    }
    
    public class OverrideExample {
        public static void main(String[] args) {
            Parent obj = new Child();
            obj.sayHello(); // 출력: Hello from Child!
        }
    }

     

     

    💥 실수 방지

    class Parent {
        void sayHello() {
            System.out.println("Hello from Parent!");
        }
    }
    
    class Child extends Parent {
        @Override
        void sayHelloo() { // 오타로 인해 부모 메서드를 재정의하지 못함
            System.out.println("Hello from Child!");
        }
    }

     

     

    'CS > JAVA' 카테고리의 다른 글

    JAVA 8, JAVA 11  (0) 2025.02.28
    [Java] Math 클래스  (0) 2025.02.13
    JAVA(1)  (0) 2025.01.14

    댓글