• 카테고리

    질문 & 답변
  • 세부 분야

    기타 (개발 · 프로그래밍)

  • 해결 여부

    미해결

설계관련 궁금증이 있습니다.

22.08.19 23:58 작성 조회수 134

0

안녕하세요 선생님 강의 잘 보고있습니다.
비지터 패턴 관련하여 앞선 강의에서 설명해준 내용을 듣고 먼저 구현을 해봤는데요. 저는 클라이언트에서 디바이스의 존재를 모른채로 사용하게 하고 싶어서 Shape 인터페이스에서
void printToPhone();
void printToWatch();
이라는 각각의 인터페이스를 만든 뒤에 각 도형의 자식 클래스에
@Override
public void printToPhone() {
device = new Phone();
device.printTo(this);
}

@Override
public void printToWatch() {
device = new Watch();
device.printTo(this);
}

이런식으로 처리한 뒤에 클라이언트에선
Shape rectangle = new Rectangle();
Shape triangle = new Triangle();

rectangle.printToPhone();
rectangle.printToWatch();
triangle.printToPhone();
triangle.printToWatch();
요런식으로 처리하였습니다.
이후 강의를 듣고난 뒤 새로운 디바이스가 생성될 때마다 수정해야 할 클래스가
훨씬 많아진다는 단점이 있다는걸 인지했지만 클라이언트 입장에선 디바이스의 존재를 몰라도
사용할 수 있는 장점이 있는데 이걸 어떤 기준으로 트레이드오프 해야할 지 여쭤보고 싶습니다.
좋은 강의 감사합니다.

 

답변 1

답변을 작성해보세요.

0

음.. "클라이언트가 디바이스의 존재를 몰라"라는 부분이 핵심인것 같은데요. 과연... 모르는게 맞나요? printPhone() printWatch()라는 메서드를 클라이언트 입장에서 선택하는 순간.. 구체적으로 Phone이나 Watch라는 클래스를 참조하는 건 아니지만 이미 어떤 디바이스를 쓸지 클라이언트는 알고 있는 것 아닐까요?

설계를 변경할 때 (즉 어떤 새로운 디바이스를 추가한다거나.. 디바이스가 바뀐다거나..) 코드의 변경이 적고, 쉽다면 잘 설계했다고 말할 수 있곘죠. 예를 들어 변경해 보면서 어떤 변경이 생기는지 직접 경험하다보면 적절한 방법을 찾으실 수 있을 것 같습니다.