ACC/디자인 패턴 스터디 (7) 썸네일형 리스트형 [디자인 패턴 스터디] 10. 프록시 패턴 프록시 패턴 프록시 서버: 클라이언트와 서버의 통신을 제어하는 대리 서버. 프록시 패턴: 특정 객체로의 접근을 제어하는 대리 객체를 제공하는 패턴. 프록시 패턴의 구조 프록시 패턴은 클라이언트 객체, 서비스 객체, 스텁(프록시 객체), 스켈레톤(서비스 객체쪽 보조 객체)로 이루어진다. 필요성 만약 기존의 모니터링 프로그램이 있었다고 할 때, 이를 원격으로 사용해야 한다면? 물론 서버 개념을 도입해서 아예 코드를 갈아엎을 수도 있겠지만 변경을 최소화할 수 있다. 또한 기존 프록시가 갖는 장점(원격 객체 접근 제어 등)을 프록시 패턴으로 얻을 수 있다. RMI 지금까지의 패턴은 전부 로컬에서 이루어졌지만, 프록시 패턴(원격 프록시)은 로컬에서만 이루어지지 않는다. 애초에 로컬에서 동작하는 것처럼 서버와 데이.. [디자인 패턴 스터디] 7. 어댑터 패턴과 퍼사드 패턴 어댑터 패턴 어댑터: 서로 다른 단자를 연결시켜주는 것. 어댑터 패턴: 특정 인터페이스 혹은 클래스를 타깃 인터페이스로 바꿔주는 것. 어댑터 패턴은 클라이언트, 어댑터와 어댑티, 타깃 인터페이스를 갖는다. 뭐가 어떤 역할인지는 예시로 보자. 어댑터 패턴 예시 1장에서 배운 오리 인터페이스에 칠면조 인터페이스를 적용시켜주고 싶은 경우. ///////////////////////////////////////// 오리 interface interface Duck { public void quack(); public void fly(); } ////////////////////////////////////////// 칠면조 interface interface Turkey { public void gobble().. [디자인 패턴 스터디] 6. 커맨드 패턴 [디자인 패턴 스터디] 5. 싱글턴 패턴 [디자인 패턴 스터디] 4. 팩토리 패턴 세계적으로 유명한 피자 프랜차이즈의 피자 주문 시스템을 만든다고 생각해 보자. 가장 간단한 방법으로는 피자를 주문받는 클래스에서 피자의 종류를 확인하고, 그에 따라 피자를 만들고, 피자를 굽고 자르고 포장하는 식으로 코드를 작성하면 된다. 이렇게 만들면 당연히 문제가 있다. 지난번까지 배운 디자인 패턴에 위배가 되는 부분이 있다. 첫 번째로는 피자의 종류를 확인하고 피자를 만드는 과정에서 인터페이스에 맞춘 코딩이 아닌 구현을 이용하였다는 점이다. 두 번째로는 바뀌는 부분에 대해 캡슐화를 하지 않았다. 피자의 종류를 확인하는 과정은 아마도 ```if (type.equals("cheese pizza")```와 같이 조건문을 이용하여 구현할 수 있을 텐데 만약 피자의 종류가 새로 생기거나 삭제되는 일이 일어나.. [디자인 패턴] 3. 데코레이터 패턴 변경되는 부분에 대해 데코레이터를 이용해 재귀적으로 구성 요소 객체를 Decorate한다면, 기존 코드의 변경 없이 동적으로 확장 할 수 있다. 커피 전문점의 주문을 돕는 프로그램을 작성한다고 생각해보자. 만약 음료를 나타내는 수퍼 클래스 하나를 상속받는 여러 음료들의 서브 클래스를 만들어서 주문을 처리하는 것이 과연 적합할까? 직관적으로 생각해봐도 문제가 있다. 음료들은 시럽, 펄 추가 혹은 무지방 우유, 두유로 변경하는 등의 가공을 거칠 수 있다. 상속을 이용한다면 일반적인 카페 라떼를 하나 구현하기 위해 카페 라떼, 무지방 라떼, 두유 라떼, 시럽 추가 라떼, 오트 라떼 등등 굉장히 많은 서브 클래스를 필요로 하는 것을 알 수 있다. 또한 이전까지 배운 객체 지향 원칙에 어긋나는 방식임을 알 수 있.. [디자인 패턴] 1. Intro 수퍼 클래스를 상속받는 서브 클래스들이 있을 때, 변화하는 부분을 단순 상속으로 처리하지 말고 인터페이스로 캡슐화한다. 변화하는 부분은 해당 캡슐에 위임하면 유지보수가 간편해진다. 여러 오리를 구현하는 코드를 작성한다고 해보자. 수퍼 클래스로 오리를 만들고, 서브 클래스는 청둥오리, 집오리, 고무오리, 나무오리 등이 있을 수 있다. 아직까지는 오리의 울음소리와 떠다니는 기능만 구현되어 있고, 모든 서브 클래스는 이를 상속하고 있다. 만약 날아다니는 기능을 추가하고자 한다면 단순히 수퍼 클래스에 fly라는 메서드를 추가하고 서브 클래스가 상속받으면 끝일까? 답은 당연히 아니다. 고무오리와 나무오리는 날 수 없기 때문이다. 상속은 코드의 재사용성을 높일 수 있지만 위처럼 유지보수에는 별로 좋지 않다. 클래스.. 이전 1 다음