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 메서드를 호출하여 메시지를 출력할 수 있습니다.
믹스인의 장점
- 코드 재사용성: 공통 기능을 여러 클래스에서 재사용할 수 있습니다.
- 다중 상속의 대안: 다트는 다중 상속을 지원하지 않지만, 믹스인을 사용하여 여러 클래스로부터 기능을 가져올 수 있습니다.
- 명확한 코드 구조: 클래스의 주요 기능과 부가적인 기능을 분리하여 코드의 가독성을 높일 수 있습니다.
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: 기존 클래스에 새로운 메소드를 추가하는 데 사용되며, 클래스 정의를 수정하지 않고도 클래스의 인스턴스에 새로운 기능을 추가할 수 있습니다. 상태를 가지지 않으며, 주로 유틸리티 메소드를 추가하는 데 적합합니다.