dart 기초 - 타입, 키워드
최근 플러터를 이용한 프로젝트에 조인을 하게 되었다. 하지만 플러터를 사용하는건 이번이 처음이다보니 공부하여 기록하고자 한다.
처음은 dart언어가 사용하는 변수의 타입명부터 시작하자.
주의할점
현재까지 느끼는 바로는 자바스크립트와 C++과 같은 언어의 중간에 위치한것이 Dart라는 생각이 든다.
자바스크립트는 변수 타입명을 지정하지 않아도 되지만, 다트에서는 변수의 타입을 지정해야 한다.
그리고 자바스크립트처럼 변수의 타입이 도중에 바뀌어도 되는 타입도 하나 존재한다.
그리고 타입들은 세세하게 구분하지 않는듯 하다.
다트에서는 char == String, double == float로 취급하지만 C++, java에서는 이렇게 사용할 수가 없다.
또한 아래 내용은 dartpad를 사용하면서 알게된것이므로 사실과 다를수도 있다.
String
자바스크립트의 String이 “문자열” 인것처럼 다트에서도 “문자” 타입을 지정할때 사용한다.
int
숫자(정수) 타입을 지정할때 사용한다.
하지만 '1'
과 같은 값을 int형 변수에 담을수는 없다.
String을 int에 담을수 없다는 말.
형변환은 자동으로 지원되지 않고 수동으로 해야하는듯 하다.
double
숫자(실수) 타입을 지정할때 사용한다.
num
실수 정수 가리지 않고 숫자 타입을 지정할때 사용한다.
var
약간의 자바스크립트의 맛을 가진 키워드. 이 키워드로 변수타입을 지정하면 여러가지를 집어넣을수 있다. 하지만 할당되는 값에 따라 데이터 타입이 고정되는 키워드다.
즉 나중에 데이터 타입을 변경하려면 에러가 난다는 이야기.
지금까지는 숫자, 문자열, 객체(맵), 리스트를 집어넣을수 있었다. 다만 함수를 집어넣는건 안된다.
함수를 집어넣고자 하면 아래 dynamic 키워드를 이용하자.
dynamic
var와 유사하다. 하지만
- 데이터 타입 변경 가능
- 함수 저장가능
위 두가지 측면에서 차이점을 보였다.
boolean
boolean 타입은 다른 언어와 마찬가지로 참 거짓을 저장할때 사용한다.
선언도 역시 bool 이라 작성한다.
final
final은 처음 설정한 변수의 값을 변경하지 않아야 할때 사용된다. 또한 var와 같이 변수에 따라 단 한번 데이터 타입이 결정되며 타입명시를 생략해도 된다.
const
final과 설명은 같지만 차이점이 존재한다.
- 선언과 동시에 초기화가 이뤄져야 한다.
- 코드를 작성할때 값이 정해져 있어야 한다.
설명하자면
const variable; // 컴파일 에러
const variable = DateTime.now(); // 컴파일 에러
const variable = '123'; // 컴파일 성공
아래에서 설명하겠지만 dateTime.now()는 빌드 타임에서야 값이 저장된다. 그래서 컴파일 오류가 나타나게 된다.
DateTime
자바스크립트의 Date라고 생각하면 좋을듯 하다. 아직 다 파악을 한것은 아니지만 사용법도 유사한듯 하다.
주의할건 Date.now() 와 같은 함수들 (일부? 모두?)가 빌드 타임에서 값이 정해지지 않는다는것이다. 기계가 저 코드를 실행해야만 값이 저장된다고 한다.
빌드타임은 지금것 작성한 코드를 2진수로 변환하여 기계에서 실행 가능하게 만들어 주는거라 생각하면 좋다.
그래서 const로 변수를 선언하고 값을 초기화한 경우, 위 함수(들?)은 컴파일 오류가 생긴다.
List
자바스크립트의 배열이라고 생각하면 좋을듯 하다.
List<타입> 변수명 = [];
하지만, 엄격하게 타입을 지켜야 한다. 타입을 혼용하여 값을 저장할수 없다는 이야기. 여러 메서드를 지원하고 있으니, 문서를 참고하면 좋을듯하다.
특이하게 인덱스가 아니라 값을 이용하여 인자를 제거할수 있는듯하다.
Map
자바스크립트의 객체라고 생각하면 좋을듯 하다.
Map<타입1 - 키, 타입2 - 벨류> 변수명 ={...}
혹은 자비스크립트에서 처럼 var 키워드를 사용하여 선언해도 될듯.
맵도 여러 메서드를 지원한다. 참고문서를 한번 보도록 하자.
Set
자바스크립에서 볼수 없는 기능. 파이선에서 본거 같이도 하다.
비유하자면 중복을 허용하지 않는 배열, 그런데 중괄호를 사용하는
이라고 쓰면 좋을까? 싶다. 중복을 허용하지 않는다고 해서 오류가 나오는건 아닌듯 하다. 중복된건 배열에서 2번이상 나오지 않게 하는듯.
if
여러 프로그래맹에서 사용하는 조건문의 그것. else if, else를 이용해 분기를 할수 있다.
switch & case
if문과 비슷한 키워드 switch & case가 if, else if 이고 else가 default로 바뀐 형태
switch(number %3){
case 0: // 윗줄과 여기까지 if(number % 3)과 동일
....
break; // 반드시 break를 넣어서 다른 코드 실행을 방지해주자. else if문과 동일
case 1:
....
break;
default: // else 문과 동일
...
break;
}
기타 특이한점
다트언어는 null을 허용하지 않는다. 하지만 타입명뒤에 ?를 붙이면 null을 허용한다.
double number = null // 에러!
double? number = null // 문제없음!
댓글남기기