IMG-LOGO
공지사항 :

자바 Overriding(오버라이딩)

lmkfox - 2025-07-16 06:48:58 12 Views 0 Comment

오버라이딩이란?

  • 오버라이딩(Overriding)은 상속받은 메서드를 자식 클래스에서 같은 이름, 같은 매개변수, 같은 반환 타입으로 다시 정의하는 것입니다.

  • 자식 클래스는 부모 클래스의 기본 동작을 변경하거나 확장할 수 있습니다.


오버라이딩의 문법

@Override
public 반환타입 메서드이름(매개변수목록) {
    // 새로운 구현 내용
}

  • @Override 어노테이션은 컴파일러에게 오버라이딩을 명시적으로 알려주는 역할을 합니다.

  • 어노테이션을 생략해도 작동하지만, 붙이는 것이 일반적으로 권장됩니다. 실수로 메서드 시그니처가 달라질 경우 오류를 바로 알 수 있기 때문입니다.


예제 코드

class Animal {
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("강아지가 멍멍 짖습니다.");
    }
}
public class Main {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound(); // 출력: 강아지가 멍멍 짖습니다.
    }
}

  • Dog 클래스는 Animal 클래스의 sound() 메서드를 오버라이딩했습니다.

  • Animal a = new Dog(); 형태는 업캐스팅이 적용된 형태이며, 실행 시에는 Dog 클래스의 sound()가 호출됩니다. 이것이 다형성입니다.


오버라이딩 조건 정리

조건

설명

메서드 이름

부모 클래스와 동일해야 함

매개변수 리스트

부모 클래스와 정확히 일치해야 함

반환 타입

부모 클래스와 같거나 더 좁은 범위(covariant)

접근 제어자

부모보다 좁아질 수 없음 (동일하거나 더 넓어야 함)

예외 처리

부모가 던지는 예외보다 같거나 더 적은 예외를 던져야 함


오버라이딩과 오버로딩의 차이

구분

오버라이딩(Overriding)

오버로딩(Overloading)

정의

상속 관계에서 메서드 재정의

같은 클래스 내에서 메서드 이름 재사용

시그니처

동일해야 함

매개변수 개수 또는 타입이 달라야 함

목적

부모 클래스의 기능 수정

다양한 인자에 대응하는 유연성 제공


왜 오버라이딩을 사용하는가?

  1. 다형성 구현

    • 상위 타입으로 선언된 객체가 실제로는 하위 클래스의 메서드를 실행할 수 있게 함.

  2. 기능 확장

    • 기본 기능을 자식 클래스에 맞게 재정의하여 더 유용하게 사용 가능.

  3. 공통 인터페이스 사용 가능

    • 인터페이스나 추상 클래스에서 정의한 메서드를 자식 클래스에서 구체화할 수 있음.


댓글