Kim Seogyu
Research

Dart Programming Language

Dart 핵심 문법과 실무에서 자주 쓰는 패턴을 빠르게 정리합니다.

Published 2025년 12월 27일2 min read339 words

Dart Programming Language

핵심 특징

  • AOT/JIT 동시 지원: 개발 중에는 hot reload, 배포 시에는 빠른 실행 성능.
  • Null safety 기본 적용: nullable/nonnull 타입이 컴파일 단계에서 구분됨.
  • Flutter와의 높은 결합: UI 상태 모델링에 필요한 문법(immutable, extension, async)이 풍부함.

1) 변수와 Null Safety

void main() {
  String name = "sayu";     // non-null
  String? nickname = null;   // nullable

  if (nickname != null) {
    print(nickname.toUpperCase());
  }

  print(nickname?.toUpperCase() ?? "NO_NICKNAME");
}
  • String에는 null을 넣을 수 없음.
  • String?는 null 가능, 사용 시 ?., ??, null check 필요.

2) 함수 시그니처

Named Parameter + Required

String formatUser({
  required String id,
  required int age,
  String country = "KR",
}) {
  return "$id:$age:$country";
}

Optional Positional Parameter

String greet(String name, [String suffix = "!"]) {
  return "Hello $name$suffix";
}

Arrow Function

int add(int a, int b) => a + b;

3) 컬렉션

void main() {
  final numbers = <int>[1, 2, 3];
  final profile = <String, Object>{
    "name": "sayu",
    "active": true,
  };
  final tags = <String>{"dart", "flutter"};

  final withCondition = [
    "base",
    if (numbers.isNotEmpty) "hasNumbers",
    for (final n in numbers) "n=$n",
  ];

  print(profile);
  print(tags);
  print(withCondition);
}

4) 클래스와 불변 모델

class User {
  final String id;
  final int age;

  const User({required this.id, required this.age});

  User copyWith({String? id, int? age}) {
    return User(
      id: id ?? this.id,
      age: age ?? this.age,
    );
  }
}

실무에서는 final 필드 + copyWith 조합이 상태 업데이트에 가장 안정적입니다.

5) 비동기

Future<String> fetchUser() async {
  await Future.delayed(const Duration(milliseconds: 100));
  return "user-1";
}

Future<void> main() async {
  final user = await fetchUser();
  print(user);
}
  • Future<T>: 단일 비동기 결과.
  • Stream<T>: 연속 이벤트 처리.

자주 나는 실수

  • nullable 타입을 null check 없이 접근.
  • dynamic 남용으로 컴파일 안전성 상실.
  • const/final 구분 없이 모두 가변으로 두는 설계.

요약

Dart는 null safety와 명확한 타입 시스템 덕분에 대규모 코드베이스에서 유지보수성이 좋습니다. 실무 기준으로는 required named parameter, immutable 모델, async/await 규칙화부터 먼저 잡는 것이 효과적입니다.

Share

Related Articles

Comments

이 블로그는 제가 알고 있는 것들을 잊지 않기 위해 기록하는 공간입니다.
직접 작성한 글도 있고, AI의 도움을 받아 정리한 글도 있습니다.
정확하지 않은 내용이 있을 수 있으니 참고용으로 봐주세요.

© 2026 Seogyu Kim