티스토리 뷰
반응형
📌 Dart 문법 개요 - 변수
Dart는 Flutter 개발을 위한 기본 언어이며, 정적 타입을 지원하는 동적 언어입니다. 즉, 변수의 타입을 지정할 수도 있고, 자동으로 추론할 수도 있습니다.
Dart에서 변수를 다룰 때 중요한 개념들을 설명하겠습니다.
🔹 1. 변수 선언 및 사용
Dart에서 변수를 선언하는 방법은 다음과 같습니다.
1️⃣ var 키워드 (타입 추론)
var name = "Flutter"; // 문자열로 자동 타입 추론
var age = 25; // 정수로 자동 타입 추론
- var는 변수의 타입을 자동으로 추론합니다.
- 한 번 타입이 정해지면 변경할 수 없습니다. (예: name = 10; 하면 오류 발생)
2️⃣ 명시적 타입 선언
String language = "Dart";
int year = 2024;
double version = 3.0;
bool isFlutterAwesome = true;
- String, int, double, bool 등의 타입을 직접 지정할 수도 있습니다.
3️⃣ dynamic 키워드 (유동적인 타입)
dynamic value = "Hello";
value = 42; // 가능
value = true; // 가능
- dynamic을 사용하면 어떤 타입이든 할당 가능하지만, 타입 안정성이 떨어질 수 있습니다.
4️⃣ final과 const (상수 선언)
final String appName = "MyFlutterApp";
const int maxUsers = 1000;
- final은 런타임 시 값이 결정되는 상수
- const는 컴파일 타임 상수로, 값이 변하지 않음을 보장
✅ 팁
- 변경될 가능성이 없는 값은 final 또는 const를 사용하면 안전합니다.
- const는 컴파일 타임에 결정되므로, 성능 최적화에 유리합니다.
🔹 2. 리스트 (List)
Dart에서 리스트는 배열과 같은 역할을 하며, List<T> 타입을 사용합니다.
1️⃣ 기본 리스트 선언
List<String> fruits = ["Apple", "Banana", "Cherry"];
var numbers = [1, 2, 3, 4, 5]; // 타입 자동 추론
- 리스트의 요소 타입을 명시할 수도 있고, var로 타입을 추론할 수도 있습니다.
2️⃣ 리스트 요소 접근 (인덱싱)
print(fruits[0]); // Apple
print(numbers[2]); // 3
- 리스트의 인덱스는 0부터 시작합니다.
3️⃣ 리스트 수정
fruits[1] = "Blueberry"; // Banana → Blueberry 변경
numbers.add(6); // 리스트에 값 추가
numbers.removeAt(0); // 첫 번째 요소 제거 (1 제거)
- add(value): 새로운 요소 추가
- removeAt(index): 특정 인덱스의 요소 제거
4️⃣ 리스트 길이 확인
print(fruits.length); // 3
- .length 속성을 사용하여 리스트의 크기를 확인할 수 있습니다.
5️⃣ 빈 리스트 선언
List<int> emptyList = [];
var anotherEmptyList = List<int>.empty(growable: true);
- 빈 리스트를 선언하고 나중에 값을 추가할 수 있습니다.
✅ 팁
- List<String>처럼 타입을 명확히 지정하면 타입 안정성이 높아집니다.
- final을 사용하면 리스트 자체를 변경할 수 없지만, 요소 수정은 가능합니다.
final List<int> numbers = [1, 2, 3]; numbers[0] = 10; // 가능 numbers = [4, 5, 6]; // 오류 발생 (리스트 객체 자체 변경 불가)
🔹 3. 맵 (Map)
Dart에서 Map은 키-값 쌍을 저장하는 컬렉션입니다. (JavaScript의 Object와 비슷함)
1️⃣ 기본 선언
Map<String, int> scores = {
"Math": 90,
"Science": 85,
"English": 88
};
var student = {
"name": "John",
"age": 20,
"isStudent": true
};
- 키 타입과 값 타입을 명시할 수도 있고, var를 사용하여 자동 추론할 수도 있습니다.
2️⃣ 값 접근
print(scores["Math"]); // 90
print(student["name"]); // John
- map[key] 형식으로 값을 가져옵니다.
3️⃣ 값 추가 및 수정
scores["History"] = 75; // 새 과목 추가
scores["Math"] = 95; // 기존 값 수정
4️⃣ 키 및 값 가져오기
print(scores.keys); // (Math, Science, English, History)
print(scores.values); // (90, 85, 88, 75)
✅ 팁
- Map을 사용할 때 키 값의 타입을 지정하면 실수할 가능성이 줄어듭니다.
- containsKey(key)를 사용하여 특정 키가 존재하는지 확인할 수 있습니다.
if (scores.containsKey("Math")) { print("Math 점수 존재함"); }
🔹 4. 집합 (Set)
Dart에서 Set은 중복을 허용하지 않는 컬렉션입니다.
1️⃣ 기본 선언
Set<int> uniqueNumbers = {1, 2, 3, 4, 5};
var letters = <String>{"A", "B", "C"};
- {}를 사용하여 선언하며, 리스트와 달리 중복된 값을 저장하지 않습니다.
2️⃣ 요소 추가 및 제거
uniqueNumbers.add(6);
uniqueNumbers.remove(3);
3️⃣ 포함 여부 확인
print(uniqueNumbers.contains(2)); // true
✅ 팁
- Set은 중복된 데이터를 저장할 필요가 없을 때 유용합니다.
- 리스트보다 검색 속도가 빠릅니다.
🛠 정리
개념 설명
var | 타입 자동 추론 |
dynamic | 어떤 타입이든 허용 |
final | 한 번 할당하면 변경 불가 (런타임 상수) |
const | 컴파일 타임 상수 |
List | 순서가 있는 컬렉션 (배열) |
Map | 키-값 쌍을 저장하는 컬렉션 |
Set | 중복을 허용하지 않는 컬렉션 |
🔥 Dart 변수 활용 꿀팁
- 가급적 var 대신 명시적 타입을 사용 → 코드 가독성이 좋아지고 실수를 줄일 수 있음.
- final과 const를 적극 활용 → 불필요한 변경을 방지하여 안정성 증가.
- 리스트 대신 Set을 사용하여 중복 데이터 방지 → 성능 최적화 가능.
- Map을 활용하여 키-값 데이터를 효율적으로 관리 → JSON 데이터 다룰 때 유용.
반응형
'[문법] 다트(Dart)' 카테고리의 다른 글
[고급] 5강. Dart의 비동기 처리 (async, await, Future) 완벽 정리 (0) | 2025.02.12 |
---|---|
[중급] 4강. Dart의 클래스 및 객체 지향 프로그래밍 (OOP) 개념과 문법 완벽 정리 (0) | 2025.02.12 |
[기초] 3강. Dart 함수 문법 총정리 - 매개변수, 반환값, 고차 함수까지! (0) | 2025.02.12 |
[기초] 2강. Dart 조건문 & 반복문 완벽 가이드 - if, switch, for, while 총정리 (0) | 2025.02.12 |