EDOC/Flutter 스터디 (2025-1)

[1.4 ~ 2.5] 다트 3.0 신규 문법 / 플러터 입문하기

SpruceMoon 2025. 4. 5. 19:38

4장 :: Dart 3.0 신규 문법

Dart 3.0의 버전이 발표되면서 문법이 새로 추가됨. Flutter 3.0 이상은 Dart 3.0을 기준으로 활용하므로 반드시 학습 필요.

1. 레코드 (Record)

1.1 포지셔널 파라미터

void main() {
  (String, int) minji = ('민지', 20);
  print(minji); // ('민지', 20)
  print(minji.$1); // 민지
  print(minji.$2); // 20
}

1.2 네임드 파라미터

void main() {
  ({String name, int age}) minji = (name: '민지', age: 20);
  print(minji); // (name: 민지, age: 20)
  print(minji.name); // 민지
  print(minji.age); // 20
}

2. 구조 분해 (Destructuring)

2.1 리스트 구조 분해

void main() {
  final [minji, haerin] = ['민지', '해린'];
  print(minji); // 민지
  print(haerin); // 해린
}

2.2 스프레드 연산자

void main() {
  final numbers = [1, 2, 3, 4, 5, 6, 7, 8];
  final [x, y, ..., z] = numbers;
  print(x); // 1
  print(y); // 2
  print(z); // 8
}

2.3 맵 구조 분해

void main() {
  final minjiMap = {'name': '민지', 'age': 19};
  final {'name': name, 'age': age} = minjiMap;
  print('name: $name');
  print('age: $age');
}

2.4 클래스 구조 분해

class Idol {
  final String name;
  final int age;

  Idol({required this.name, required this.age});
}

void main() {
  final minji = Idol(name: '민지', age: 19);
  final Idol(name: name, age: age) = minji;
  print(name); // 민지
  print(age); // 19
}

3. switch 문법 개정

3.1 표현식으로 사용

void main() {
  String dayKor = '월요일';
  String dayEnglish = switch (dayKor) {
    '월요일' => 'Monday',
    '화요일' => 'Tuesday',
    '수요일' => 'Wednesday',
    '목요일' => 'Thursday',
    '금요일' => 'Friday',
    '토요일' => 'Saturday',
    '일요일' => 'Sunday',
    _ => 'Not Found',
  };
  print(dayEnglish); // Monday
}

3.2 패턴 매칭

void switcher(dynamic anything) {
  switch (anything) {
    case 'aaa':
      print('match: aaa');
      break;
    case [1, 2]:
      print('match: [1, 2]');
      break;
    case [_, _, _]:
      print('match: [_, _, _]');
      break;
    case [int a, int b]:
      print('match: [int $a, int $b]');
      break;
    case (String a, int b):
      print('match: (String: $a, int: $b)');
      break;
    default:
      print('no match');
  }
}

3.3 Exhaustiveness checking

void main() {
  bool? val;
  switch (val) {
    case true:
      print('true');
      break;
    case false:
      print('false');
      break;
    case null:
      print('null');
      break;
  }
}

3.4 when 절

void main() {
  (int a, int b) val = (1, -1);
  switch (val) {
    case (1, _) when val.$2 > 0:
      print('(1, 양수)');
      break;
    default:
      print('default');
  }
}

4. 클래스 제한자

// base class
base class Parent {}

// final class
final class FinalParent {}

// interface class
interface class InterfaceParent {}

// sealed class
sealed class SealedParent {}

// mixin class
mixin class MixinExample {}

2.1 :: 플러터 입문하기

Hello Flutter 만들기

  • 용량 부족으로 안 쓰는 폰을 에뮬로 대신 사용해볼까 고민 중... (2년 전엔 됐었음!)
import 'package:flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      home: Scaffold(
        body: Center(
          child: Text(
            'Hello Code Factory',
          ),
        ),
      ),
    ),
  );
}

Text와 Center 위젯을 사용하여 UI 출력

  • Text 위젯으로 텍스트를 출력하고, Center 위젯으로 가운데 정렬할 수 있다.

Android/iOS 실기기 또는 에뮬레이터 실행

  • Android: USB 또는 무선 연결, AVD 설정 필요
  • iOS: MacOS 필요, Xcode 설정 및 개발자 모드 필요