Dart 변수 알아보기 ( variables ) 본문
반응형
02. dart variables
01. 변수 선언
- 관습적으로 클래스의 메서드나 멤버변수로 사용할 때는 타입을 지정해주고,
- 함수의 내부의 지역변수로 사용할 때는 var 키워드로 변수를 선언한다.
- 그러나 컴파일러가 타입추론을 잘 해주기 때문에 크게 상관은 없다.
var name = "mike"; // (Type: String)
name = 1; // (X) 타입을 지켜야 한다.
String todayLunch = "toast";
- var name = “mike”로 할당하게 되면 name의 타입은 String 타입이 된다.
- 다음 라인에서 name에 정수를 할당하려하면 에러가 난다.
- String 변수명 처럼 아예 타입을 지정해 줄 수도 있다.
02. 다이나믹 타입 변수
- 변수의 타입을 선언시에 지정해주지 않았기 때문에 dynamicVariable의 타입은 dynamic 타입이 된다.
- 이 변수의 타입은 동적으로 결정된다. (Type: dynamic)
- 서버에서 데이터를 받았는데 어떤 타입인지 알 수 없다면 유용하게 사용할 수 있다.
var dynamicVariable;
dynamicVariable = 'kim';
dynamicVariable = 20;
dynamicVariable = true;
dynamic firstname;
if (firstname is String) {
// firstname 변수가 String임을 보장
} else if (firstname is int) {
// firstname 변수가 int임을 보장
}
- var dynamicVariable; 처럼 선언하고 할당하지 않았을 때, (Type: dynamic) 이 되며 다양한 자료형의 값을 변수에 할당할 수 있다.
- dynamic firstname; 처럼 dynamic 키워드를 이용해 다이나믹 변수를 만들 수 있습니다.
- typescript의 타입가드 처럼 firstname is String 조건을 주게되면 if문 안에서는 다이나믹 변수의 타입이 String임을 보장할 수 있습니다.
03. dart의 null safety
- null safety는 개발자가 null 값을 참조할 수 없도록 하는 기능입니다. (컴파일 단계에서 잡아냄)
- dart의 변수는 기본적으로 nullable이 아니다. (null이 될 수 없다.)
null safety가 없다면?
bool isEmpty(String string) => string.length == 0;
void main() {
isEmpty(null); // error
// The argument type 'Null' can't be assigned to the parameter type 'String'.
}
- string타입의 인자를 보내줘야하는데 null을 보낸다. => null에넌 length 속성이 없기 때문에 런타임 에러가 발생
변수가 null 일 수도 있다는걸 나타내려면?
- ? 키워드 사용
String? code = 'code';
code = null;
- 그런데 다음과 같은 일이 발생한다.
// null이 될 수도 있다고 불평한다.
print(code.length);
// The property 'length' can't be unconditionally accessed because the receiver can be 'null'.
- 해결하기 위해선
if (code != null) {
print(code.length);
}
// 또는
print(code?.length);
04. late 키워드
- late 키워드로 변수를 선언하고 나중에 값을 할당합니다.
- 값을 넣기전까지 사용할 수 없습니다.
late String thirdname;
// do something... call api or business logic
print(thirdname); // (X) 할당되지 않았으므로 사용할 수 없다.
thirdname = "finally!";
print(thirdname); // 사용가능
05. 상수 - final 키워드
- final 키워드를 사용하면 변수를 수정할 수 없다.
- String을 붙이지 않아도 컴파일러가 타입추론을 잘해줍니다.
final String lastname = "doe";
lastname = "coe"; // error
// The final variable 'lastname' can only be set once.
06. 상수 - const 키워드
- complie time constant를 만들어준다. ( 컴파일 타임 상수 )
- complie time constant란 컴파일 할 때 알고 있는 값이다.
- 예를들어) data는 서버에서 받아오는 값이기 때문에 컴파일 단계에서는 값을 모른다. 따라서 const 키워드 보단 final로 설정함이 옳다.
const data = fetchApi(); // 컴파일 타임에 모르기때문에 final로 설정함이 옳다.
// 다음과 같은 api_key를 선언할 때 유용하다
const API_KEY = "123123";
반응형
'Dart' 카테고리의 다른 글
Dart class - named constructor (0) | 2023.04.28 |
---|---|
Dart class - basic (0) | 2023.04.28 |
Dart 함수 (function) 알아보기 (0) | 2023.04.28 |
Dart 자료형 (Data Type) (0) | 2023.04.28 |
Dart 시작하기 - Hello World (0) | 2023.04.28 |
Comments