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의 형태를 한 코틀린 같다는 느낌이 들었다. 기능적인 측면에서 코틀린과 유사한 것 같다. 문법이 조금씩 달라서 익숙해지도록 한번씩 상기하면서 공부했다.