brunch

You can make anything
by writing

C.S.Lewis

by 서준수 Mar 08. 2020

다트 생성자 (Constructor) (2/2)

플러터를 위한 다트 프로그래밍

다트의 생성자 (2/2)

이전 글에 이어서 다음 세 가지 생성자에 대해서 알아본다.


리다이렉팅 생성자(Redirecting constructor)

상수 생성자(Constant constructor)

팩토리 생성자(Factory constructor)



4) 리다이렉팅 생성자

초기화 리스트를 약간 응용하면 단순히 리다이렉팅을 위한 생성자를 만들 수 있다. 이러한 생성자는 본체가 비어있고 메인 생성자에게 위임(delegate)하는 역할을 한다.


다음 예제를 보면 이름 있는 생성자인 Person.initName(String name) 본체가 없고 초기화 리스트에 this(name, 20)라고 되어 있다.

this는 현재 인스턴스를 가리키는데 여기서 this(name, 20)는 현재 인스턴스의 생성자인 Person(this.name, this.age)이 된다. 따라서 Person.initName('Kim') 호출 시 Person(this.name, this.age)의 인자로 Person.initName('Kim')에서 받은 Kim과 20이 할당된다. (Person()의 인자에서 쓰인 this.name는 현재 인스턴스의 name을 의미한다.)


5) 상수 생성자

상수 생성자는 말 그대로 생성자를 상수처럼 만들어 준다. 이 말은 해당 클래스가 상수처럼 변하지 않는 객체를 생성한다는 것이다. 상수 생성자를 만들기 위해서는 인스턴스 변수가 모두 final이어야 한다. 또한 생성자는 const 키워드가 붙어야 한다.


다음 예제를 보면 Person 클래스 내에 인스턴스 변수에 final 키워드가 선언되어 있다. 또한 Person() 생성자는 const 키워드가 붙어있다. 상수 생성자를 만들기 위한 조건을 모두 갖춘 것이다.

print()에서 사용된 identical()은 같은 인스턴스인지 비교해준다. person1과 person2는 상수 생성자를 참조하고 있다. 따라서 동일한 인스턴스를 참조하고 있기 때문에 true가 된다. 그러나 person3과 person4는 각각 새로운 인스턴스를 생성했기 때문에 동일한 인스턴스를 가지지 않는다.


그림으로 표현하면 다음과 같다.



6) 팩토리 생성자

팩토리 생성자는 팩토리 패턴을 사용하기 편리하다. 팩토리 패턴을 사용하면 해당 클래스의 인스턴스를 매번 생성하지 않아도 된다. 보통 자식 클래스의 인스턴스를 리턴 받는다.

팩토리 패턴의 개념을 알아야 팩토리 생성자를 이해할 수 있다. 대략 위의 예제처럼 Person 클래스의 그 자체 인스턴스 생성 대신 자식 클래스인 Student 클래스와 Employee 클래스의 인스턴스를 리턴 받는다. 인스턴스 생성을 자식 클래스에게 위임한 것이다. 아무튼 이런 팩토리 패턴을 사용할 때 유용하도록 다트가 자체적으로 제공하는 것이 팩토리 생성자이다. (무책임한 결론)

이전 09화 다트 생성자 (Constructor) (1/2)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari