카테고리 없음

[Java] 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점?

Huiyeon 2024. 3. 21. 04:49

 

 

 

오버로딩(Overloading)

오버로딩은 같은 이름을 가진 메소드를 클래스 내에 여러 개 정의할 수 있게 해주는 기능

각 메소드는 매개변수의 개수나 타입이 달라야 한다.

오버로딩의 목적은 다양한 입력 타입을 처리할 수 있게 함으로써, 메소드의 재사용성을 높이는 것이다.

 

특징

  • 메소드 이름은 같지만 매개변수의 타입, 개수, 순서가 달라야 한다.(개수가 같으면 타입, 타입이 같으면 개수가 달라야 함)
  • 반환 타입만 다른 경우에는 오버로딩이 안된다.

 

ex)

public class Example {
    // 오버로딩된 메소드 1
    public void print(String data) {
        System.out.println(data);
    }

    // 오버로딩된 메소드 2
    public void print(int data) {
        System.out.println(data);
    }

    // 오버로딩된 메소드 3
    public void print(String data, int times) {
        for (int i = 0; i < times; i++) {
            System.out.println(data);
        }
    }
}

 

 

오버라이딩(Overriding)

오버라이딩은 상속받은 메소드를 자식 클래스에서 재정의하는 기능

상속받은 메소드와 동일한 시그니처(메소드 이름, 매개변수의 타입과 개수)를 가진다.

메소드의 내부 구현을 변경하여 자식 클래스에 맞게 동작하도록 한다.

오버라이딩의 목적은 상속받은 메소드의 동작을 자식 클래스의 필요에 맞게 수정하는 것이다.

 

특징

  • 메소드 이름, 매개변수의 타입과 개수가 부모 클래스에서 정의된 것과 동일해야 한다.
  • 반환 타입은 부모 클래스의 메소드와 같거나, 반환 타입이 공변하는 경우(자식 클래스 타입)도 가능하다.
  • 접근 제어자는 부모 클래스의 메소드보다 더 제한적이지 않아야 한다.
  • @Override 어노테이션을 사용해 오버라이딩임을 표현할 수 있음

ex)

class Animal {
    // 부모 클래스의 메소드
    public void sound() {
        System.out.println("동물 소리");
    }
}

class Dog extends Animal {
    // 오버라이딩된 메소드
    @Override
    public void sound() {
        System.out.println("멍멍");
    }
}
반응형