Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

IndirectVariableAccess

From ZeroWiki

Indirect Variable Access

인스턴스 변수의 값을 어떻게 얻어오고 어떻게 셋팅해 줄 것인가?


대부분은 DirectVariableAccess를 사용하면 거의 문제가 없다. 하지만, 각각의 값이 제대로 된것이라는 전제가 되어 있어야 한다. 또한 상속이 될 거 같을때에, DirectVariableAccess는 기능을 바꿔 줄수 없다.


해결책은 항상 getting/setting 메소드를 사용하는 것이다. 즉, 이 대신에,

Point Point::operator+(const Point& aPoint)
{
	return Point(x+aPoint.getX(),y+aPoint.getY());
}

이렇게 쓰자는 것이다.

Point Point::operator+(const Point& aPoint)
{
	return Point(getX()+aPoint.getX(),getY()+aPoint.getY());
}

IndirectVariableAccess를 사용함으로써, 가독성과 단순함을 포기해야 한다.


인스턴스 변수의 접근과 셋팅에 getting method와 setting method를 사용하자.


Point가 있다.

float Point::getX()
{
	return x;
}
float Point::setX(float aNumber)
{
	x = aNumber;
}

상속받은 PolarPoint를 만들고 싶다. x의 값을 얻어올때 재정의를 해주고 싶다.

float PolarPoint::getX()
{
	return radius * cos(theta);
}

두 가지 방법을 혼용해서 쓰지 말자. 한 가지만 확실하게 쓰자.


인수군이 알카노이드를 만들때, 바의 위치를 셋팅해 줄때가 있었다. left, top, right, bottom 이라는 변수를 가지고 있었는데, right는 항상 left + width의 값이 되어야만 했다. 즉 left = ~, right = ~이래야 했었는데, setLeft()안에 left = ~ , right = left + width 이렇게 쓰는 것으로 해결을 봤었다.


위의 예제의 경우는 자기 자신의 멤버를 호출하는 것인지라 바로 매핑되는 예는 아닌 듯. 다른 클래스에서 해당 클래스의 멤버를 사용하는 예제가 좋을듯 한데. --[1002]


SBPPSummary