E D R , A S I H C RSS

Query Method

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...)


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0939 sec