Dart는 모바일 애플리케이션, 웹 애플리케이션, CLI, 서버측 응용 프로그램등을 만들 수 있다. 범용 개발 언어라고 불러도 될 것 같다. 다만 2018년 배워서는 안될 5개 언어어 랭크 될 정도로 상황이 매우 안좋았다. 하지만 같은 사이트의 2019년 결과를 보면, 꽤나 상황이 좋아졌음을 알 수 있다. Job Market를 제외하면 나름 선방하고 있다. 특히 Growth and Trends를 보면 무려 20위에 랭크되고 있는데, 19위인 코틀린 보다 더 나은 상황이다.
Dart는 플랫폼과 개발 목표에 따라서 다양한 방식으로 실행 할 수 있다.
Dart Native : 모바일, 데스크탑, 서버의 경우 Dart VM & JIT(just-in-time)를 이용해서 개발하고, AOT(ahead-of-time)컴파일러로 머신코드를 만들어서 배포 할 수 있다.
Dart Web : 웹인 경우 dartdevc와 dart2js로 개발 및 배포 할 수 있다.
변수에 넣을 수 있는 모든 것은 객체이며, 모든 객체는 클래스의 인스턴스다. 숫자, 함수, null도 객체다. 모든 객체는 Object 클래스를 상속받는다.
Dart는 강타입(strongly typed)언어이지만, 타입유추도 가능하므로 타입을 생략 할 수 있다. 예제코드의 number는 int 유형으로 유추된다.
Dart는 List<int>, List<dynamic>과 같은 제너릭을 지원한다.
Dart는 최상위 함수와 클래스 또는 객체에 연결된 함수를 지원한다. 함수 내에서 함수를 만들 수도 있다.
Dart는 클래스 객체에 연결된 변수뿐만 아니라 최상위 변수도 지원한다. 인스턴스나 변수는 필드 또는 속성이라고도 한다.
Java와 달리 public, protected, private 키워드가 없다. 언더바(_)로 시작하면 private 이다.
Dart 툴은 경고와 오류 두 가지 종류의 문제를 보고한다. 경고는 코드가 작동하지 않을 수도 있지만 어쨋든 코드는 실행한다. 오류는 컴파일 타임 혹은 런타임 오류 중 하나다. 컴파일 타임 오류는 아예 코드가 실행되지 않을 것이다. 런타임 오류는 코드가 실행되는 동안 예외가 발생한다.
변수를 만들고 초기화하는 예제다.
변수는 (데이터가 저장된 위치의)참조를 저장한다. 위 예제에서 name 변수는 Bob 값이 저장된 String 객체의 참조 정보를 저장하고 있다.
name 변수의 유형은 String으로 유추되지만 필요에 따라 유형을 변경 할 수 있다. 객체가 단일 유형으로 제한되지 않는다면 dynamic이라는 동적 타입을 사용 할 수 있다.
아래처럼 유형을 명시적으로 선언할 수도 있다.
변수를 변경하지 않으려면 var 대신 final과 const를 사용한다. final은 한번만 설정 할 수 있다. const는 상수다.
아래 예제를 보자.
final 변수는 값을 변경 할 수 없기 때문에 에러가 떨어진다.
const를 이용하면 컴파일 시간에 상수가되도록 할 수 있다. 만약 const 변수가 클래스 레벨이라면 static const가 된다.
변수가 const, final이 아니라면 값이 const라고 하더라도 변경 할 수 있다.
const 변수는 값을 변경 할 수 없다.
리터럴을 이용해서 각 타입들을 초기화 할 수 있다. 예를 들어 "this is a string"는 string이고, true는 boolean 리터럴이다.
Dart의 모든 변수는 객체(클래스의 인스턴스)이기 때문에 생성자를 이용해서 변수를 초기화 할 수 있다. 일부 내장 타입들은 자체 생성자를 가지고 있다. 예를 들어 Map은 ()생성자를 이용해 초기화 할 수 있다.
언어를 막론하고 가장 널리 사용하는 컬랙션(collection)은 배열과 정렬된 객체그룹일 것이다. Dart에서 배열은 list 객체다.
Dart에서 list는 List<int>로 유추하기 때문에, 정수가 아닌 개체를 목록에 추가하면 런타임에서 에러를 출력한다. List의 인덱스는 (다른 언어의 배열과 마찬가지로) 0부터 시작한다.
Dart 2.3 부터는 스프레드 연산자(...)와 널 인식 스프레드 연산자(...?)를 제공한다. 스프레드 연산자를 이용해서 여러 요소를 쉽게 삽입할 수 있다.
널 인식 스프레드 연산자의 경우 널인식을 통한 에러를 막을 수 있다.
코드를 실행하면 에러가 발생한다.
1
2
3
4
5
6
7
8
9
dart list.dart
Unhandled exception:
NoSuchMethodError: The getter 'iterator' was called on null.
아래와 같이 코드를 수정하는 것으로 에러를 방지 할 수 있다.
Dart 2.3부터 collection if와 collection for를 제공한다. 배열안에서 if와 for문을 사용 할 수 있다.
office가 true이므로 4번째요소는 Outlet이 된다.
for문을 이용해서 배열을 초기화하는 예제다.
Contents
1. Dart 설치
2. Hello World
3. 개발 플랫폼
4. Dart program 기본
5. 주요 컨셉
6. 키워드
7. 변수
7.1. Default value
7.2. Final과 const
8. 내장 타입들
8.1. Number
8.2. Strings
8.3. booleans
8.4. Lists
8.5. Sets
8.6. Maps
9. 참고
1. Dart 설치
2. Hello World
3. 개발 플랫폼
4. Dart program 기본
5. 주요 컨셉
6. 키워드
7. 변수
7.1. Default value
7.2. Final과 const
8. 내장 타입들
8.1. Number
8.2. Strings
8.3. booleans
8.4. Lists
8.5. Sets
8.6. Maps
9. 참고
Recent Posts
Archive Posts
Tags