관리 메뉴

Bull

[Dart] Mixin은 언제 사용하나요? 본문

Computer Language/Dart

[Dart] Mixin은 언제 사용하나요?

Bull_ 2024. 7. 23. 05:25

믹스인(Mixin)이란?

다트(Dart)에서 믹스인(Mixin)은 다른 클래스의 기능을 상속받지 않고도 클래스에 추가할 수 있는 방법을 제공합니다. with 키워드를 통해 정의된 믹스인을 추가할 수 있습니다. 믹스인을 사용하면 코드를 재사용할 수 있고, 여러 클래스에 걸쳐 공통된 기능을 쉽게 구현할 수 있습니다.

믹스인 사용 예제

믹스인 정의

mixin Logger {
  void log(String message) {
    print('Log: $message');
  }
}

믹스인 적용

class Person {
  String name;

  Person(this.name);
}

class Employee extends Person with Logger {
  String position;

  Employee(String name, this.position) : super(name);

  void work() {
    log('$name is working as a $position');
  }
}

void main() {
  var emp = Employee('John', 'Developer');
  emp.work();  // Log: John is working as a Developer
}

이 예제에서 Logger 믹스인은 log 메서드를 정의하고, Employee 클래스는 이 믹스인을 적용받아 log 메서드를 사용할 수 있게 됩니다. Employee 객체는 log 메서드를 호출하여 메시지를 출력할 수 있습니다.

믹스인의 장점

  1. 코드 재사용성: 공통 기능을 여러 클래스에서 재사용할 수 있습니다.
  2. 다중 상속의 대안: 다트는 다중 상속을 지원하지 않지만, 믹스인을 사용하여 여러 클래스로부터 기능을 가져올 수 있습니다.
  3. 명확한 코드 구조: 클래스의 주요 기능과 부가적인 기능을 분리하여 코드의 가독성을 높일 수 있습니다.

Extension Method랑 비슷한데 둘 다 같은 거 아니야?

익스텐션 메소드는 기존 클래스에 새로운 메소드를 추가할 수 있게 해주는 기능입니다. 이는 클래스의 원본 소스 코드를 수정하지 않고도 클래스에 기능을 확장할 수 있는 방법을 제공합니다.

익스텐션 메소드 예제

extension StringExtensions on String {
  bool isPalindrome() {
    return this == split('').reversed.join('');
  }
}

void main() {
  var word = 'level';
  print(word.isPalindrome());  // true
}

주요 차이점

  • Minin: 클래스의 정의에 포함되어야 하며, 특정 클래스의 기능을 다른 클래스에 추가하는 데 사용됩니다. 주로 상태를 가지며, 클래스의 인스턴스에 동작을 추가하는 데 적합합니다.
  • Extension Method: 기존 클래스에 새로운 메소드를 추가하는 데 사용되며, 클래스 정의를 수정하지 않고도 클래스의 인스턴스에 새로운 기능을 추가할 수 있습니다. 상태를 가지지 않으며, 주로 유틸리티 메소드를 추가하는 데 적합합니다.

공식 문서