본문 바로가기
Dart

Dart의 class modifier 간단한 정리

by 붕어사랑 티스토리 2024. 8. 13.
반응형

매번 까먹어서 유튜브에서 아주 괜찮은 영상을 찾았다.

 

 

 

https://www.youtube.com/watch?v=n5WuBICxv_8

 

 

 

아래는 요약된 코드

 

 

 

abstract : 클래스 구현을 다 안해도 된다

base : implement를 막는다

interface : extends를 막는다

final : extends와 implements를 막는다

 

 

 

abstract interface : 다른 언어의 pure interface 만들때 사용

 

라이브러리 외부일경우

// NormalClass can be instantiated, extended, and implemented
final normalClass = NormalClass();
class Normall extends NormalClass {} 
class Normal2 implements NormalClass {}

// AbstractClass can be extended and implemented. It can not be instantiated.
final abstractClass = AbstractClass (); -> 에러
class Abstractl extends AbstractClass {}
class Abstract2 implements AbstractClass {}

// BaseClass can-be constructed and extended. It can not be implemented.
final baseClass = BaseClass();
base class Basel extends BaseClass {}
base class Base2 implements BaseClass {} -> 에러

// InterfaceClass can be instantiated and implemented. It can not be extended.
final interfaceClass = InterfaceClass();
class Interfacel extends InterfaceClass{} -> 에러
class Interface2 implements InterfaceClass {}

// FinalClass can only be instantiated.
final finalClass = FinalClass();
final class Finall extends Finalclass{} -> 에러
final class Final2 implements Finalclass{} -> 에러

// MixinClass is similar to NormalClass except it can also be mixed using with • keyword.
final mixinClass = MixinClass();
class Mixin extends MixinClass {}
class Mixin2 implements MixinClass {}
class Mixin3 with MixinClass {}

// SealedClass can not be instantiated, extended, implemented, and mixed outside of its libr
final sealedClass = SealedClass(); -> 에러
class SealedClass1 extends SealedClass {} -> 에러 
class SealedClass2 implements SealedClass {} -> 에러
class SealedClass3 with SealedClass {} -> 에러

 

 

라이브러리 내부일경우

/// InterfaceClass can be instantiated, extended, and implemented.
final interfaceClass = InterfaceClass();
class Interfacel extends InterfaceClass {} 
class Interface2 implements InterfaceClass {}

/// FinalClass can be instantiated, extended, and implemented.
final finalClass = FinalClass();
base class Final1 extends FinalClass 
base class Final2 implements FinalClass{}

/// MixinClass is similar to NormalClass except it can also be mixed using 'with' keyword
final mixinClass = MixinClass();
class Mixinl extends MixinClass{}
class Mixin2 implements MixinClass {}
class Mixin3 with MixinClass {}

/// SealedClass can be extended and implemented. It can not be instantiated.
final sealedClass = SealedClass(); -> 에러
class SealedClass1 extends SealedClass {} 
class SealedClass2 implements SealedClass {}

 

 

 

외부와 내부일때 몹시 다르다 내부일경우 몹시 자유롭다.

 

 

 

 

 

mixin의 on 키워드

 

항상 헤깔리는데, on 키워드는 mixin의 상속이라고 생각하자.

 

mixin A on B 라고 하면 mixin A는 B와 관련된곳에만 쓸수 있다.

 

on이 붙으면 super를 이용해 b에 접근할 수 있다.

 

즉 B를 상속하거나 구현하는 클래스에만 with 으로 사용이 가능하다.

반응형

'Dart' 카테고리의 다른 글

[Dart] Isolate 배우기  (0) 2021.10.18

댓글