2025-09-16

  Dart 문법을 전체적으로 내용 정리했다.


Dart 프로젝트 구조

  • .dart_tool/ : 빌드 캐시와 설정 정보를 저장. 버전 관리에는 포함하지 않음.
  • bin/ : 앱의 진입점(main 함수)을 담는 폴더. dart파일들이 위치한다. dart run이 이 폴더의 main 파일을 사용.
  • lib/ : 주요 기능을 모듈화 하여 정의하는 곳. 클래스, 함수, 유틸리티 등을 정의.
  • test/ : 테스트 코드 작성용 폴더. 다트에서 제공하는 package:test를 활용해 단위 테스트 구성.
  • analysis_options.yaml : 코드 스타일, 린트 규칙들을 설정. 팀 내 일관된 코드스타일 유지에 유용.
  • CHANGELOG.md : 프로젝트 버전별 변경사항 정리 문서. 공개 패키지를 만들때 반드시 업데이트를 기록해야함.
  • pubspec.yaml : 프로젝트명, 의존성, SDK 버전, 메타데이터 등을 정의하는 핵심 설정 파일. flutter pub get 시 이 파일을 기준으로 의존성 설치.
  • pubspec.lock : 설치된 의존성의 정확한 버전을 고정 기록. 재설치 시 동일한 환경을 보장.


Dart 문법 및 특징

함수 파라메터

  • Named Parameter : {} 사용. required 키워드로 필수 지정 가능.
  • Optional Parameter : [] 사용. 기본값을 설정할수있음.

컬렉션

  • List : 순서가 있는 자료구조.
  • Set : 중복 없는 집합.
  • Map : 키-값 쌍 저장. forEach로 순회 가능.

Null Safety

  • 타입 뒤에 ?를 붙여 nullable로 선언 가능.
  • Null 처리 방법:
    • if문으로 null 여부 체크
    • ?. : null이 아니면 값 접근, null이면 null 반환
    • ?? : 디폴트 값 지정
    • ! : null 아님을 강제 보증

열거형 (enum)

  • 정해진 값 중 하나만 선택할 수 있는 자료형.
  • Dart 언어의 기본 지원변수들은 enum의 형태를 띄는 경우가 많다.
enum Name { a, b, c, d }

제네릭

  • <T> 형태로 타입을 일반화하여 재사용성과 안정성 확보.


Dart에서의 클래스와 객체 지향

클래스

  • 특정 객체를 생성하기위해 변수와 메서드를 정의하는 틀
  • 네임드 생성자 : 이름이 있는 생성자 정의 가능. 아래에서 Marine.hero()가 네임드 생성자에 해당한다.
class Marine {
  int hp = 40;
  int attack = 6;

  void move(String direction) {
    print("마린이 $direction 방향으로 이동합니다.");
  }

  void shoot() {
    print("탕탕! 마린이 공격합니다. 공격력: $attack");
  }

  Marine();
  Marine.hero() : hp = 100, attack = 6;
}

void main(List<String> arguments) {
  Marine hero = Marine.hero();
  Marine normal = Marine();
}

상속

  • 부모 클래스의 특징을 물려받음.
  • @override 사용해서 메서드를 재정의 해야한다.

추상 클래스 (abstract)

  • 추상(미완성) 메서드를 포함할 수 있음.
  • 직접 객체 생성 불가, 반드시 상속을 통해 완성해야 한다.


Dart의 비동기 프로그래밍

  • Future 타입 : 미래에 값을 제공.
  • async : 비동기 함수 선언.
  • await : Future 결과를 기다려 동기처럼 사용. (async이 붙은 함수 내에서만 사용 가능)
  • then : 콜백을 이용한 비동기 처리.

Future<String> orderCoffee() 라는 함수가있을때

String coffee = await orderCoffee() 하면 계속 값을기다린다.

Future<String> coffee = orderCoffee()
coffee.then(value){ }

위와 같이 사용하면 콜백을 통해 비동기로 처리할수있다.


다트에서의 작명 규칙

  • 파일명 : snake_case
  • 변수, 함수명 : camelCase
  • 클래스명, enum : PascalCase



오늘의 회고

  오늘은 Dart 언어 문법을 공부했다. Future 타입이나 Named 생성자 같은 처음보는 개념들이 좀 보였다.

  Dart 언어를 공부하면서 든 생각은 Java의 형태를 한 코틀린 같다는 느낌이 들었다. 기능적인 측면에서 코틀린과 유사한 것 같다. 문법이 조금씩 달라서 익숙해지도록 한번씩 상기하면서 공부했다.

태그:

카테고리:

업데이트: