Query Method ¶
객체의 속성을 테스트하려면 어떻게 할것인가? 두 가지를 결정해야 한다. 첫째는 무엇을 리턴할 것인가이고, 둘째는 이름을 어떻게 짓느냐다.
~cpp class Switch { private: string status; /* ... */ public: void makeOn() { status = "on"; } void makeOff() { status = "off"; } string& getStatus() { return status; } /* ... */ }; class Light { /* ... */ void makeOn() { /* ... */ } }; class WallPlate { private: Switch* switch; Light* light; /* ... */ public: /* ... */ void update() { if( switch->getStatus() == "on" ) light->makeOn(); else if( switch->getStatus() == "off" ) light->makeOff(); } };
이것은 두 객체 중에 하나를 리턴하는 방법이다. 딱 보기에도 뭔가 찝찝해 보인다. 하지만 이 방법은 클라이언트로 하여금 Switch가 상태를 어떻게 저장하고 있는지 알아야만 하게 해준다.
이를 해결해기 위해, 하나의 메세지 - Boolean을 리턴하는 - 에다가 처리하는 방법이 있다.
~cpp class Switch { private: bool status; /* ... */ public: bool isOn() { return status; } /* ... */ }; class Light { /* ... */ void makeOn() { /* ... */ } }; class WallPlate { private: Switch* switch; Light* light; /* ... */ public: /* ... */ void update() { if ( switch->isOn() ) light->makeOn(); else light->makeOff(); } };
Boolean을 리턴하는 메소드를 만들고, 이름은 접두사에 be동사의 여러 형태를 적어준다.(is,was...)
See Also ReplaceTempWithQuery