Dart/OOP

Dart 문법 OOP - 오버라이드

codeJunH 2024. 8. 20. 21:03

오버라이드란?

오버라이드(override)는 부모 클래스 또는 인터페이스에 정의된 메서드를 자식 클래스에서 재정의할 때 사용된다.

이를 통해 자식 클래스는 부모 클래스의 메서드를 자신의 필요에 맞게 변경하거나 확장할 수 있다.

 

 

Dart에서의 오버라이드 구현

Dart에서는 override 키워드를 사용하여 메서드 오버라이드를 명시적으로 표시할 수 있다.

그러나 Dart의 특징 중 하나는 override 키워드를 생략할 수 있다는 점이다.

이전에 사용했던 Idol 클래스를 상속받아 메서드 오버라이드를 구현해 보겠다:

여기서 주목해야 할 점:

  1. @override 어노테이션 사용:
    • 부모 클래스에 이미 존재하는 메서드를 자식 클래스에서 재정의할 경우, @override 어노테이션을 사용한다.
    • 이를 "메서드 재정의"라고도 한다.

 

 

오버라이드된 메서드와 원본 메서드의 사용

이제 GirlGroup 클래스의 인스턴스를 생성하고 메서드를 호출해 보겠다:

실행 결과:

저는 여자 아이돌 블랙핑크입니다.  // ① 오버라이드된 메서드 실행
4명의 멤버가 있습니다.           // ② 원본 메서드 실행

 

  • ① sayName() 메서드: 오버라이드되었으므로 GirlGroup 클래스에서 재정의된 버전이 실행된다.
  • ② sayMembersCount() 메서드: 오버라이드하지 않았으므로 Idol 클래스에 정의된 원본 버전이 실행된다.

 

 

오버라이드의 특징과 주의사항

  • 자동 오버라이드: Dart에서는 부모 클래스나 인터페이스에 이미 존재하는 메서드명을 사용하면, @override 어노테이션을 생략해도 메서드가 자동으로 오버라이드된다.
  • 명시적 오버라이드 권장: 하지만 @override 어노테이션을 명시적으로 사용하는 것이 좋다. 이는 다음과 같은 이점이 있다:
    • 코드의 가독성 향상
    • 의도적인 오버라이드임을 명확히 표시
    • 실수로 인한 오버라이드 방지
    • IDE의 지원을 받아 오류를 쉽게 발견
  • 시그니처 일치: 오버라이드하는 메서드의 시그니처(매개변수 타입, 반환 타입)는 부모 클래스의 메서드와 일치해야 한다.