[Flutter / Dart] 다트 3.0 신규 문법 (클래스 제한자)

2025. 4. 11. 17:06

다양한 클래스 제한자가 새로 추가됨.

추가된 클래스 제한자는 `base`, `final`, `interface,` `sealed`, `mixin`임. 모든 클래스 제한자는 `class`키워드 앞에 명시함.

클래스 제한자를 명시한 클래스를 해당 클래스를 사용하는 파일이 아닌 다른 파일에 선언해야 정상적으로 기능이 작동함


1. `base`제한자

`base`제한자는 `base`클래스의 기능을 강제하는 제한자임. `base` 클래스를 상속할 때는 다른 파일에서 상속하려면 자식 클래스도 반드시 `base`, `sealed`, `final` 중 하나여야 함. 또한, `implements`는 불가능함.

// base 제한자
base class Parent{} // a파일
import "1_a.dart"; // b파일

Parent parent = Parent();

// 가능
base class Child extends Parent{}

// 에러 발생
// base / sealed / final 제한자 중 하나가 필요함
class Child2 extends Parent{}

// 에러 발생
// base 클래스는 implement가 불가능
class Child3 implements Parent{}

2. `final` 제한자

  • `final` 클래스를 상속하거나 구현하는 건 어디서든 불가능함 (같은 파일에서도 ❌)
  • 즉, 확장 금지 클래스로 완전히 봉인됨.
// final 제한자
final class Parent{} // a파일
import "2_a.dart"; // b파일

// 인스턴스화 가능
Parent parent = Parent();

// extends불가능
class Child extends Parent{};

// implement 불가능
class Child2 implements Parent{};

3. `interface` 제한자

  • `interface` 클래스는 `extends` 불가, `implements`는 가능
  • 즉, 순수 인터페이스 역할만 수행 가능
// interface 제한자
interface class Parent{} // a파일
import "3_a.dart"; // b파일

// 인스턴스화 가능
Parent parent = Parent();

// extend 불가능
class Child1 extends Parent{}

// implement 가능
class Child2 implements Parent{}

4. `sealed`제한자

  • `sealed` 클래스는 같은 파일 안에서만 상속/구현 가능
  • 다른 파일에서 확장하려고 하면 에러 발생
// sealed 제한자
sealed class Parent{} // a파일
import "4_a.dart"; // b파일

// 인스턴스화 불가능
Parent parent = Parent();

// extend 불가능
class Child1 extends Parent {}

// implement 불가능
class Child2 implements Parent {}

5. `mixin`제한자

  • `mixin class`는 `mixin`처럼 기능을 공유하면서도 상속(extends)도 가능한 하이브리드 구조
  • 기존 `mixin`은 `extends` 불가지만, `mixin class`는 가능
// mixin 제한자
mixin class MixinExample{}

// extend 가능
class Child1 extends MixinExample{}

// mixin으로 사용 가능
class Child2 with MixinExample{}

6. 총정리!

제한자 extend implements 외부 확장 가능 인스턴스 생성 설명 요약
base 자식도 제한자 필요 상속만 가능, 구현 불가
final 완전히 봉인
sealed ❌ (같은 파일만) 상속 제한 + switch에 유리
interface 순수 인터페이스
mixin ✅ (with만) 다중 기능 조합용
mixin class ✅( mixin + 클래스 성질

 

https://github.com/Leedoseo/Flutter_Dart_3.0/tree/main

 

GitHub - Leedoseo/Flutter_Dart_3.0

Contribute to Leedoseo/Flutter_Dart_3.0 development by creating an account on GitHub.

github.com

 

https://www.notion.so/Dart-Flutter-1cf9fd9f157980a5ab7efad394810871?pvs=4

 

Dart / Flutter | Notion

Made with Notion, the all-in-one connected workspace with publishing capabilities.

www.notion.so

 

출처 : 코드팩토리의 플러터 프로그래밍

BELATED ARTICLES

more