Dart 언어의 중요한 개념들
Important concepts
Last updated
Important concepts
Last updated
A tour of the Dart language 페이지를 공부하면서 정리한 내용입니다.
아래와 같은 사실과 개념을 바탕으로 Dart 언어를 공부해주세요.
변수에 할당 가능한 모든 것은 객체이고 모든 객체는 클래스의 인스턴스입니다. 숫자, 함수 및 null
조차도 객체입니다. null safety(Dart 버전 2.12부터 지원)를 활성화한 상태의 null
을 제외하고 모든 객체는 Object
클래스를 상속합니다. null safety를 사용할때 null
은 Null
클래스를 상속하며, Null
클래스는 Object
클래스를 상속하지 않는 유일한 클래스입니다. Null
클래스를 상속하려고 시도하면 경우 컴파일 타임에 오류가 발생합니다. 보다 자세한 설명은 여기를 참고해주세요.
Dart는 강타입(strongly typed) 언어입니다. 컴파일러는 타입을 추론하기 때문에 타입 선언을 할지는 선택 사항입니다.
Null safety를 활성화하면 변수에 null
할당을 허용한다고 선언하지 않은 경우 null
을 할당할 수 없습니다. null
할당을 허용(nullable)하도록 변수를 선언하려면 타입 선언에 ?
를 추가하면 됩니다. 변수를 사용하고자 할때 변수가 null
이 아니라면 !
를 사용해서 값을 사용할 수 있습니다.
명시적으로 어떤 타입이든 허용하고 싶다면 Object?, Object, dynamic
을 사용할 수 있습니다. 특히 dynamic은 REST API 이용한 데이터 불러오기 처럼 반드시 런타임(Runtime)에 타입 체킹을 해야하는 상황에서 유용하게 사용할 수 있습니다. 하지만, 컴파일 타임 타입 검사를 통한 장점이 사라지므로 반드시 필요한 경우에만 사용하는 것을 추천합니다.
제네릭(Generic) 타입을 지원합니다. List<int>
는 정수 리스트를 표현합니다.
main()
함수와 같은 최상위 레벨 함수
클래스에 연결된 static
메서드
객체에 연결된 인스턴스 메서드
함수 안에서 함수를 정의하고 반환할 수 있음
최상위 레벨 변수
클래스에 연결된 static
변수
객체에 연결된 인스턴스 변수
변수 및 함수 식별자(Identifiers)는 문자 또는 밑줄(_
)로 시작해야 합니다. 이어서 문자와 숫자 조합을 사용할 수 있습니다.
다른 언어에서 지원하는 public, protected, private
같은 접근 제한자를 지원하지 않습니다. 대신에 변수 또는 함수 식별자가 밑줄(_
)로 시작하면 해당 라이브러리에 대해 비공개로 설정됩니다. 보다 자세한 내용은 여기를 참고해주세요.
런타임에 값을 갖는 표현식(Expressions)과 값을 갖지 않는 명령문(Statements)을 모두 가지고 있습니다. 예로, 삼항 연산자 (condition ? expr1 : expr2
)와 if-else
문을 들 수 있습니다. expr1, expr2
가 값이므로 삼항 연산자의 결과도 값인데 반해, if-else 문은 값을 갖지 않습니다. 명령문은 표현식을 포함할 수 있지만, 표현식은 명령문을 포함할 수 없습니다.
경고(Warnings)는 코드가 정상적으로 동작하지 않을 수 있다는 표현일 뿐 프로그램이 동작하는 것을 막지 않습니다. 오류(Errors)는 컴파일 타임과 런타임 오류가 있습니다. 컴파일 타임 오류는 프로그램이 실행될 수 없도록 막습니다. 런타임 오류는 프로그램이 실행되는 도중에 예외(Exception)를 발생 시킵니다.