#cpp using 선언으로 부모 클래스 protected를 자식 클래스에서 public으로 호출

class CCAImage
{
protected:
    void SetSnapRegion(int x, int y, int dx, int dy);
};

class TestingCCAImage : public CCAImage
{
public:
    using CCAImage::SetSnapRegion;
};

using 선언(declaration)으로 부모 클래스의 protected 멤버 함수를 자식 클래스에서 public 접근 권한으로 호출할 수 있게 하는 기법이다.

접근 권한을 자식 클래스에서 변경하기 때문에 께름칙하나 클래스의 private 멤버 함수를 테스트할 때 유용하게 사용된다. 그 외에는 딱히 쓸 곳도 생각나지 않고 접근 권한을 바꾸는 게 위험해 보인다. 테스트할 때만 조심조심 사용하자.

private 멤버 함수 테스트는 접근 권한을 protected로 변경하고 테스트 코드에서 상속받은 테스트 클래스의 public 멤버 함수를 호출해서 진행한다. 이 public 멤버 함수에서 부모의 protected 함수를 호출해야 하는데, 이 using 선언을 사용하면 타이핑 노가다를 줄일 수 있다.

class TestingCCAImage : public CCAImage
{
public:
    void SetSnapRegion(int x, int y, int dx, int dy)
    {
        CCAImage::SetSnapRegion(x, y, dx, dy);
    }
};

using 선언을 사용해 자동으로 delegation을 하지 않는다면 이렇게 호출해야 한다. 어휴~ 난 이제껏 몰라서 이렇게 하고 있었다. 그래도 유닛 테스트를 시작한 지 얼마 안 됐으니 위안 삼자.

그나저나 이렇게 protected 멤버 함수를 호출하는 것을 가리키는 idiom이 있을까 해서 찾아봤는데 없더라. 있으면 검색하기도 쉽고 부르기도 좋은데 말이다.

Working Effectively with Legacy Code책에서 배운 테크닉이다.


크리에이티브 커먼즈 라이선스
Feedback plz <3 @ohyecloudy, ohyecloudy@gmail.com
|