본문 바로가기
JAVA

Overloading과 Overriding

by 주연이가 주연이다. 2024. 1. 17.

오버로딩(Overloading)과 오버라이딩(Overriding)은 객체 지향 프로그래밍(OOP)에서 다형성(Polymorphism)을 구현하는 두 가지 중요한 개념이다.

  1. 오버로딩 (Overloading):
    • 오버로딩은 같은 이름의 메서드나 생성자를 여러 개 정의하는 것
    • 메서드나 생성자의 이름은 같지만, 매개변수의 타입, 개수, 또는 순서가 다르게 정의됨
    • 오버로딩은 컴파일러가 메서드 호출 시에 적절한 메서드를 선택할 수 있도록 해주며, 코드의 가독성을 높이고 사용자에게 편의성을 제공함
class Calculator {
    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) {
        return a + b;
    }
}

  1. 오버라이딩 (Overriding):
    • 오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 다시 정의하는 것
    • 부모 클래스와 자식 클래스 간의 관계에서 발생하며, 자식 클래스는 부모 클래스의 메서드를 동일한 시그니처(이름, 매개변수, 반환 타입)로 재정의함
    • 오버라이딩은 다형성의 핵심 원칙 중 하나로, 부모 클래스의 메서드를 자식 클래스에서 필요에 맞게 재정의할 수 있음
class Animal {
    void makeSound() {
        System.out.println("Some sound");
    }
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("Bark");
    }
}

차이점:

  • 오버로딩:
    • 메서드 이름은 같지만, 매개변수의 타입, 개수, 또는 순서가 달라야 한다.
    • 반환 타입은 오버로딩과 무관하다.
    • 컴파일 시간에 결정된다.
  • 오버라이딩:
    • 메서드 이름, 매개변수, 반환 타입이 부모 클래스의 메서드와 동일해야 한다.
    • 자식 클래스에서 부모 클래스의 메서드를 재정의한다.
    • 런타임에 객체의 실제 타입을 기반으로 호출할 메서드가 결정된다.
Animal animal = new Dog();
animal.makeSound(); // Dog 클래스의 makeSound가 호출된다 (오버라이딩).

이러한 오버로딩과 오버라이딩은 다형성을 제공하여 유연하고 재사용 가능한 코드를 작성할 수 있게 해준다.

728x90
반응형

'JAVA' 카테고리의 다른 글

Comparable과 Comparator  (0) 2024.01.23