[Dart]변수와 타입
안녕하세요, Satomi 입니다! 저는 Flutter와 Dart언어 공부를 하면서 스스로 헷갈렸던 부분들을 잘 기록해놓고자 블로그를 시작하게 되었습니다. 앞으로 열심히 공부하고 열심히 기록하겠습니다 :)
오늘은 가장 기본적인 Dart의 변수와 타입에 대해서 알아보고자 합니다.
변수와 타입이란 무엇일까요?
변수란 프로그래밍을 할 때 가장 기본이 되는 단위로, 특정한 값(데이터)을 담아두는 그릇이라고 이해하면 쉽습니다.
그리고 데이터의 유형을 타입이라고 합니다.
기본형 타입에는 bool(참/거짓형), int(정수형), double(실수형), String(문자열형), null(Null형)이 있고, 자료형 타입에는 List, Set, Map이 있습니다.
// 참/거짓형 bool
bool isTrue = true;
// 정수형 int
int num1 = 100;
int num2 = 3.14; // int형 변수에 실수를 할당하면 error 발생
// 실수형 double
double num3 = 3.14;
double num4 = 3; // double형 변수에 정수를 할당하면 실수(3.0)로 저장됨
// 문자열형 String
String string = 'Hello World';
String errString = Hello World; //문자열을 큰따옴표("") 혹은 작은따옴표('')로 감싸주지 않으면 error 발생
// Null형 null
Null thisIsNull = null;
Dart는 파이썬과 다르게 변수를 선언 혹은 저장할 때 int num = 100;
과 같이 타입을 정의해야 합니다. 타입을 정의하지 않고 num = 100;
과 같이 사용하게 된다면 error가 발생하게 됩니다.
타입은 꼭 정의 해야 할까요?
하지만 타입을 반드시 정의할 필요는 없습니다.
가변형 타입인 var와 Dynamic을 이용하여 타입 정의 없이 변수를 선언할 수 있습니다.
- var: 최초 한번 부여된 타입이 고정적으로 사용
- dynamic: 타입이 코드 진행 중에라도 언제든지 변환 가능
// 가변형 var
var value = 1; // 가변형 var 타입으로 value 변수 선언하고 int형 데이터 1 할당
value = 2; // 같은 int형 데이터를 할당시 error 발생하지 않음
value = 'is Error?' // int형이 아닌 다른 타입의 데이터를 할당시 error 발생
// 가변형 dynamic
dynamic dynamicValue = 100; // 가변형 dynamic 타입으로 변수 선언 및 int형 데이터 할당
dynamicValue = 'is not Error?' // 변수 선언시 최초 부여된 타입과 다른 타입의 데이터를 할당해도 error 발생하지 않음
하지만 프로그래밍 특성 상, 주고 받는 타입에 대한 정의가 명확해야 추후 코드를 관리하고 다른 사람과 협업하는데 큰 도움이 되기 때문에 되도록 타입을 명확히 정의해두는 것이 좋습니다 :)
상수는 어떻게 선언하나요?
변수는 한번 할당한 값을 여러번 수정할 수 있는 것이 특징입니다. 하지만 프로그래밍을 하다보면 특정한 상황에 할당한 값을 바꾸고 싶지 않은 경우가 있습니다. 그럴 때 변수 대신 상수를 선언하게 됩니다.
변수 | 상수 |
---|---|
한번 할당한 값을 여러번 수정할 수 있음 | 값을 한번 할당하면 수정할 수 없음 |
Dart에는 상수를 선언하는 방법이 두가지가 존재합니다.
- const
- compile 시점에 상수 처리 될 경우에 활용
- compile 시점에 값을 반드시 알 수 있어야 함
- 런타임에 값을 변경할 수 없음
- 불변 객체를 정의할 때 주로 사용됩니다.
- final
- 프로그램 진행 중에 상수 처리 될 경우에 활용
- 런타임에 한 번만 값을 설정할 수 있습니다.
- compile 시점에 값을 알 필요는 없음
이때 const 키워드를 사용하면 불변 객체(Immutable Object)를 생성할 수 있습니다. 불변객체는 객체의 내용이 고정되고 변경되지 않도록 보장합니다.
const List<int> numbers = [1, 2, 3];
// numbers.add(4); // 오류 발생: 불변 리스트이므로 변경 불가
final List<int> finalNumbers = [1, 2, 3];
finalNumbers.add(4); // 가능: final은 참조 자체만 고정, 내부 데이터는 변경 가능
print(numbers); // 출력: [1, 2, 3]
print(finalNumbers); // 출력: [1, 2, 3, 4]
오늘은 Dart의 변수와 타입에 대해서 알아보았습니다. 자료형 타입에 대해 설명이 누락된 부분은 추후에 업데이트 할 예정입니다!
저는 가변형 타입인 var/dynamic 그리고 상수 선언시 사용하는 const/final 키워드가 많이 헷갈려서 오늘 이렇게 블로그에 기록을 남기게 되었습니다.
앞으로도 헷갈리는 부분들을 오늘처럼 기록하며 다시 복습하고 재학습할 수 있는 유익한 블로그가 될 수 있도록 열심히 하겠습니다!
감사합니다.