코딩 이야기

[Dart/Flutter] 초보자를 위한 Extends / Mixin / Implements 정리

Flutter를 공부하다보면 Extends / Mixin / Implements 등이 자주 보입니다.

어떤거는 단일 상속 받고 어떤거는 다중 상속이 가능하고 막 복잡한데, 저도 초보자이기 때문에 저를 위한 정리를 여러분들과 공유할까 싶습니다!

  • Extends

상속을 사용하여, 한 클래스가 다른 클래스의 모든 속성과 메서드를 받아 자신의 것으로 만듬. 상속을 통해 코드 재사용성과 계층 구조를 만들 수 있다.
단일 상속만 지원함

=> 상속받는 클래스(Dog)가 상속해주는 클래스(Animal) 모든 속성과 메서드를 자신의 것처럼 사용할 수 있다는 것입니다.
다른 클래스의 모든 속성과 메서드를 상속만 받으면 사용할 수 있기 때문에, 같은 메서드를 다시 구현할 필요가 없이 사용이 가능하기에 코드의 재사용성이 높습니다.

class Animal {
 void eat() => print('동물은 먹을수가 있어요.');
}

class Dog extends Animal{
 void bark() => print('개는 짖을수가 있어요.');
}

// 여기서 Dog class는 Animal class를 상속 받는다.
// 이로인해 Dog class는 Animal class의 속성 및 메서드를 사용 가능함.
// Dog 인스턴스는 bark()와 eat() 둘 다 사용 가능함.
  • Mixin

클래스에 코드를 혼합할 수 있게 해주며, 다중 상속과 유사한 방식으로 여러 클래스의 기능을 하나의 클래스에 추가할 수 있게함.

class Animal {
 void eat() => print('동물은 먹을 수가 있어요.');
}

mixin Flyer {
 void fly() => print('이 동물은 날 수 있어요.');
}

mixin Swimmer {
 void swim() => print('이 동물은 수영할 수 있어요.');
}

class Dcuk extends Animal with Flyer, Swimmer {
};

//여기서 Duck class는 eat, fly, swim의 3가지 메서드를 모두 사용할 수 있음.
  • implements

클래스가 특정 인터페이스를 구현하도록 강제함. (클래스 구현의 청사진 제공과 비슷함.)

예를들어 FlyingFish는 이름값을 하도록 날거나 수영할 수 있도록 해야겠죠? 그러니 아래와 같이 선언하는 것입니다.

abstract class Flyer{
 void fly();
}

abstract class Swimmer{
 void swim();
}

class FlyingFish implements Flyer, Swimmer{
 @override
 void fly() => print('플라잉 피쉬는 날아요!');
 
 @override
 void swim() => print('플라잉 피쉬는 수영도 해요!');
} 

 

간단한 문제입니다.

아래의 human class는 어떤 함수를 쓸 수 있고, 어떤 함수를 구현해야 할까요?

class Animal {
 void eat() => print('This animal eats.');
}

mixin Swimmer {
 void swim() => print('This animal can swim.');
}

abstract class Flyer{
 void fly();
}

class human extends Animal with Swimmer implements Flyer{
 void drinking() => print('human can drink.');
 void fly() => print('human can't fly without airplane.');
}
  • human은 Animal을 상속받고(extends), Swimmer 기능을 혼합했으며(mixin), Flyer라는 abstract class를 implements 함.

    그래서 eat, swim, drinking, fly 함수를 사용할 수 있고, fly 함수는 필수적으로 구현해야합니다.

Extends와 Mixin의 차이:

  • extends는 상속을 나타내며, 단일 상속만 지원함. 또한 is-a 관계 (human은 animal 이다)
  • Mixin은 혼합을 위해 사용되며, 특정 기능이나 동작을 클래스에 추가하기 위해 사용됨. can-do 관계 또는 has-a 관계를 나타냄.(human은 swim할 수 있다.)
  • 즉, extends는 강력한 계층적 관계를 구축하고, mixin은 클래스에 유연하게 기능을 추가할 수 있다.
Info-Geon

Recent Posts

관절 건강에 좋다는 MSM의 모든 것

MSM은 건강 보조제로 널리 사용되며, 특히 관절 건강을 개선하고 통증을 완화하는 데 도움을 준다고 알려져…

1개월 ago

칼슘 보충제 섭취 전 꼭 알아야 할 6가지 필수 정보

칼슘은 우리 몸에서 가장 풍부하게 존재하는 미네랄로, 전체 체중의 약 1-2%를 차지하며 주로 뼈와 치아에…

1개월 ago

혈당과 체중 조절을 위해 주목받는 크롬 보충제의 모든 것

크롬은 필수 미량 원소 중 하나로, 인체 내에서 다양한 생화학적 반응에 관여하는 영양소입니다. 주로 혈당…

1개월 ago

레시틴은 꼭 알아야 할 6가지 사실

레시틴은 자연적으로 나타나는 물질로, 대개 달걀 노른자, 콩, 해바라기 씨와 같은 식품에서 발견됩니다. 이 물질은…

1개월 ago

L-글루타민, 운동 후 근육통과 면역력 저하를 겪고 있는 당신에게 추천하는 영양제

L-글루타민은 우리 몸에 존재하는 아미노산 중 하나로, 단백질 합성과 면역 기능에 중요한 역할을 합니다. 이천년대…

1개월 ago

아스타잔틴, 심혈관 건강과 피부에 모두 도움이 된다?

아스타잔틴은 자연에서 발견되는 카로티노이드 계열의 강력한 항산화제입니다. 일반적으로 홍합, 새우, 그리고 특히 연어와 같은 해양…

1개월 ago