객체의 속성을 테스트하려면 어떻게 할것인가? 두 가지를 결정해야 한다. 첫째는 무엇을 리턴할 것인가이고, 둘째는 이름을 어떻게 짓느냐다.
~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...)