Explicit Initialization ¶
인스턴스 변수들을 어떻게 디폴트값으로 초기화시켜주는가?
초기화에 대해서는 딱히 정해진 좋은 방법이 없다.(상황에 따라 택일해서 쓰라는 말) 이 패턴은 유연성보다는 가독성을 중시한다. 모든 초기화를 하나의 메소드에 때려넣는 방법이다. 유연성은 떨어질 수 밖에 없다. 변수 하나 추가하자면 ExplicitInitialization 메소드를 수정해야만 한다는 것을 기억하고 있어야 하기 때문이다. ExplicitInitialization은 LazyInitialization보다 비용이 많이 든다. 모든 변수를 인스턴스가 생성될때 초기화 하기 때문이다.
모든 변수들을 명시적으로 설정해주는 initialize메소드를 구현하라. new메세지를 오버라이딩해서 새로운 인스턴스에 맞게 하라.
1000 밀리세컨드마다 실행되는 타이머를 생각해보자. 이 타이머는 얼마나 많은 시간이 지나갔나도 기억하고 있다.
~cpp Class Timer { /* ... */ void initialize() { count = 0; period = defaultMillisecondPeriod(); // C++/JAVA에서는 그냥 상수로 써도 될듯하다. } int defaultMillisecondPeriod() { return 1000; } Timer() { initialize(); } };