inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 앱 개발 실전

extends & mixin

상속과 mixin 의 존재 이유.

해결된 질문

193

Seung Min Liang

작성한 질문수 19

1

mixin 이 사실상 상속(extend)을 대체할 수 있는것 처럼보이는데,

상속에 대한 존재 의의가 있는 것인지 생각이 듭니다.

상속은 어떨 때 mixin 대신 사용되어야 하는 것일까요?

flutter

답변 1

1

DevStory

안녕하세요.

Dart에서 mixin과 상속은 각각의 용도와 역할이 다릅니다. 따라서 둘 다 존재하는 이유가 있고, 특정 상황에서는 mixin이 아닌 상속을 사용하는 것이 더 적절할 수 있습니다.

상속은 "is-a" 관계를 나타내며, 한 클래스가 다른 클래스의 특성과 행동을 그대로 이어받아 확장할 때 사용됩니다. 상속은 코드의 재사용성과 계층 구조를 설계할 수 있습니다.

- 클래스 간의 강력한 관계를 정의하고 싶을 때.

- 자식 클래스가 부모 클래스의 모든 메서드와 속성을 가져야 하며, 이를 기반으로 추가적인 기능을 구현할 때.

- 다형성을 통해 부모 클래스를 참조하여 다양한 자식 클래스를 처리할 필요가 있을 때.

class Animal {

  void makeSound() {
    print('Animal makes a sound');
  }
}

class Dog extends Animal {

  @override
  void makeSound() {
    print('Dog barks');
  }
}

 

mixin은 "has-a" 관계를 나타내며, 클래스에 특정 기능을 추가할 때 사용됩니다. mixin은 여러 클래스에 공통적인 기능을 쉽게 공유할 수 있습니다.

- 특정 기능(메서드나 속성)을 여러 클래스에 공통적으로 추가해야 할 때.

- 다중 상속이 불가능한 Dart에서 상속 없이 여러 기능을 한 클래스에 포함시키고 싶을 때.

- 클래스 간의 강력한 계층 구조가 필요하지 않고, 단순히 기능을 공유하고 싶을 때.

mixin Swimmable {

  void swim() {
    print('Swimming');
  }
}

mixin Flyable {

  void fly() {
    print('Flying');
  }
}

class Duck with Swimmable, Flyable {}

void main() {
  Duck duck = Duck();
  duck.swim();
  duck.fly();
}

 

정리하면,

- 상속은 강력한 계층 구조와 "is-a" 관계를 나타낼 때 사용됩니다.

- mixin은 단순히 기능을 추가하고 공유하는 용도로, 여러 클래스에 공통적인 기능을 제공할 때 사용됩니다.

둘은 서로 대체할 수 있는 것이 아니라, 목적과 사용 상황에 따라 적절히 선택해야 하는 도구로 보시면 됩니다 :)

수강 기한 연장 요청드려도될까요..

1

48

2

37.provider 실습 문제점, 카트에서 상품이 지워지지 않습니다.

1

75

2

다트 프로젝트

1

51

2

context.read<LangService>().toggleLang 해도 언어가 변경되는 이유

1

74

3

수강 기간 연장 신청 요청드립니다.

1

68

3

수강기간 연장 부탁드립니다.

1

58

3

제공해주신 flutter_design_system 라이브러리 질문입니다.

1

53

2

수강 기간 연장 부탁드립니다

1

52

2

수강 기한 연장

1

78

3

강의 잘 보고있습니다!

1

59

2

애뮬레이터 실행 오류

1

69

2

pdf 강의노트

1

62

2

수강기간 연장 부탁드립니다.

1

86

2

수강 기간 연장 요청

1

86

2

수강기간 연장 부탁드립니다

1

129

2

코드 생성기 - build runner 관련 오류

1

110

1

디자인 시스템 구성에 대해 질문 드립니다

2

145

2

CartItem 추가시

1

95

2

const 커스텀클래스

1

95

1

강의 수강 기간 연장 요청드립니다.

1

127

2

코드 생성기 - 실습 build runner 안 되는 분.

1

270

2

Flutter 강의자료 열리지 않는 문제

1

165

2

riverpod 프로젝트에 궁금한점이 있어 질문 남깁니다.

1

123

2

수강 기강 연장 부탁드리겠습니다! :ㅇ

1

88

2