# Dart 프로그램의 기본 (A basic Dart program)

다음 코드는 Dart의 가장 기본적인 기능을 많이 사용한다.

```dart
// 함수를 정의 한다.
printInteger(int aNumber) {
	print('The number is $aNumber.'); // 콘솔에 표시한다.
}

// 앱의 실행 시작점 이다.
void main() {
	var number = 42; // 변수를 선언하고 초기화 한다.
    printInteger(number); // 함수를 호출한다.
}
```

다음은 이 프로그램이 사용하는 모든 (또는 거의 모든) Dart 앱에 적용되는 내용이다.

`// 이것은 주석이다.`

한 줄 주석이다. Dart 는 또한 여러 줄 및 문서 주석을 지원한다. 자세한 내용은 [주석](https://github.com/booiljung/gitbooks/blob/main/2101%20programming%20languages/2201%20dart%20language%20tour%202018/comments.md)을 보세요.

`void`

사용되지 않을 값을 나타내는 특수 타입이다. `printInteger()`와 `main()`같은 함수는 `void` 반환 타입을 가지고 값을 리턴하지 않는 것을 명시한다.

`int`

다른 타입으로, 정수를 나타내는 타입이다. 다른 [내장 타입(builtin types)](https://github.com/booiljung/gitbooks/blob/main/2101%20programming%20languages/2201%20dart%20language%20tour%202018/built_in_types.md)은 `String`, `List`, `bool` 등이 있다.

`42`

숫자 리터럴 이다. 숫자 리터럴은 컴파일 타임 상수 이다.

`print()`

출력을 표시하는 편리한 수단이다.

`'...'` (또는 `"..."`)

문자열 리터럴이다.

`$variableName` (또는 `${expression}`)

문자열 interpolation: 문자열 리터럴 내에서 변수 또는 표현식의 문자열을 포함한다. 자세한 내용은 [Strings](https://github.com/booiljung/gitbooks/blob/main/2101%20programming%20languages/2201%20dart%20language%20tour%202018/built_in_types.md#strings)를 보세요.

`main()`

특별한 필수 최상위 함수로 앱 실행시 시작점이다. 더 자세한 내용은 [main() 함수](https://github.com/booiljung/gitbooks/blob/main/2101%20programming%20languages/2201%20dart%20language%20tour%202018/functions.md#main) 을 보세요.

`var`

타입을 지정하지 않고 변수를 선언하는 방법 이다.

#### 주요 컨셉 (Important concepts)

* 변수에 넣을 수 있는 모든 것은 객체이며 모든 객체는 클래스의 인스턴스이다. 숫자, 함수 및 `null`은 객체이다. 모든 객체는 `Object` 클래스에서 상속 받는다.
* Dart가 강력하게 타입화 되어 있지만, Dart는 타입을 유추 할 수 있으므로, 타입 주석(annotation)은 선택 사항이다. 위의 코드에서 `number`는 `int` 타입으로 유추된다. 만일 타입이 없다고 명시적으로 지시하려면 특수한 타입인 `dynamic`을 사용하라.
* Dart는 `List<int>` (정수 리스트) 또는 `List<dynamic>` (동적 타입의 개체 리스트)와 같은 제네릭 타입을 지원한다.
* Dart는 최상위 함수 (top level function; 예를 들어: `main()`)와 클래스 또는 객체 (정적 메소드 및 인스턴스 메소드)에 연결된 함수를 지원한다. 함수내에서 함수(중첩; nested 또는 로컬 함수)를 만들 수도 있다.
* 마찬가지로 Dart는 클래스 또는 객체 (정적 변수 및 인스턴스 변수)에 연결된 변수뿐만 아니라 최상위 변수(top level variable)도 지원한다. 인스턴스 변수는 필드(field) 또는 속성(property)이라고도한다.
* Java와 달리 Dart에는 public, protected 및 private 키워드가 없다. 식별자가 밑줄 (`_`)로 시작하면 해당 라이브러리에 대해 비공개이다. 자세한 내용은 [라이브러리 및 가시성](https://github.com/booiljung/gitbooks/blob/main/2101%20programming%20languages/2201%20dart%20language%20tour%202018/libraries_and_visibility.md)을 참조하라.
* 식별자는 문자 또는 밑줄 (`_`)로 시작하고 그 뒤에 문자와 숫자의 조합이 올 수 있다.
* Dart에는 실행 값이 있는 표현식과 실행되지 않는 명령문이 있다. 예를 들어, 조건식 `condition ? 표현식1 : 표현식2`는 `표현식1` 또는 `표현식2` 값을 갖는다. 이를 값이 없는 if-else 문과 비교하면 명령문에는 하나 이상의 표현식이 포함되는 경우가 많지만 표현식에 명령문을 직접 포함 할 수는 없다.
* Dart 도구는 경고 및 오류의 두 가지 종류의 문제를 보고 할 수 있다. 경고는 코드가 작동하지 않을 수도 있지만 프로그램 실행을 방해하지는 않는다. 오류는 컴파일 타임 또는 런타임 중 하나 일 수 있다. 컴파일 타임 오류로 인해 코드가 전혀 실행되지 않는다. 런타임 오류로 인해 코드가 실행되는 동안 예외가 발생한다.

#### 예약어 (Keywords)

예약어는 다음과 같다.

```dart
abstract 		dynamic	 		implements  	show
as				else		 	import			static
assert 			enum 			in 				super
async 	 		export  		interface  		switch
await  			extends 		is 				sync
break 			external  		library  		this
case 			factory  		mixin  			throw
catch 			false 			new 			true
class 			final 			null 			try
const 			finally 		on  			typedef 
continue 		for 			operator  		var
covariant 	 	Function 	 	part 		 	void
default 		get 		 	rethrow 		while
deferred 	 	hide 		 	return 			with
do 				if 				set 		 	yield
```

***

다음: [변수 (Variables)](https://github.com/booiljung/gitbooks/blob/main/2101%20programming%20languages/2201%20dart%20language%20tour%202018/variables.md)

### 문서 변경 이력

2019년 5월 15일: 첫 작성.
