Design Pattern 8

[Design Pattern] Facade Pattern

이번에는 Facade Pattern 에 대해서 알아봅시다. Facade Pattern 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있습니다. 이번에는 바로 디자인 원칙도 살펴보겠습니다. "최소 지식 원칙" 입니다. 객체 사이의 상호작용은 될 수 있으면 아주 가까운 사이에서만 허용하라는 원칙입니다. 퍼사드 패턴은 단순화된 인터페이스를 통해서 서브시스템을 더 쉽게 사용할 수 있도록 하기 위한 용도로 쓰입니다. 위의 예시에서 클라이언트는 HomeTheaterFacade 하나에만 상호작용을 하고 있습니다 (최소 지식 원칙) HomeTheaterFacade 는 클라이언트 대신 모든 서브시스템 구성요소를 관리해주..

[Design Pattern] Adapter Pattern

어댑터 패턴에 대해서 알아보겠습니다. 이번에는 코드를 예제로 보여드리지는 않을건데요, 개념 자체가 어렵다고 생각되지는 않는 패턴입니다. Adapter Pattern 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다. 책에서 이렇게 설명을 하고 있는데요, 그림을 보면 이해가 바로 됩니다. 흔히 저희가 해외 여행갈 때 콘센트가 안맞아서 그걸 변환하기 위해 가져가는 것도 어댑터라고 표현을 합니다. 이렇게 중간에서 모양을 맞춰주는 것을 어댑터라고 표현하고, 이것이 객체지향 코드에서는 어떤 인터페이스를 클라이언트에서 요구하는 형태의 인터페이스에 적응히켜주는 역할을 하게 됩니다...

[Design Pattern] Command Pattern

이번에는 커맨드 패턴입니다. Command Pattern 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러가지 다른 요구 사항을 집어넣을 수도 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업 취소 기능도 지원 가능하다. 먼저 다이어그램을 보면서 어떤 모양일지 얘기해보겠습니다. 이제 디자인 패턴을 1/3 정도 보다보니, 인터페이스를 잘 활용하는 것이 중요하다고 생각이 듭니다. 캡슐화하거나 추상화하거나 감싸거나 하는 것들에 인터페이스가 들어가거나 혹은 구성을 이용한다거나 하는 것 같습니다. 앞으로는 바로 다이어그램을 보면서 어떤 모양일지 추리해보는 것도 좋은 공부방법이 아닐까 하는 생각이 드네요 🤔 다이어그램을 보겠습니다. Client 는 Co..

[Design Pattern] Singleton Pattern

이번에는 굉장히 많이 듣게 되는 패턴인, 싱글턴 패턴입니다. 너무 많이 들었던 패턴이고, Spring 을 공부하다 보면 자연스레 듣게 되는 패턴입니다. Singleton Pattern 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴 싱글턴 패턴 자체의 정의는 어렵지 않습니다. 다만 구현방법과 왜 필요한지에 대해서 고민을 해봐야 한다고 생각합니다. Spring 을 공부할때도 빈의 기본 스코프가 싱글턴이라는 것은 배우지만 정작 싱글턴이 무엇인지는 관심을 가지고 찾아보지 않으면 그냥 인스턴스가 하나만 만들어지는 구나 하고 넘어갈 수 있습니다. 먼저, 인스턴스를 하나만 만든다는 정의를 기준으로 고전적인 구현법을 보겠습니다. public cla..

[Design Pattern] Abstract Factory Pattern

이전 글에 이어서 팩토리 패턴 중 추상 팩토리 패턴에 대해서 학습하겠습니다. Abstract Factory Pattern 추상 팩토리 패턴에서는 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성한다. 팩토리 메소드 패턴을 공부하면서 피자가게 예를 들었었는데요, 추상 팩토리 패턴을 이해하기 위해서 같은 예시로 이어가보겠습니다. 이제는 원재료의 품질을 관리하고 싶다는 요구사항이 들어왔습니다. 근데 뉴욕 스타일과 시카고 스타일의 재료는 또 다르겠죠. 이런 것들을 어떻게 해결 할 수 있을지 보겠습니다. 좀 복잡한 모양이 되었습니다. 이 다이어그램에 대해서 설명을 해보면 PizzaIngredientFactory 는 서로 관련된 제품군을 만드는 방법을 정의하기 위한 인터페..

[Design Pattern] Factory Method Pattern

이번에는 팩토리 메소드 패턴에 대해서 학습하겠습니다. Factory Method Pattern 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만든다. 우리는 객체를 만들때 new 를 사용해왔습니다. 그런데 new 를 사용해서 인스턴스를 생성하면 결국은 특정 구현을 이용한다는 뜻이기도 합니다. new 에 문제가 있는 것은 아니지만 특정 객체를 만드는 형태여서 수정이 일어난다면 고쳐야 하는 코드가 계속해서 생기게 될 것이고, OCP 원칙을 위배할 가능성이 높아집니다. 책에 있는 피자 가게 예시로 어떤 패턴인지 알아보겠습니다. 위의 다이어그램만 보아도 구조가 다 보여서 굳이 코드를 작성하진 않겠습니다. Pizza 인터페이스를 구..

[Design Pattern] Decorator Pattern

헤드퍼스트의 Design Pattern 중 세번째, Decorator Pattern 입니다. Decorator Pattern 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. Decorator Pattern 에 대한 정의입니다. 하지만 이 내용을 보면 코드가 어떻게 생겼는지 감을 잡기가 어렵습니다. 책의 예제를 보면서 패턴을 설명해보겠습니다. 먼저, 패턴이 적용되지 않은 예제에서 문제점을 살펴보겠습니다. 위의 설계에서 Beverage는 음료를 나타내는 추상 클래스이고, 커피샵에서 판매되는 모든 음료는 이 클래스의 서브 클래스가 됩니다. 위의 설계에서는 메뉴에 우유, 모카, 휘핑 크림 등이 추가할때마다 커피 가격이 올라..

[Design Pattern] Observer Pattern

헤드퍼스트의 Design Patterns 중 두번째, Observer Pattern 입니다. Observer Pattern 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다. 책에서 정의한 Observer Pattern 입니다. 하지만 이보다 더 중요하게 생각되는 것은 느슨한 결합 (Loose Coupling) 을 설명한 내용이라고 생각이 듭니다. 패턴의 정의를 설명하고 바로 뒤에 이어서 설명을 하고 있는데요, 느슨하게 결합되어 있다는 것은 서로 상호작용을 하지만 서로에 대해서는 잘 모른다는 것을 의미합니다. Observer Pattern 을 학습하면서 이 부분에 대해 생각을 하면 좋을 것 같습니다. 책의 예제를 활용하여 ..