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: 컴파일 타임 상수

constfinal과 유사하지만 컴파일 타임에 값이 고정되어야 합니다. 성능 최적화에 유용합니다.

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의 매력을 느껴보세요.

댓글