본문 바로가기

Java Spring Boot

@Overloading / @Overriding

 

메서드 오버로딩 (Overloading)

정의:

  • 같은 이름을 가진 메서드를 여러 개 정의하는 것입니다. 이때 각 메서드는 다른 매개변수 목록(매개변수의 타입, 개수, 순서)으로 구분됩니다.

특징:

  • 메서드의 이름은 같지만 매개변수의 타입, 개수, 순서가 다릅니다.
  • 반환 타입은 다를 수 있지만, 이는 오버로딩을 결정짓는 요소는 아닙니다.
  • 주로 컴파일 시점에 결정됩니다(정적 바인딩).
class Example {
    void display(int a) {
        System.out.println("Argument: " + a);
    }
    
    void display(String b) {
        System.out.println("Argument: " + b);
    }
    
    void display(int a, String b) {
        System.out.println("Arguments: " + a + ", " + b);
    }
}

public class Main {
    public static void main(String[] args) {
        Example obj = new Example();
        obj.display(10);             // Output: Argument: 10
        obj.display("Hello");        // Output: Argument: Hello
        obj.display(10, "Hello");    // Output: Arguments: 10, Hello
    }
}

 

 

메서드 오버라이딩 (Overriding)

정의:

  • 부모 클래스의 메서드를 자식 클래스가 재정의하는 것입니다. 이때 부모 클래스의 메서드와 동일한 이름, 매개변수 목록, 반환 타입을 가져야 합니다.

특징:

  • 메서드의 이름, 매개변수의 타입 및 개수, 반환 타입 모두 동일해야 합니다.
  • 주로 런타임 시점에 결정됩니다(동적 바인딩).
  • 접근 제어자는 부모 클래스의 메서드보다 더 제한적일 수 없습니다.
  • 부모 클래스의 메서드에 적용된 예외보다 더 많은(또는 더 상위) 예외를 던질 수 없습니다.
class Parent {
    void show() {
        System.out.println("Parent's show()");
    }
}

class Child extends Parent {
    @Override
    void show() {
        System.out.println("Child's show()");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent parent = new Parent();
        parent.show();  // Output: Parent's show()
        
        Child child = new Child();
        child.show();   // Output: Child's show()
        
        Parent parentRef = new Child();
        parentRef.show();  // Output: Child's show()
    }
}

 

 

요약

  • 오버로딩(Overloading):
    • 같은 클래스 내에서 같은 이름의 메서드를 여러 개 정의.
    • 매개변수 목록이 달라야 함(타입, 개수, 순서).
    • 반환 타입이 다를 수 있음.
    • 컴파일 시점에 결정(정적 바인딩).
  • 오버라이딩(Overriding):
    • 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의.
    • 메서드 시그니처가 완전히 동일해야 함(이름, 매개변수, 반환 타입).
    • 접근 제어자, 예외 처리 규칙 존재.
    • 런타임 시점에 결정(동적 바인딩).

'Java Spring Boot' 카테고리의 다른 글

자료형의 종류(기본 자료형, 참조 자료형)  (0) 2024.06.06
super  (0) 2024.06.06
java) 생성자  (0) 2024.06.06
This  (0) 2024.06.06
java) 클래스 메소드  (0) 2024.06.06