본문 바로가기
Java_language

오버라이딩 (Overriding)

by 헬로제이콥 2025. 12. 3.

🛠️ 오버라이딩 (Overriding)

오버라이딩은 상속 관계에서 일어나는 특별한 일이에요. 물려받은 능력을 "내 방식대로 덮어쓰기" 하는 것을 뜻합니다. 자바(Java) 언어에서 아주 중요하게 사용되는 개념이에요.


👶 오버라이딩의 개념 (초등학생 눈높이)

오버라이딩은 자식 클래스부모 클래스로부터 물려받은 능력이 마음에 들지 않거나, 자식에게 더 적합한 행동으로 바꾸고 싶을 때 사용해요.

  • Override는 영어로 '위에 덮어쓰다'라는 뜻이에요.
  • 규칙: 부모님과 똑같은 이름똑같은 방법으로 새로운 능력을 만들어야 해요.

🦁 예제: '먹는 방법' 바꾸기

  1. 부모 ('동물')의 능력: "음식을 천천히 씹어서 먹는다." (부모님의 방법)
  2. 자식 ('호랑이')의 생각: "나는 사냥꾼이니까 천천히 먹으면 안 돼! 더 빨리 먹어야지!"
  3. 오버라이딩: '호랑이'는 부모에게 물려받은 똑같은 이름의 능력(먹는다)을 새로운 내용("음식을 빨리 뜯어서 먹는다.")으로 덮어써요.

'호랑이'에게 '먹는다'는 명령을 내리면, 부모님의 '천천히 먹는' 능력 대신, 호랑이의 새로운 '빨리 뜯어 먹는' 능력이 실행됩니다.


💻 자바 오버라이딩 예제

이 개념을 실제로 자바 코드로 만들어 볼게요.

1. 부모 클래스: Animal (동물)

모든 동물이 가진 공통적인 '소리 내기' 능력을 만듭니다.

Java
 
class Animal {
    // 모든 동물이 기본적으로 내는 소리
    public void makeSound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

2. 자식 클래스: Dog (개)

Dog는 Animal을 상속받았지만, 자기만의 소리를 내고 싶어서 부모의 makeSound 능력을 오버라이딩합니다.

Java
 
class Dog extends Animal {
    // @Override: 오버라이딩했다는 것을 알려주는 표시 (생략 가능하지만 쓰는 것이 좋아요!)
    @Override 
    public void makeSound() {
        System.out.println("멍멍! (개가 짖습니다)");
    }
}

3. 실행해보기

Dog 객체를 만들고 makeSound 명령을 내리면, 부모의 소리 대신 오버라이딩된 개의 소리가 나옵니다.

Java
 
public class OverridingExample {
    public static void main(String[] args) {
        // Dog 객체를 만듭니다.
        Dog myDog = new Dog();
        
        // myDog에게 makeSound()를 명령합니다.
        myDog.makeSound(); 
        
        // 출력 결과: 멍멍! (개가 짖습니다)
    }
}

결론: Dog는 부모인 Animal의 makeSound 능력을 물려받았지만, 자신의 행동에 맞게 그 능력을 새롭게 덮어썼기 때문에, "동물이 소리를 냅니다." 대신 "멍멍! (개가 짖습니다)"가 출력된 것입니다. 이것이 자바에서의 오버라이딩입니다.

'Java_language' 카테고리의 다른 글

인터페이스란 무엇일까요?  (0) 2025.12.03
추상화란  (0) 2025.12.03
다형성  (0) 2025.12.03
상속  (0) 2025.12.03
상속이란?  (0) 2025.12.01