본문 바로가기

Dart 변수 알아보기 ( variables ) 본문

Dart

Dart 변수 알아보기 ( variables )

개발자로 거듭나기 2023. 4. 28. 17:22
반응형

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