brunch

You can make anything
by writing

C.S.Lewis

by 서준수 Feb 26. 2020

다트(Dart) 키워드(Keyword)

플러터를 위한 다트 프로그래밍

다트 키워드

프로그래밍에서 키워드(keyword) 특별한 의미를 지니는 단어를 뜻한다. 예약어(reserved word)라는 말도 쓰는데 키워드와 예약어는 약간 다르다. 차이를 설명하려면 식별자(indentifier)라는 말도 등장한다. 하나씩 살펴보면 다음과 같다.


1. 식별자 

변수, 함수 등의 이름이다. (=변수명, 함수명) 이름 지정해야 식별이 가능하니까.


ex)

int a; // 식별자는 a

void foo(); // 식별자는 foo


다트에는 내장 식별자(built-in identifier)가 존재한다. 식별자이니까 아무데서나 쓸 수 있겠지?라고 생각하면 오산이다. 내장 식별자는 클래스명, 타입명, import시 prefix사용할 수 없다. 진짜인지 하나 확인해볼까?


일단 다트의 내장 식별자 종류는 다음과 같다.

이전 글에서 사용했던 예제에서 import시 prefix를 위 내장 식별자 중에 한 가지로 바꿔보자. 여기서는 set을 선택했다.

빌드해보면 다음과 같은 에러가 발생한다. 진짜 사용할 수 없다는 것을 확인할 수 있다.


bin/main.dart:1:44: Error: Can't use 'set' as a name here.

import 'package:dartEx01/dartEx01.dart' as set;


그러면 클래스명, 타입명, import시 prefix가 아니라면 사용할 수 있을까? 그렇다.

prefix 원래대로 돌려놓고 add() 함수를 set()으로 함수명을 바꾸고 빌드하면 정상적으로 동작한다.


2. 키워드

특정 문맥에서 특별한 의미를 가지는 단어이다. 따라서 그 '특정 문맥'이 아닌 곳에서는 식별자로 사용 가능하다.


다트는 문맥 키워드라고 좀 더 친절하게 부르는 5가지 키워드가 있다.

키워드의 의미대로라면 특정 문맥에서는 특별한 의미, 즉 어떤 동작을 수행하는 역할을 하지만 그 외에서는 함수명이건 변수명이건 간에 사용 가능해야 한다.


다트의 문맥 키워드 중 show 키워드를 사용하여 확인해보자.

show 키워드의 역할은 라이브러리 import시 라이브러리의 일부만 사용하고 싶을 때 사용할 부분을 선택하는 것이다. 기존 예제를 다음과 같이 수정하였다.

dartEx01.dart에는 TestA, TestB 클래스가 추가되었고 각 클래스에는 show()라는 멤버 함수가 있다. 이때 TestA 클래스만 show 키워드를 통해서 사용하도록 한다.


그 후 TestA의 객체를 만들어서 show() 멤버 함수를 호출한다.


자, 이로써 import 시에 show 키워드를 사용하고 함수명으로 show()를 사용했다. 정상적으로 빌드가 되고 결과도 제대로 나온다.


특정 부분만 import를 하라는 의미를 가지면서 함수명으로 사용했으므로 키워드의 특징을 만족했다.


참고로 만약 var test = TestB();로 수정하여 선택하지 않은 TestB 클래스를 사용하려고 한다면 다음과 같은 에러가 발생한다.


bin/main.dart:16:14: Error: Method not found: 'TestB'.

  var test = TestB();



3. 예약어

식별자로 사용할 수 없는 특별한 단어이다.


다트 버전 1.0 이후에 비동기 지원에 관련한 제한된 예약어가 추가되었다. 해당 예약어는 async, async*, sync*로 표시된 (비동기/동기) 함수의 바디에서는 식별자로 사용할 수 없다. 대신 그 외에서는 식별자로 사용 가능하다.


비동기 관련 제한된 예약어는 await, yield 2가지이다. (어떤 역할을 하는지는 추후에...)


비동기/동기 함수 바디가 아닌 곳에서는 다음 예제와 같이 식별자로 사용 가능하다.

yield를 함수명으로 사용했고 await를 변수명으로 사용했다. 문제없이 정상적으로 빌드되고 동작한다.


하지만 다음과 같이 test()라는 비동기 함수를 추가하고 해당 함수 바디에서 await를 변수명으로 사용하려고 하면 에러가 발생한다.


bin/main.dart:9:7: Error: 'await' can't be used as an identifier in 'async', 'async*', or 'sync*' methods.

  var await = 10; // Declare and initialize a variable.


그 외에 많은 예약어가 있다. 이 예약어는 식별자가 될 수 없는 진짜(?) 예약어이다.

각 키워드, 예약어의 의미는 앞으로 살펴봐야 할 숙제들이다.

이전 02화 다트 기본 구조 및 중요 개념
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari