이번 강좌에서는
- 온라인 컴파일러
- 다트 기본 변수
에 대해 다룹니다.
![[Flutter] 플러터 Dart(다트) 기본 변수(2024.09.최신) – 기초강의 1강 2 Dart](http://ddoko.co.kr/wp-content/uploads/2024/09/image-17-optimized.png)
안녕하세요 여러분! 오늘은 플러터 기초 문법인 다트 기본 변수에 대해 다뤄보겠습니다.
지난 강의를 보고 이제 Flutter를 에뮬레이터/핸드폰으로 실행하며 구동해 볼 수 있지만,
실행되는데 시간도 오래걸리고 기초 문법을 배우기에는 복잡합니다.
그래서 오늘은 온라인 컴파일러를 통해 플러터 기초강의 – Dart(다트) 기본 변수에 대해 설명드리겠습니다.
0. 온라인 Dart 컴파일러(online flutter)
이번 강의에서는 온라인 컴파일러를 적극 활용할 예정으로 새창에 홈페이지를 띄워놓도록 하자
주소 : www.dartpad.dev
![[Flutter] 플러터 Dart(다트) 기본 변수(2024.09.최신) – 기초강의 1강 3 온라인 컴파일러](https://ddoko.co.kr/wp-content/uploads/2024/09/image-37-1024x333-optimized.png)
1. Dart 변수
1.1. 기본 변수
int | 정수 (예: -1, 0, 42) |
double | 실수 (소수점을 포함한 숫자) (예: 3.14, -2.5) |
num | 숫자 (정수와 실수를 모두 포함) (예: 5, 3.14) |
bool | 참/거짓 (논리값) (예: true , false ) |
String | 문자열 (문자들의 집합) (예: ‘Hello’, “Dart”) |
List | 리스트 (순서가 있는 요소들의 모임) (예: [1, 2, 3] ) |
Set | 집합 (중복되지 않는 요소들의 모임) (예: {1, 2, 3} ) |
Map | 키-값 쌍의 데이터 구조 (예: { 'name': 'Dart', 'age': 10 } ) |
Null | 값이 없음을 나타내는 타입 |
1.2. 고급 변수
dynamic | 모든 타입을 가질 수 있는 변수 (타입을 런타임에 결정) |
var | 타입을 명시하지 않고 초기화 시 타입이 자동으로 추론되는 변수 |
Object | 모든 데이터 타입의 최상위 타입 (Dart의 모든 데이터는 Object 로 취급될 수 있음) |
1.3. 변수 상속구조
![[Flutter] 플러터 Dart(다트) 기본 변수(2024.09.최신) – 기초강의 1강 4 상속구조](https://ddoko.co.kr/wp-content/uploads/2024/09/image-38-1002x1024-optimized.png)
이처럼 모든 상속관계는 Object로 시작하게 된다.
2. 변수 선언과 초기화
2.1. 변수 선언
– 변수의 선언 방식
var name = 'Bob';
왼쪽에 var이라는 자료형의 name이 오른쪽의 String을 입력받고 있는 구조입니다.
변수는 기본적으로 var처럼 다이나믹한 추론형 변수를 사용할 수 있지만 그렇게 개발하는 개발자는 없을거라 생각합니다.
String name = 'Bob';
이렇게 미리 형을 결정하여 작성하는 것이 일반적이기 때문이죠.
혹은 여러 타입을 저장할 수 있는 변수가 필요하다면, Object
나 dynamic
을 사용할 수 있습니다:
Object name = 'Bob';
하지만 말씀드렸다시피 타입을 명확하게 작성하는 것은 오류를 방지하고 개발자 사이에 문제를 없애는 지름길입니다.
(자바스크립트가 좋다지만 타입스크립트가 추앙받는 이유가 있죠..)
3. Null 안전성
Dart에서는 null
안전성을 지원합니다.
이 말은 변수가 null
을 가질 수 있는지, 즉 nullable
한 상황인지 명확하게 정의하고null
로 인해 발생하는 오류를 방지할 수 있습니다.
예를 들어 int
에 null
이 할당되면 원래는 오류가 발생하겠죠?
int index = null; //ERROR!!
하지만 아래와 같은 선언이라면 가능합니다.
int? index;
null
이 가능한 변수는 기본적으로 null로 초기화 되기 때문에 사용하기전에는 꼭 null체크를 해야합니다.
물론 컴파일 때 null
로 인한 오류를 감지하고 에러를 띄웁니다.
late int lineCount; // late는 잠시 무시합시다
if (조건) {
lineCount = 10;
} else {
lineCount = 0;
}
print(lineCount);
그렇기에 이렇게 변수를 꼭 초기화 하고 사용해야 합니다.
4. Late 키워드
이 키워드는 변수를 나중에 초기화할 수 있도록 선언하는 키워드입니다.
원래는 선언과 동시에 초기화가 필요한 Dart의 null safety로, nullable
이 아닌 변수라면 초기화가 필요합니다.
late String description;
void main() {
description = 'Hello, Dart!';
print(description);
}
이렇게 되면 처음 사용할 당시 초기화를 하고 변수를 사용할 수 있습니다.
late
는 무거운 객체일 경우 프로그램의 메모리 사용을 효율적으로 하거나,
먼저 초기화되어야 하는 변수가 있을 경우 주로 사용하게 됩니다.
하지만 역시 초기화하지 않고 사용하면 에러뜨니 주의해야 합니다.
5. Final과 Const
Dart에서 변경할 수 없는 변수는 final
또는 const
로 선언합니다.final
변수는 한 번만 값을 설정할 수 있으며, const
변수는 컴파일 타임 상수입니다.
5.1. Final
final
키워드는 변수를 한 번만 초기화할 수 있게 만들어 줍니다.
즉, final
로 선언된 변수는 프로그램 실행 중 한 번만 값을 설정할 수 있고, 이후에는 값을 변경할 수 없습니다.
final name = 'Bob'; // 런타임에 할당된 값 //변경 불가
하지만 변경이 가능한 경우도 있습니다.
final
변수는 객체의 참조를 고정하지만, 객체 내부의 속성은 변경할 수 있습니다.
리스트를 final
로 선언하면 리스트 자체는 다른 리스트로 변경할 수 없지만,
리스트 내부의 요소는 변경할 수 있습니다.
final List<int> numbers = [1, 2, 3];
numbers[0] = 10; // 가능
// numbers = [4, 5, 6]; // 다른 객체로 변경하는 것은 불가능
5.2. Const
const
키워드는 변수를 컴파일 타임 상수로 만들어 줍니다.
즉, const
로 선언된 변수는 프로그램이 컴파일되는 시점에 이미 그 값이 결정됩니다. const
로 선언된 변수는 언제나 같은 값을 가지며, 어떤 상황에서도 변경할 수 없습니다.
const int age = 30; // 컴파일 타임에 고정된 값 // 변경은 아예 불가능
5.3. Final과 Const 차이점
둘은 비슷하면서도 약간의 차이가 있습니다.
- 초기화 시점:
final
은 런타임에 초기화되며,const
는 컴파일 타임에 초기화됩니다. - 객체 내부 수정:
final
은 객체 참조만 고정하고, 객체 내부 값은 수정할 수 있지만,const
는 객체 자체를 불변으로 만듭니다.
– 예시코드
final name = 'Alice'; // 프로그램 실행 중에 값 할당 가능
const int age = 30; // 컴파일 시점에 값 고정
// final 객체의 속성 변경 가능
final List<int> scores = [90, 80, 70];
scores[0] = 100; // 가능
// const 객체는 불변
const List<int> fixedScores = [90, 80, 70];
// fixedScores[0] = 100; // 불가능
오늘은 flutter에서 사용하는 Dart의 기본 변수에 대해서 알아보았습니다.
다음시간에는 오퍼레이터에 대해서 배울 것 입니다.
강좌를 보다가 조금이라도 궁금한 것이나 이상한 점이 있다면 꼭 댓글을 남겨주시기 바랍니다.
그 외에도 강좌에 관련된 것이라면 어떠한 것도 질문해 주셔도 상관 없습니다.
생각해 볼 문제도 정 모르겠다면 댓글을 달아주세요.