-
dart - mixin개발 2023. 1. 4. 19:57
믹스인은 객체를 생성할 때 코드의 일부를 다른 클래스 안에 섞어 재사용할 수 있는 기법이다. 코드 재사용이 가능한 측면에서 상속과 비슷하면서도 결합도 문제를 초래하지 않아 객체간에 유연한 결합을 만들때 좋다.
코드 가져오기
abstract class WalkerInterface { walk(); } class Walker { walk () { } } class Dog with Walker implements WalkerInterface { bark() { walk(); } }
Dog 클래스는 Walker 클래스를 믹스인해서 Walker 클래스의 walk() 함수를 가져왔다. 덕분에 WalkerInterface 내부 walk 함수를 구현하지 않아도 된다.
오버라이드
class Dog with Walker implements WalkerInterface { bark() { walk(); } @override walk() { print("walk dog"); } }
상속과 동일하게 기존 함수를 오버라이드 하는 것도 가능하다. Walker 클래스 함수중 일부만 변경하고 싶은 경우에는 특정 함수에만 오버라이드를 걸어주면 된다. Walker 클래스의 walk 함수를 오버라이드 해서 Dog 클래스의 성격에 맞게 바꿨다.
다수 클래스 믹스인 가능
class Walker { int a = 10; walk () { print("walking"); } } class Drinker { drink() { print("drinking"); } } class Dog with Walker, Drinker implements WalkerInterface { bark() { walk(); drink(); } }
상속은 클래스당 하나의 클래스만 받아오지 못하는데 반해, 믹스인은 여러 클래스를 동시에 적용할 수 있다. 인터페이스와 비슷한 점이다.
추상화에 이용
void main() { WalkerInterface a = Dog(); Walker b = Dog(); Drinker w = Dog();
상속과 인터페이스와 마찬가지로 믹스인도 추상화 용도로 사용할 수 있다. 아래 코드처럼 Dog 객체에 대해서 인터페이스, 부모클래스, 믹스인으로 모두 접근 가능하다. 물론 변수마다 실행할 수 있는 함수는 다르다.
'개발' 카테고리의 다른 글
Nodejs Blocking/Non-Blocking, (0) 2023.01.26 socketio redis adapter (0) 2023.01.06 flutter - provider 패턴 (0) 2023.01.04 typeorm - OneToOne, OneToMany, ManyToMany (1) 2022.11.29 typeorm - definition, entity (0) 2022.11.29