Dart는 클래스와 mixin 기반 상속을 지원하는 객체지향언어입니다. 모든 객체는 클래스의 인스턴스이고, Null을 제외한 클래스는 모두 Object에서 비롯합니다. Mixin 기반 상속이란 말은, 모든 클래스가 하나의 부모 클래스를 가지고 있지만 (최상위 클래스인 Object를 제외한) 클래스의 바디는 다양한 클래스 계층에서 재사용 될 수 있음을 의미합니다. 확장 메서드는 서브 클래스를 생성하거나, 클래스를 바꾸지 않고 클래스에 기능을 추가하는 방법입니다. 클래스 제어자를 사용하여 라이브러리가 클래스를 서브타입하는 방법을 제어할 수 있습니다.
객체들은 함수와 데이터 (각각 메서드, 인스턴스 변수)로 이루어진 멤버를 가집니다. 메서드를 호출 할 때, 객체에서 함수를 호출합니다: 메서드는 해당 객체의 함수와 데이터에 접근 할 수 있습니다.
점 (.
)을 사용하여 인스턴스 변수나, 메서드를 사용한다.
var p = Point(2, 2);
// y의 값을 얻음.
assert(p.y == 2);
// p의 distanceTo() 메서드 호출.
double distance = p.distanceTo(Point(4, 4));
만약 왼쪽 피연산자가 null 일 수도 있다면, .
대신 ?.
을 사용한다.
// p가 non-null이라면, a의 값을 p의 y의 값으로 설정합니다.
var a = p?.y;
클래스명 | 필드명 | 메소드명 |
---|---|---|
명사 | 단어의 맨 처음은 대문자 (pascal) | Hero, MonsterInfo |
명사 | 최초 이외의 단어의 맨 처음은 대문자 (camel) | level, items, itemList |
동사 | 최초 이외의 단어의 맨 처음은 대문자 (camel) | attack, findWeakPoint |
생성자를 사용하여 객체를 생성 할 수 있습니다. 생성자의 이름은 ClassName 또는 ClassName.identifier가 될 수 있습니다. 예를 들면, 다음의 예제에서 Point 객체를 Point()와 Point.fromJson() 생성자를 사용하여 생성합니다.
var p1 = Point(2, 2);
var p2 = Point.fromJson({'x': 1, 'y': 2});
//다음 코드는 같은 결과를 생성하지만, 생성자 이름에 선택적인 키워드인 new를 사용하였다.
var p1 = new Point(2, 2);
var p2 = new Point.fromJson({'x': 1, 'y': 2});
몇몇 클래스는 상수 생성자를 제공한다. 상수 생성자를 사용하여 컴파일 타임 상수를 생성하고 싶다면, 생성자 이름 앞에 const
를 사용하면된다.
var p = const ImmutablePoint(2, 2);
// 두개의 동일한 컴파일 타임 상수를 생성하는 것은, 하나의 동일한 인스턴스를 생성
var a = const ImmutablePoint(1, 1);
var b = const ImmutablePoint(1, 1);
assert(identical(a, b)); // 둘은 같은 인스턴스입니다!
//다음 코드는 같은 결과를 생성하지만, 생성자 이름에 선택적인 키워드인 new를 사용하였다.
var p1 = new Point(2, 2);
var p2 = new Point.fromJson({'x': 1, 'y': 2});
상수 컨텍스트 (constant context) 안에서, 생성자나 리터럴 뒤의 const
는 생략이 가능하다.
// 불필요한 const 키워드가 많습니다.
const pointAndLine = const {
'point': const [const ImmutablePoint(0, 0)],
'line': const [const ImmutablePoint(1, 10), const ImmutablePoint(-2, 11)],
};
// 상수 컨텍스트를 만들어주는 하나의 const만 사용하면 됩니다.
const pointAndLine = {
'point': [ImmutablePoint(0, 0)],
'line': [ImmutablePoint(1, 10), ImmutablePoint(-2, 11)],
};
상수 생성자가 상수 컨텍스트의 밖에 존재하고 const
없이 호출되면, 상수가 아닌 객체 (non-constant object) 가 생성된다.
var a = const ImmutablePoint(1, 1); // 상수를 생성합니다
var b = ImmutablePoint(1, 1); // 상수를 생성하지 않습니다.
assert(!identical(a, b)); // 둘은 같은 인스턴스가 아닙니다!
런타임에서 객체의 타입을 얻고 싶다면, Type 객체를 반환하는 Object의 프로퍼티인 runtimeType을 사용하세요.
print('The type of a is ${a.runtimeType}');
객체의 타입을 테스트하려면, runtimeType
대신 타입 테스트 연산자를 사용하기를 권장한다. 프로덕션 환경에서, object is Type
테스트가 object.runtimeType == Type
테스트 보다 더 안전하다.