Java

[Java] Overriding

wwxs 2024. 9. 9. 12:47

Overriding (오버라이딩)

  • 자식 클래스가 부모 클래스에서 정의된 메서드를 자신의 상황에 맞게 재정의
  • 상속 관계에 있는 클래스들 사이에서 사용

 

1. 오버라이딩 특징

  • 메서드의 시그니처(선언부)가 일치
  • 부모 클래스에서 정의된 메서드와 동일한 이름, 매개변수 구성을 가져야 함
  • 반환 타입은 같거나 자동 형 변환이 가능한 것이어야 함
  • @Override(어노테이션, 주석)
  • 오버라이딩 된 메서드임을 명시적으로 표시

2. 오버라이딩 구현 방법

  • 부모 클래스의 상속받은 메서드를 자식 클래스에서 다시 정의
  • 메서드의 이름, 매개변수를 일치, 반환타입은 같거나 자동 형 변환 가능하게 작성
  • 메서드 위에 @Override 어노테이션을 작성

3. 오버라이딩을 사용하는 이유

  • 다형성 규현
  • 하나의 이름으로 여러 기능을 수행하는 코드 작성
  • 재사용성과 확장성 향상
  • 기존 코드 변경 없이, 새로운 기능을 추가하거나 변경 가능

 

(예제 코드)

더보기
class AnimalClass{
	void sound() {
		System.out.println("동물이 소리를 냅니다.");
	}
}
class DogClass extends AnimalClass{
	// 어노테이션
	// : 코드에 메타데이터를 제공하는 방법
	
	// @Override
	// : 현재 메서드가 부모 클래스의 메서드를 오버라이딩 한다는 것을 명시
	@Override
	void sound() {
		System.out.println("개가 멍멍하고 짖습니다");
	}
}

class CatClass extends AnimalClass {
	@Override
	void sound() {
		System.out.println("고양이가 야옹하고 웁니다");
	}
}


public class Overriding {
	public static void main(String[] args) {
		DogClass dog1 = new DogClass();
		dog1.sound();
		
		CatClass cat1 = new CatClass();
		cat1.sound();
    }
}

 

오버로딩 VS 오버라이딩

 

1. 공통점

  • 모두 메서드의 이름을 재사용 하는 방법 (다형성)

2. 오버로딩

  • 같은 클래스 내에서 같은 이름을 가진 메서드를 여러 개 정의
  • 메서드명이 동일, 매개변수의 타입, 개수, 순서 중 적어도 하나 이상은 달라야 함
  • 메서드의 동작을 다양한 상황에 맞게 조정

3. 오버라이딩

  • 상속 관계에 있는 클래스에서 사용
  • 메서드의 시그니처(이름, 매개변수, 반환타입)가 같아야 함
  • 메서드의 동작을 변경하거나 확장
  • @Override 어노테이션을 사용 → 컴파일러에게 전달