Article
Dart 언어 기초 완벽 마스터 - Flutter 개발 필수 문법
도입: 왜 Dart인가?
Flutter 프로젝트를 시작하려면 Dart 언어의 기초를 탄탄히 다져야 합니다. Dart는 처음에는 낯설 수 있지만, Java와 JavaScript의 문법을 혼합한 언어로 다른 언어의 경험이 있다면 빠르게 습득할 수 있습니다. 이 가이드는 Dart의 필수 개념을 단계별로 설명합니다.
변수 선언: var, dynamic, final, const
Dart에서 변수는 타입 지정 방식에 따라 다르게 동작합니다.
var: 타입 자동 추론
var 키워드를 사용하면 Dart가 선언 시점에 타입을 자동으로 결정하고, 이후 타입 변경이 불가능합니다.
var name = "홍길동"; // String으로 추론
var age = 30; // int로 추론
// name = 123; // Error! String 변수에 int 할당 불가
dynamic: 런타임 타입 변경
dynamic 키워드를 사용하면 런타임에 타입이 변경될 수 있습니다. 유연하지만 타입 안정성이 낮으므로 신중하게 사용하세요.
dynamic value = "string";
print(value); // string
value = 123;
print(value); // 123
value = true;
print(value); // true
final: 변경 불가능한 변수
final로 선언한 변수는 한 번 할당된 후 변경할 수 없습니다. 런타임에 값이 결정되어야 할 때 유용합니다.
final String name = "홍길동";
final age = 30; // 타입 추론 가능
// name = "둘리"; // Error!
const: 컴파일 타임 상수
const는 final과 유사하지만 컴파일 타임에 값이 고정되어야 합니다. 성능 최적화에 유용합니다.
const int MAX_AGE = 150;
const double PI = 3.14159;
// const로 선언하면 런타임 계산 불가
// const age = DateTime.now().year; // Error!
기본 데이터 타입
숫자 타입: int와 double
int count = 100;
double height = 175.5;
// 타입 변환
int age = int.parse("25"); // 문자열 → int
double weight = double.parse("65.5"); // 문자열 → double
String ageStr = age.toString(); // int → 문자열
String heightStr = height.toStringAsFixed(2); // double → 문자열 (소수 2자리)
문자열: String
// 기본 선언
String greeting = "Hello Dart!";
String koreanText = '안녕하세요';
// 문자열 연결
String fullName = '홍' + '길' + '동';
// 문자열 보간
String name = "Flutter";
String message = "Hello, $name!"; // Hello, Flutter!
// 여러 줄 문자열
String multiLine = '''
첫 번째 줄
두 번째 줄
세 번째 줄
''';
불린: bool
bool isActive = true;
bool isCompleted = false;
if (isActive) {
print("활성화됨");
}
컬렉션 타입
List: 순서가 있는 컬렉션
// 타입 지정
List<int> numbers = [1, 2, 3, 4, 5];
List<String> fruits = ["apple", "banana", "cherry"];
// 타입 추론
var colors = ["red", "green", "blue"];
// 요소 접근 및 수정
print(numbers[0]); // 1
numbers[0] = 10;
// 메서드
numbers.add(6);
numbers.remove(1);
print(numbers.length); // 길이
Map: 키-값 쌍의 컬렉션
// 타입 지정
Map<String, int> scores = {"Alice": 90, "Bob": 85};
// 타입 추론
var person = {"name": "홍길동", "age": 30};
// 요소 접근 및 수정
print(scores["Alice"]); // 90
scores["Charlie"] = 88;
// 메서드
scores.remove("Bob");
print(scores.keys); // 모든 키
print(scores.values); // 모든 값
null 안전성 (Null Safety)
Dart는 null 안전성을 지원하여 null 참조 오류를 컴파일 타임에 방지합니다.
String name = "홍길동"; // null 불가능
String? nickname; // null 가능 (? 기호)
// null 체크
if (nickname != null) {
print(nickname.length);
}
// null 병합 연산자
String displayName = nickname ?? "Guest";
마치며
Dart의 기초를 이해하면 Flutter 개발이 훨씬 수월해집니다. 변수 선언 방식의 차이 (var vs dynamic vs final vs const)와 기본 데이터 타입을 정확히 이해하고, 컬렉션을 능숙하게 다룰 수 있다면 Dart 프로그래밍의 길이 열립니다. 꾸준한 연습을 통해 Dart의 매력을 느껴보세요.
댓글