No older revisions available
No older revisions available
Indirect Variable Access ¶
인스턴스 변수의 값을 어떻게 얻어오고 어떻게 셋팅해 줄 것인가?
대부분은 DirectVariableAccess를 사용하면 거의 문제가 없다. 하지만, 각각의 값이 제대로 된것이라는 전제가 되어 있어야 한다. 또한 상속이 될 거 같을때에, DirectVariableAccess는 기능을 바꿔 줄수 없다.
해결책은 항상 getting/setting 메소드를 사용하는 것이다. 즉,
이 대신에,
이 대신에,
~cpp Point Point::operator+(const Point& aPoint) { return Point(x+aPoint.getX(),y+aPoint.getY()); }이렇게 쓰자는 것이다.
~cpp Point Point::operator+(const Point& aPoint) { return Point(getX()+aPoint.getX(),getY()+aPoint.getY()); }
IndirectVariableAccess를 사용함으로써, 가독성과 단순함을 포기해야 한다.
인스턴스 변수의 접근과 셋팅에 getting method와 setting method를 사용하자.
Point가 있다.
~cpp float Point::getX() { return x; } float Point::setX(float aNumber) { x = aNumber; }상속받은 PolarPoint를 만들고 싶다. x의 값을 얻어올때 재정의를 해주고 싶다.
~cpp float PolarPoint::getX() { return radius * cos(theta); }
두 가지 방법을 혼용해서 쓰지 말자. 한 가지만 확실하게 쓰자.
인수군이 알카노이드를 만들때, 바의 위치를 셋팅해 줄때가 있었다. left, top, right, bottom 이라는 변수를 가지고 있었는데, right는 항상 left + width의 값이 되어야만 했다. 즉 left = ~, right = ~이래야 했었는데, setLeft()안에 left = ~ , right = left + width 이렇게 쓰는 것으로 해결을 봤었다.
위의 예제의 경우는 자기 자신의 멤버를 호출하는 것인지라 바로 매핑되는 예는 아닌 듯. 다른 클래스에서 해당 클래스의 멤버를 사용하는 예제가 좋을듯 한데. --1002