프로그래밍 언어/Java

[Java] 19. 오버라이딩

WooZzing 2025. 4. 9. 12:34

 

 

 

 

오버라이딩이란?

부모 클래스에 정의된 메서드를 자식 클래스에서 ‘다시 정의(재정의)’하는 것을 말합니다.

 

자식 클래스가 부모 클래스의 메서드를 그대로 사용하는 것이 아니라, 자기 상황에 맞게 메서드의 내용(기능)을 바꿔서 사용할 수 있게 해주는 기능입니다.

 

 

오버라이딩의 필요성

상속을 통해 부모의 기능을 물려받았지만, 자식 클래스 입장에서는 동작 방식이 다를 때 오버라이딩을 사용합니다.

 

예를 들어,

  • Animal이라는 클래스의 sound() 메서드는 “동물이 소리를 냅니다.”라고 되어 있습니다.
  • Dog 클래스는 "멍멍!"으로 출력하고 싶습니다.
  • Cat 클래스는 "냐옹!"으로 출력하고 싶습니다.

➡ 각 클래스에서 sound()를 오버라이딩하면 됩니다!

 

* Animal 클래스 - 부모 클래스

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

* Dog 클래스 - 자식 클래스 (오버라이딩)

public class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("멍멍!");
    }
}

* Cat 클래스 - 자식 클래스 (오버라이딩)

public class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("냐옹!");
    }
}

* 실행 클래스

public class Main {
    public static void main(String[] args) {
    	Animal animal = new Animal();
        Dog dog = new Dog();
        Cat cat = new Cat();
        
        animal.sound();
        dog.sound();
        cat.sound();
    }
}

- 출력 결과 -

동물이 소리를 냅니다.
멍멍!
냐옹!

 

👉 부모의 sound()가 있었지만, 자식이 동작 방식을 바꿔서 덮어쓴 것입니다!

 

오버라이딩은 객체지향 프로그래밍의 핵심 개념 중 하나인 다형성을 구현하는 핵심 수단입니다.
✅ 하나의 메서드가 클래스마다 다른 방식으로 동작하게 만들어줍니다.

💡 다형성이란?
➡ 같은 이름의 메서드가 객체에 따라 다르게 동작하는 성질입니다. 해당 내용은 추후에 자세히 배울 예정입니다!

 

@Override 어노테이션

@Override
public void sound() {
    ...
}
  • @Override는 오버라이딩을 명확하게 표시해 주는 주석입니다.
  • 실수로 메서드 이름이나 매개변수를 잘못 쓰면 컴파일 에러가 발생해서 실수를 줄일 수 있습니다.

👉 가급적 모든 오버라이딩 메서드에 붙여주는 습관을 들이는게 좋습니다!

 

 

오버라이딩의 조건

조건 설명
메서드 이름 동일 부모와 자식 메서드 이름이 같아야 함
매개변수(파라미터) 동일 매개변수 개수와 타입이 같아야 함
반환 타입 동일 반환 타입도 동일해야 함
접근 제어자 부모보다 좁은 범위 불가 ( public ➡ private ❌ )

 

 

 

 

읽어주셔서 감사합니다 😊

 


소스 코드 바로가기