BackEnd/Design Patterens14 [Design Patterns] Compound Pattern : 컴파운드 패턴 Compound Pattern 이란? 일련의 패턴을 함께 사용하여 다양한 디자인 문제를 해결하는 것을 컴파운드 패턴 이라고 부릅니다. 다만 패턴 몇개를 결합해서 쓴다고 무조건 컴파운드 패턴이 되는 것은 아닙니다. 컴파운드 패턴이라면 여러가지 문제를 해결하기 위한 용도로 쓰일수 있는 일반적인 해결책이여야 합니다. 패턴 소개 Compound Pattern의 대표적인 예인 MVC 패턴에 대하여 글을 작성하였습니다. 함께 보실까요? iTunes같은 MP3 플레이어를 사용한다고 해봅시다. 소프트웨어 에서 제공해주는 인터페이스를 사용하여 새로운 노래를 추가하거나 재생목록을 관리하거나 트랙 이름을 바꿀 수 있습니다. 다양한 데이터가 들어있는 DB는 그 소프트웨어에서 알아서 관리해 줍니다. 곡을 재생하고, 재생중인 곡.. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] Proxy Pattern : 프록시 패턴 Proxy Pattern 이란? Proxy Pattern - 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴 위의 정의에서 접근을 제어하는 프록시는 어떤 것 일까요? 아래에서 배울 뽑기 기계의 경우 프록시가 원격 객체에 대한 접근을 제어하고 있다고 생각하면 됩니다. 원격 프록시가 접근을 제어해서 네트워크 관련사항들을 챙겨줬다 할 수 이는거죠. 대표적인 접근을 제어하는 방법을 알아봅시다. ▶ 원격 프록시를 써서 원격 객체에 대한 접근을 제어할 수 있습니다. ▶ 가상 프록시를 써서 생성하기 힘든 자원에 대한 접근을 제어할 수 있습니다. ▶ 보호 프록시를 써서 접근 권한이 필요한 자원에 대한 접근을 제어할 수 있습니다. 클래스 다이어그램도 한번 살펴볼까요? Pr.. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] State Pattern : 스테이트 패턴 State Pattern 이란? State Pattern - 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다. 이 패턴에서는 상태를 별도의 클래스로 캡슐화한 다음 현재 상태를 나타내는 객체에게 행동을 위임하기 때문에, 내부 상태가 바뀜에 따라서 행동이 달라지게 된다는 것을 알 수 있습니다. "클래스가 바뀌는 것과 같은" 결과를 얻는다는 것이 어떠한 의미일까요? 클라이언트 입장에서 생각해봅시다! 만약 클라이언트가 사용중이던 객체의 행동이 완전히 달라진다면 마치 다른 클래스로부터 만들어진 객체처럼 느껴지겠죠? 물론 실제로 바뀌는 것은 아니고 여러 상태객체를 바꿔가면서 사용하는 방식입니다. Context라는 클래스에는 여러가지.. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] Composite Pattern : 컴포지트 패턴 Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Composite Pattern 이란? Composite Pattern - 객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만들 수 있습니다. 이 패턴을 이용하면 Client에서 개별 객체와 다른 객체들로 구성된 복합객체(composite)를 똑같은 방법으로 다룰 수 있게됩니다. 패턴 소개 다음과 같이 Iterator 를 활용하여 메뉴를 출력하는 코드가 있다고 해봅시다. 이 코드들은 이전 글인 Iterator 에서 나왔던 코드들 입니다. 기억 하시죠? import java.util.Iterator; public class Waitress { Menu pancakeHou.. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] Iterator Pattern : 이터레이터 패턴 Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Iterator Pattern 이란? Iterator Pattern - 컬랙션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공 이 패턴을 사용하면 컬랙션 내부에서 어떤 방식으로 일처리가 되는지 전혀 모르는 상태에서 그 안의 모든 원소들에 접근할 수 있게됩니다. 컬랙션 객체안에 들어있는 모든 원소들에 대한 접근방식이 공통되어있다면 어떤 종류의 컬랙션 에서도 사용할 수 있는 다형적인 코드를 만들 수 있기 때문이죠! 또한 반복자(Iterator)를 활용하면 모든 항목에 접근하는 일을 컬랙션 객체가 아닌 반복자 객체에 책임을 위임한게.. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] Template Method Pattern : 템플릿 메소드 패턴 Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Template Method Pattern 이란? " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 Template Method Pattern - 메소드에서 알고리즘의 골격을 정의합니다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있습니다. 이 패턴은 일련의 단계들(메소드들의 순서) 로 알고리즘을 정의한 메소드 입니다. 메소드들을 어떤 순서로 호출하는지가 알고리즘이라 할 수 있겠습니다! 여러 알고리즘의 단계(메소드) 가운데 하나 .. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] Facade Pattern : 퍼사드 패턴 Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Facade Pattern 이란? Facade Pattern - 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드에서 고수준 인터페이스를 정의하기때문에 서브시스템을 더 쉽게 사용할 수 있습니다. 퍼사드 패턴에서는 인터페이스를 단순화 시키기위해 인터페이스를 변경합니다! 하나 이상의 복잡한 인터페이스를 깔끔하게 퍼사드 로 덮어주거든요! 더 나아가 쉽게 사용할수 있도록 도와준답니다. 다음 다이어그램을 함께 확인해 보시죠! 클라이언트가 퍼사드 덕분에 정말 편하게 서브시스템들을 사용하고 있군요! 패턴 소개 다음과 같이 클래스들이 서로 복잡하게 얽혀있고, 사용할려.. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] Adapter Pattern : 어댑터 패턴 Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Adapter Pattern 이란? Adapter Pattern - 클래스의 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다. 인터페이스가 호환되지 않아 사용하지 못하던 클래스들을 사용할 수 있게 해 줍니다. 어떤 프로그램이 있는데, 새로운 업체에서 제공하는 기능을 사용할려고 한다 해봅시다. 하지만 기존 프로그램의 인터페이스와 새로 제공된 클래스의 인터페이스가 일치하지 않아 사용에 어려움이 있습니다. 이럴때 필요한 것 이 Adapter 입니다! 어댑터를 사용하면 기존시스템에서의 요청이 어댑터를 통해 변환되어 새로 업체에서 제공한 클래스에서 요청을 받아들일 수 있도록 변환.. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] Command Pattern : 커맨드 패턴 Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Command Pattern 이란? 커맨드 패턴 - 커맨드 패턴을 이용하면 요구사항을 객체로 캡슐화 할 수 있으며, 매개변수를 사용하여 다양한 요구사항을 전달할 수 있게됩니다. 또한 요청 내용을 큐에 저장하거나 로그로 기록할수도 있으며, 작업되돌리기 또한 가능합니다. 우선 커맨드 패턴의 개념부터 알아봐야 겠죠? 코드보기 전에 간단한 이야기 먼저 들려드리죠~ 식당에서 음식을 주문한다고 해봅시다. 주문과정을 요약하면 다음과 같을 것 입니다! 1) 고객이 종업원에게 주문을 합니다. 2) 종업원이 주문을 받고 주방에 주문을 전달합니다. 3) 주방장이 주문대로 음식을 준비합니다 이 과정을 조금.. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] Singleton Pattern : 싱글턴 패턴 Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Singleton Pattern 이란? 싱글턴 패턴은 간단히 말하면 특정 클래스에 대해서 객체 인스턴스를 하나만 만드는 패턴입니다. 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다. 또한 이 패턴을 이용하면 필요할때만 객체를 만들어 사용하기 때문에 자원낭비를 막을 수 있습니다. 우선 간단한 구조를 살펴봅시다! 이 말이 무슨 의미인지 다음 단락부터 예시를 통하여 설명해 보겠습니다! 패턴 소개 우선 고전적인 싱글턴 패턴은 다음과 같습니다. public class Singleton { private static Singleton uniqueInstance; // Single.. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] Factory Pattern : 팩토리 패턴 Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Factory Pattern 이란? " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 1) 팩토리 메소드 패턴 객체를 생성하기 위한 인터페이스 정의하는데, 어떤 클래스의 인스턴스를 만드는지는 서브클래스에서 결정하게 만듭니다. 이 패턴을 사용하면 클래스의 인스턴스를 만드는 일을 서브클래스에서 책임지는 것입니다. 위의 다이어그램을 보면 Creator에는 제품을 갖고 원하는 일을 하기 위한 메소드 들이 구현되어 있습니다. 하지만 제품을 만들어주는 FactoryMethod()는 추상 메소드로 정의되어 있을 뿐 구현되어 있지는 않습니다. 따라서 모든 서브클래스 에.. BackEnd/Design Patterens 2022. 1. 13. [Design Patterns] Decorator Pattern : 데코레이터 패턴 Head First Design Patterns 책을 읽으며 정리한 내용 입니다. 문제가 될시 글을 내리도록 하겠습니다! Decorator Pattern 이란? Decorator Pattern - 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 방식을 통하여 유연하게 확장하는 방법을 제공한다. 커피 한잔을 주문할때 단순 커피만이 아닌 모카시럽, 휘핑크림 등 을 추가하고 싶을 수 있습니다. 데코레이터 패턴 에서는 우선 커피 객체를 만들고, 이 만들어진 커피 객체를 Mocha 객체로 감싸고, 다시 이 모카커피 객체를 휘핑크림 객체로 감싸면서 Wrapper 형태로 만들어 집니다. 다음 그림과 같이 말이죠! 이제 커피의 가격을 측정하고 싶다면 가장 외각의 Whip 객체의 Cost() .. BackEnd/Design Patterens 2022. 1. 12. 이전 1 2 다음