Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Class

다트는 클래스와 믹스인(mixin)기반의 상속을 사용하는 객체지향언어다. 모든 객체는 클래스의 인스턴스이며 모든 클래스는 객체로부터 파생된다. 믹스인은 부모 클래스로부터 상속받아서 메서드를 사용하지 않고, 다른 클래스를 "포함"하는 방식으로 사용한다. 다중상속에서 발생하는 다이아몬드 문제(diamond problem)를 해결 할 수 있다. 믹스인은 "구현된 메서드와의 인터페이스"로 볼 수 있다.

Class 문법

Dart의 클래스는 아래와 같이 정의한다.
class class_name {
    // Properties (Instance variables) 
    // Constructor
    // Methods
    // Geeters & Setters
}

아래는 작동하는 클래스 예제다. new 키워드를 이용해서 새로운 객체를 만들 수 있다. 다만 Dart2 부터는 new를 생략해도 된다.

클래스 멤버

객체는 메서드(methods)인스턴스 변수(instance variables)들을 멤버로 구성이 된다. 이들 멤버는 "."를 이용해서 접근 할 수 있다. "." 대신 "?."을 이용하면 null exception을 회피할 수 있다.

생성자

생성자는 인스턴스가 만들어질 때, 자동으로 호출되는 메서드다. 인스턴스 초기화에 주로 사용한다. Dart에서는 클래스이름으로 생성자를 만들 수 있다.

Dart는 Zero argument constructor를 지원한다. 아래 예제를 보자.

매개변수가 있는 생성자를 만들어서 특정 유형의 객체를 인스턴스화 할 수 있다. 생성자가 매개변수를 가지도록 위 코드를 수정했다.

예제의 생성자의 매개변수는 인스턴스 변수와 일대일로 대응한다. 이 경우 매개변수에 인스턴스 변수를 직접 설정하는 식으로 단순한)코드를 만들 수 있다. 블럭은 옵션이다. Aotomatic Class Member Variable Initialization이라고 한다.

네임드 생성자

두 개 이상의 생성자(multiple constructors)을 구현하기 위해서 사용한다.

Methods

메서드는 객체의 작동하게 하는 함수를 의미한다.

Instance methods

인스턴스 메서드는 this를 이용해서 인스턴스 변수에 접근 할 수 있다. 아래 예제 코드의 distnaceTo 메서드가 인스턴스 메서드다.

Getters와 Setters

Getter와 Setter는 객체의 속성에 읽기/쓰기 접근을 허용하는 특수한 목적의 메서드다. 인스턴스 변수들은 암시적 getter/setter를 가지고 있다. 필요하다면 getter과 setter를 직접 구현 할 수도 있다.

Abstract class & Abastract methods

Dart는 추상 클래스를 지원한다. abstract 키워드를 이용해서 추상클래스를 정의 할 수 있다. 그리고 추상 클래스에서 추상 메서드를 정의 할 수 있다. 추상 클래스는 인터페이스를 정의 할 때 유용하다. 추상 클래스는 추상 메서드를 가질 수 있다. 아래 예제를 보자.

Implicit interfaces

모든 클래스는 암묵적으로 인터페이스를 정의 할 수 있다. 만일 A 클래스가 B의 구현체를 상속받지 않고 B의 API만을 사용하고 싶다면 implements 키워드를 사용해야 한다.

참고