package lcds.examples.bookie.model { ... [Bindable] public class BookieModel implements ModelLocator {이 모델은 ModelLocator를 구현하는데, ModelLocator 인터페이스는 단순히 구현해야 할 메서드가 지정되어 있지 않음을 뜻하는 마커 인터페이스(marker interface)이며 해당 클래스가 어떤 타입인지를 표시하는 역할만 한다. 주의할 점은 클래스도 여느 ActionScript DTO와 같이 [Bindable] 메타 데이터 태그로 어노테이션이 지정되어 있다는 것이다. 이것은 모델의 공개 프로퍼티는 모두 Flex의 바인딩 프레임워크에서 사용할 수 있음을 의미한다.
... private static var instance:BookieModel; //상태 public static const SIGNED_OUT:String = "SIGNED_OUT"; public static const SIGNED_IN:String = "SIGNED_IN"; public static const BOOKS_CHOSEN:String = "BOOKS_CHOSEN"; public var currentState:String = SIGNED_OUT; public var books:ArrayCollection = new ArrayCollection(); public var authors:ArrayCollection = new ArrayCollection(); public var subjects:ArrayCollection = new ArrayCollection(); public var booksToReserve:ArrayCollection = new ArrayCollection(); public var user:Person; public var loginFailedMessage:String = ""; ..."상태"라는 주석 아래에는 index.mxml라는 Application 뷰의 상태를 제어하는데 사용할 세 개의 고유 문자열 상수가 나열되어 있다. 언제라도 currentState는 이 세 가지 상수 값 중 하나로 설정할 수 있으며 나중에 애플리케이션에서 상태를 정의하는데 이 상수를 어떻게 사용하는지 살펴볼 것이다.
... public static function getInstance():BookieModel { if (instance == null) instance = new BookieModel(new ModelInitializer()); return instance; } public function BookieModel(initializer:ModelInitializer) { } ... } } class ModelInitializer {}먼저 단일 인스턴스를 반환하는 정적 접근자 메서드를 볼 수 있는데, 이 메서드는 단일 인스턴스가 이미 존재하지 않을 경우 인스턴스를 생성한다. 현재 자바를 비롯하여 생성자를 private으로 만들 수 있는 언어에서는 앞서 설명한 대로 코드를 작성하여 어떤 클래스의 인스턴스를 그 클래스에서만 인스턴스화할 수 있도록 싱글톤 패턴을 적용할 수 있다. 클래스 안의 패키지 블록 바로 아래에서는 ModelInitializer라는 이름의 또 다른 클래스를 정의하고 있는데, 이 클래스는 같은 파일 안에 있지만 패키지 바깥에 위치한 까닭에 모델 클래스에서만 볼 수 있다. 이 같은 방식으로 우리는 다시 한번 모델 클래스만이 자기 자신을 인스턴스화할 수 있게 보장할 수 있다.
... public function initialize():void { books = new ArrayCollection(); authors = new ArrayCollection(); subjects = new ArrayCollection(); booksToReserve = new ArrayCollection(); user = null; loginFailedMessage = ""; } public function getReservedTillDate(reservedOn:Date):Date { var millisecondsPerWeek:int = 1000 * 60 * 60 * 24 * 7; // 책을 2주 동안 대여함 var reservedTill:Date = new Date(reservedOn.getTime() + (2*millisecondsPerWeek)); return reservedTill; } ...다음으로 몇몇 도우미 메서드를 볼 수 있는데, 하나는 모델에서 보관하고 있던 데이터를 모두 제거하여 모델을 초기화하는 것이며, 또 다른 하나는 책을 대여할 때 대여 기간을 "~까지 대여"로 사용하도록 2주 후의 시간을 계산하는 것이다.
최신 콘텐츠