Programming language/Dart

다트 변수 Dart Variables

Think-About 2022. 6. 27. 01:40

다트 변수 Dart variables

Think about ~ Dart!

이번 글을 통해 다트 프로그래밍 언어에서 변수에 대한 내용을 다루도록 합니다.

IDE나 다트 환경에 대해서는 다음 글을 확인해주시기 바랍니다.

 

 

DartPad - Dart getting started

DartPad - Dart getting started Think about ~ Dart! 다트 프로그래밍 언어 Dart programming language 다트 프로그래밍 언어 Dart programming language Think about ~ Dart! https://think-about.tistor..

think-about.tistory.com


변수 Variable

다트 변수는 값을 저장하는 것이 아니라 참조를 저장합니다.

이게 무슨 말이냐 하실 수 있습니다.

var name = 'Think-about';

위의 예시는 name이라는 변수에 'Think-about'이라는 값을 가지는 String 객체에 대한 참조를 저장하게 되는 것입니다.

주의할 점은 name이라는 변수의 값이 'Think-about'이 되는 것은 아니라는 점입니다.

기본적으로 다트에서는 변수 type을 지정하지 않도록 권장합니다. 이에 var 키워드를 사용하는 것입니다.

하지만 다음과 같이 지정할 수는 있습니다.

String name = 'Think-about';

초기화

다트는 기본적으로 null safety를 지원합니다. 만약, null safety를 지원하지 않는 버전의 다트를 사용하시거나 기능을 비활성화한다면 모든 변수의 타입은 null 값을 가질 수 있습니다.

Dart의 null safety

위 코드는 a라는 변수를 초기화하지 않고 사용합니다. 이에 Dart는 'a라는 변수는 non-nullable이다!'라고 말하며

컴파일이 되지 않습니다. 이처럼 초기화되지 않은 변수, null 값을 가지는 변수가 사용되지 않도록 하는 것이

null safety입니다.

그럼 null 값을 사용하고 싶으면 어떻게 해야 하는지 알아봅니다.

Nullable variable a

타입 뒤에?를 붙이면 변수가 null값을 가질 수 있음을 의미합니다. 이를 nullable이라고 표현합니다.

위 코드를 실행하면 컴파일되어 null값이 실행됩니다.


Dart late

다트 2.12부터 late 키워드가 추가되었습니다.

변수가 일단 선언이 먼저 된 후에 초기화되어야 하는 경우, 느리게 변수를 초기화하겠다는 의미입니다.

Late를 이용한 초기화

위의 예시는 name이라는 변수를 top level 변수로 먼저 선언을 해두고, main() 함수에서 초기화한 후에 사용하는 코드입니다. 굳이?라는 의문이 들으실 수도 있습니다. 하지만 꼭 필요한 경우를 경험하실 수 있습니다.

만약 다음과 같은 함수가 있다고 가정합니다. 이 함수는 컴퓨터 자원 측면으로 엄청 비싼 작업이라고 생각해봅니다.

late 활용 예시

main() 함수에서 변수 n을 사용하지도 않는데 비싼 작업을 거치는 count() 함수가 호출된 것을 볼 수 있습니다.

비효율적이지요? 이럴 때 late 키워드를 사용하면 효율적으로 바꿀 수 있습니다.

late 활용 예시

변수 n을 late 키워드로 지정한 후 실행한 결과입니다. count() 함수의 비싼 작업이 실행되지 않은 것을 볼 수 있습니다.

그럼 이 변수 n을 사용하게 된다면 어떻게 될까요?

late 활용 예시

print를 통해 변수 n을 사용하니까 count() 함수의 비싼 작업이 실행된 것을 확인할 수 있습니다.

이를 통해 late 키워드는 변수가 사용되지 않을 수도 있는 상황에서 만약 변수를 초기화한다면 컴퓨터 자원 측면에서 비싼 작업이 필요한 경우 사용하면 좋다고 이해하시면 되겠습니다.


Dart final const

만약 절대 변경될 일이 없는 혹은 변경되어서는 안 되는 변수가 있다면 final이나 const를 사용하면 됩니다.

final과 const는 변수에 대해 변경 작업을 할 수 없다는 점은 동일합니다.

하지만, final은 런타임에 해당하고 const는 컴파일 타임에 해당합니다.

그렇기에 인스턴스화 되는 객체들에 대해 final을 사용할 수 있지만 const는 사용할 수 없습니다.

final 예시

위 코드처럼 name이라는 변수는 final로 지정되어 있기 때문에 'Dennis'에서 'Think-about'으로 변경하지 못합니다.


Dart의 변수에 대한 기본적인 내용과 관련된 키워드에 대해 알아보았습니다.

 

이번 글은 여기까지입니다.

Think-about ~ Dart!

 

도움이 되셨다면 공감, 댓글, 구독을 부탁드립니다.