메서드 오버로딩 (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 |