본문 바로가기
JAVA/객체지향 프로그래밍 (OOP) 기초

오버라이딩 개념

by DEVLIB 2025. 4. 13.
728x90

오버라이딩(Overriding)이란?

부모 클래스의 메서드를 자식 클래스에서 같은 이름, 같은 매개변수, 같은 리턴타입으로 재정의하는 것

  • 기존 기능을 자식 클래스에 맞게 변경할 수 있음
  • @Override 어노테이션을 붙여 명확하게 표시하는 것이 좋음

오버라이딩의 조건

조건 설명
메서드 이름 같아야 함
매개변수 개수, 순서, 타입 동일해야 함
리턴 타입 동일해야 함
접근 제어자 부모보다 더 넓은 범위만 가능
예외 처리 부모보다 더 좁거나 동일한 수준만 가능

예제: 부모 메서드 오버라이딩하기

부모 클래스

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

자식 클래스

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

실행

Dog d = new Dog();
d.sound();  // 출력: 멍멍!

@Override 어노테이션

  • 오버라이딩이 맞는지 컴파일러가 체크해줌
  • 실수로 이름을 틀리거나 매개변수를 잘못 쓰면 오류 발생
@Override
void sound() {
    System.out.println("멍멍!");  // 정확하게 재정의한 경우만 OK
}

부모 타입으로 자식 객체 참조 → 다형성 활용

Animal a = new Dog();   // 업캐스팅
a.sound();              // 출력: 멍멍! (자식 메서드 호출됨)

 

오버라이딩 덕분에 동적 바인딩이 가능해지고,
하나의 타입으로 다양한 객체를 유연하게 사용할 수 있어요.


오버로딩(Overloading)과의 차이

구분 오버라이딩 오버로딩
위치 부모-자식 클래스 간 같은 클래스 내
목적 기능 재정의 기능 다양화
이름 같음 같음
매개변수 동일해야 함 다르게 해야 함
리턴타입 동일 달라도 가능

마무리 요약


개념 설명
오버라이딩 부모 클래스의 메서드를 자식 클래스가 재정의
조건 이름, 매개변수, 리턴타입 모두 같아야 함
활용 다형성, 동적 바인딩 구현
어노테이션 @Override 사용 권장

실습 아이디어

  • Animal → Cat, Dog, Cow 각각 sound() 오버라이딩
  • Vehicle → Car, Bike 각각 start() 오버라이딩
  • 다형성 배열 활용: Animal[] zoo = { new Dog(), new Cat() };
LIST