Dart/OOP

Dart 문법 OOP - 인터페이스

codeJunH 2024. 8. 20. 21:08

인터페이스란?

인터페이스는 공통으로 필요한 기능을 정의만 해두는 역할을 한다.

상속이 공유되는 기능을 이어받는 개념이라면, 인터페이스는 "이런 기능이 필요하다"라고 선언만 하는 것이다.

 

 

Dart에서의 인터페이스 특징

  • 별도의 키워드 없음: Dart에는 인터페이스를 지정하는 별도의 키워드(예: Java의 interface)가 없다.
  • 클래스로 정의: Dart에서는 모든 클래스가 암묵적으로 인터페이스로 사용될 수 있다.
  • 다중 구현 가능: 상속은 단 하나의 클래스만 가능하지만, 인터페이스는 여러 개를 구현할 수 있다.
  • 모든 메서드 구현 필요: 인터페이스를 구현하는 클래스는 해당 인터페이스의 모든 메서드를 반드시 구현해야 한다.

 

 

Dart에서의 인터페이스 구현

예를 들어, Idol 클래스를 인터페이스로 사용하는 GirlGroup 클래스를 만들어 보겠다:

여기서 주목해야 할 점:

  1. implements 키워드 사용: GirlGroup 클래스는 Idol 클래스가 정의한 모든 기능을 다시 정의했다.
  2. 모든 메서드와 속성 재정의: name, membersCount, sayName(), sayMembersCount()를 모두 재정의했다.

 

 

인터페이스 vs 상속

"상속과 인터페이스가 뭐가 다르지?"라는 의문이 들 수 있다.

주요 차이점은 다음과 같다:

  1. 상속:
    • 부모 클래스의 모든 기능이 자동으로 상속된다.
    • 필요한 경우에만 메서드를 오버라이드한다.
    • 단일 상속만 가능하다.
  2. 인터페이스:
    • 모든 기능을 반드시 다시 정의해야 한다.
    • 여러 인터페이스를 동시에 구현할 수 있다.
    • 구현해야 할 기능을 명확히 정의하는 용도이다.

 

 

다중 인터페이스 구현

Dart에서는 여러 인터페이스를 동시에 구현할 수 있다.

예를 들어:

여러 인터페이스를 구현할 때는 쉼표(,)로 구분하여 나열한다.

 

 

인터페이스 사용의 이점

  • 일관성 보장: 인터페이스를 통해 특정 메서드의 존재를 강제할 수 있다.
  • 다중 구현: 여러 인터페이스를 구현하여 다중 상속과 유사한 효과를 얻을 수 있다.
  • 코드 계약: 인터페이스는 "이 클래스는 이런 기능을 반드시 가져야 한다"는 일종의 계약 역할을 한다.
  • 모듈화: 인터페이스를 통해 코드를 더 모듈화하고 유연하게 만들 수 있다.