1. Dart는 어떤 언어인가?
Flutter로 앱을 개발하려면 반드시 알아야 하는 언어가 Dart입니다.
Flutter 화면을 구성하는 위젯도 Dart로 작성하고, 버튼 클릭, 데이터 처리, API 호출, 상태 관리도 모두 Dart 코드로 처리합니다.
Dart는 문법이 비교적 단순하면서도 실무 앱 개발에 필요한 기능을 잘 갖춘 언어입니다.
Dart의 특징은 다음과 같습니다.
- Java, C#, JavaScript와 문법이 비슷하다.
- 타입을 명확하게 지정할 수 있다.
- Null Safety를 지원한다.
- 객체지향 프로그래밍에 적합하다.
- 비동기 처리가 강력하다.
- Flutter와 결합했을 때 모바일, 웹, 데스크톱 앱 개발이 가능하다.
즉, Dart는 Flutter를 위한 언어이기도 하지만, 그 자체로도 현대적인 앱 개발 언어라고 볼 수 있습니다.
2. 변수 선언
Dart에서 변수는 var, 명시적 타입, final, const로 선언할 수 있습니다.
void main() {
var name = 'Flutter';
int age = 10;
double price = 12.5;
bool isActive = true;
print(name);
print(age);
print(price);
print(isActive);
}
var는 값을 보고 타입을 자동으로 추론합니다.
var name = 'Dart';
위 코드는 Dart가 자동으로 String 타입으로 판단합니다.
한 번 문자열로 판단되면 이후 숫자를 넣을 수 없습니다.
var name = 'Dart';
// name = 100; // 오류
Dart는 동적 언어처럼 보이지만, 실제로는 타입 안정성을 중요하게 생각하는 언어입니다.
3. final과 const
final과 const는 값을 변경하지 못하게 할 때 사용합니다.
final userName = 'Kim';
const appName = 'MyApp';
두 키워드는 비슷해 보이지만 차이가 있습니다.
final은 실행 시점에 값이 정해져도 됩니다.
final now = DateTime.now();
const는 컴파일 시점에 값이 확정되어야 합니다.
const version = '1.0.0';
앱 개발에서는 변하지 않는 설정값, 타이틀, 기본 색상, 고정 문구 등에 const를 많이 사용합니다.
4. 기본 자료형
Dart의 대표적인 기본 자료형은 다음과 같습니다.
String title = 'Dart Study';
int count = 10;
double rate = 3.14;
bool isLogin = false;
문자열은 String, 정수는 int, 실수는 double, 참/거짓은 bool을 사용합니다.
문자열 안에 변수를 넣을 때는 $를 사용합니다.
String name = '홍길동';
int age = 30;
print('이름은 $name 입니다.');
print('나이는 $age 세입니다.');
계산식은 ${}를 사용합니다.
print('내년 나이는 ${age + 1} 세입니다.');
5. List
여러 개의 값을 순서대로 저장할 때는 List를 사용합니다.
List<String> fruits = ['Apple', 'Banana', 'Orange'];
print(fruits[0]);
print(fruits.length);
값을 추가할 때는 add()를 사용합니다.
fruits.add('Mango');
반복문으로 출력할 수도 있습니다.
for (var fruit in fruits) {
print(fruit);
}
Flutter에서는 상품 목록, 게시글 목록, 메뉴 목록, API 결과 목록 등을 처리할 때 List를 매우 자주 사용합니다.
6. Map
키와 값으로 데이터를 저장할 때는 Map을 사용합니다.
Map<String, dynamic> user = {
'name': 'Kim',
'age': 30,
'isAdmin': true,
};
print(user['name']);
print(user['age']);
Map은 JSON 데이터와 구조가 비슷합니다.
서버 API에서 받은 데이터를 처리할 때 많이 사용합니다.
예를 들어 서버에서 다음과 같은 데이터가 온다고 가정합니다.
{
"userId": "kim",
"userName": "김철수",
"level": 3
}
Dart에서는 다음과 같이 다룰 수 있습니다.
Map<String, dynamic> data = {
'userId': 'kim',
'userName': '김철수',
'level': 3,
};
print(data['userName']);
7. 조건문
조건문은 if, else if, else를 사용합니다.
int score = 85;
if (score >= 90) {
print('A');
} else if (score >= 80) {
print('B');
} else {
print('C');
}
간단한 조건은 삼항 연산자로 처리할 수 있습니다.
bool isLogin = true;
String message = isLogin ? '로그인 상태' : '로그아웃 상태';
print(message);
Flutter에서는 버튼 표시 여부, 로그인 여부, 데이터 유무 등을 판단할 때 조건문을 자주 사용합니다.
8. 반복문
기본 반복문은 for입니다.
for (int i = 0; i < 5; i++) {
print(i);
}
List를 반복할 때는 for-in을 많이 사용합니다.
List<String> menus = ['홈', '조회', '설정'];
for (var menu in menus) {
print(menu);
}
forEach()도 사용할 수 있습니다.
menus.forEach((menu) {
print(menu);
});
9. 함수
Dart에서 함수는 다음과 같이 작성합니다.
int add(int a, int b) {
return a + b;
}
void main() {
print(add(10, 20));
}
반환값이 없으면 void를 사용합니다.
void showMessage(String message) {
print(message);
}
함수가 한 줄이면 화살표 문법을 사용할 수 있습니다.
int add(int a, int b) => a + b;
Flutter에서는 이벤트 처리, 데이터 변환, 화면 이동, 검증 로직 등을 함수로 분리하는 것이 좋습니다.
10. Null Safety 기초
Dart에서는 기본적으로 변수에 null을 넣을 수 없습니다.
String name = 'Kim';
// name = null; // 오류
null을 허용하려면 타입 뒤에 ?를 붙입니다.
String? name;
name = null;
값이 null일 수 있는 경우에는 안전하게 접근해야 합니다.
String? name;
print(name?.length);
??는 값이 null일 때 기본값을 지정합니다.
String? name;
print(name ?? '이름 없음');
Null Safety는 Flutter 앱에서 매우 중요합니다.
API 결과가 없거나, 사용자가 값을 입력하지 않았거나, 화면이 아직 준비되지 않은 경우에도 앱이 쉽게 종료되지 않도록 도와줍니다.
11. 기초 단계에서 꼭 기억할 것
Dart 기초에서 가장 중요한 것은 다음입니다.
- 변수는 타입을 가진다.
- var는 자동 타입 추론이다.
- 변하지 않는 값은 final 또는 const를 사용한다.
- 여러 값은 List로 관리한다.
- 키와 값 구조는 Map으로 관리한다.
- 조건문과 반복문은 Flutter 화면 제어에 자주 사용된다.
- 함수는 코드를 깔끔하게 분리하는 기본 단위다.
- Null Safety는 Dart의 핵심이다.
마무리
Dart 기초 문법은 어렵지 않습니다.
하지만 Flutter 앱을 안정적으로 만들려면 단순히 화면만 그리는 것이 아니라, Dart의 기본 문법을 정확하게 이해해야 합니다.
다음 회차에서는 Dart의 중급 문법인 클래스, 생성자, 상속, mixin, enum, extension, 비동기 처리의 기본을 정리해 보겠습니다.
'IT > Flutter' 카테고리의 다른 글
| 3회. Flutter 실무 품질을 높이는 Dart 고급 문법 (1) | 2026.06.27 |
|---|---|
| 2회. Flutter 실무에 필요한 Dart 중급 문법 (0) | 2026.06.27 |
| Flutter 앱 개발 기본 절차 (0) | 2026.06.26 |