본문 바로가기

디자인 패턴7

행동 패턴 - 명령(Command) https://refactoring.guru/design-patterns/command - GoF의 디자인 패턴 - 명령(Command) 다른 이름으로 작동(Action), 트랜잭션(Transaction) 이라고도 불리우는 패턴이다. 요청을 단일 객체로 캡슐화 해서 메소드 인자로 만들고, 지연시키거나, 되돌릴 수 있는 연산을 지원한다. - 문제점 Text 에디터 app 이 있다고 가정해보자. 에디터의 다양한 기능을 수행하는 버튼과 그 버튼을 이용한 툴바를 만드는 작업을 하고 있다. 다양한 dialog들의 버튼과 툴바에서 사용되는 Button 클래스를 만들었다. 이런 버튼들은 다 비슷하게 생겼지만 모두 다른 버튼이다. 이런 버튼들의 클릭 핸들러들을 위한 코드를 어디에 위치시켜야 할까? 가장 직관적인 해결책.. 2021. 6. 6.
행동 패턴 - 책임 연쇄(Chain of Responsibility) - 출처: https://refactoring.guru/design-patterns/chain-of-responsibility - 출처: GoF의 디자인 패턴 - 책임 연쇄 패턴 메시지를 보내는 객체와 받는 객체의 결합도를 없애기 위한 패턴이다. 어떤 요청을 핸들러들의 체인에 넘기면, 각 핸들러는 해당 요청을 처리할지 다음 핸들러로 넘길지를 결정한다. - 문제점 온라인 주문 시스템을 구축한다고 가정해보자. 많은 기능들이 필요하겠지만 유저에 대한 인증이나, Admin 권한을 가진 사용자의 경우 모든 주문을 조회한다던지 하는 기능들이 필요할것이다. 시스템이 비대해져가면서 비밀번호 brute force 어택을 막기 위한 기능, 요청에 대한 validation, 같은 요청에 대해 cache를 반환하는 기능이 필.. 2021. 5. 30.
구조 패턴 - 퍼사드(Facade) - 참조: GoF의 디자인 패턴 - 참조: https://refactoring.guru/design-patterns/facade - God object: https://en.wikipedia.org/wiki/God_object - 퍼사드(Facade) 패턴 퍼사드(Facade) 는 용어 부터 낯설게 느껴지는것 같아 사전적 정의부터 살펴보는게 좋겠다. Facade는 정면, 표면이라는 뜻으로 이를 알면 왜 패턴의 이름이 퍼사드인지 알 수 있다. 퍼사드 패턴은 라이브러리나 프레임워크 혹은 클래스들의 집합과 같은 서브시스템을 사용하기 쉽도록 하나의 간편한 인터페이스를 제공하는 패턴이다. - 시나리오 비디오 파일을 사용자가 요청한 format 으로 변경해주는 응용프로그램이 있다고 가정하자. 비디오 파일 포맷 변환.. 2021. 5. 12.
구조 패턴 - 복합체(Composite) - 참조: GoF의 디자인 패턴 - Composite pattern 안전성: https://en.wikipedia.org/wiki/Composite_pattern#Java - 복합체(Composite) 패턴 부분과 전체의 계층을 표현하기 위해 객체들을 모아 트리구조를 형성한다. 개별객체와 복합객체를 동일하게 다룰 수 있도록 한다. - 시나리오 PPT 문서를 작성하다보면 작은 요소들을(예를 들면 선, 텍스트, 도형들) 하나의 큰 요소로 만들고 난 후, 이를 수월하게 다루기 위해서 그룹화(Grouping)를 할때가 있다. 그룹화를 하면 한 번의 클릭으로 여러 요소들을 한꺼번에 선택하여 작업이 훨씬 수월하다. 작은 요소들을 클래스로 이 작은 요소들이 모인것을 컨테이너라고 할 때, 이를 코드로 구현하려면 해당 .. 2021. 5. 6.
객체 생성 패턴- 프로토타입 - 참조: GoF의 디자인 패턴 - 참조(refactoring.guru): https://refactoring.guru/design-patterns/prototype - 참조(refactoring.guru - java example): https://refactoring.guru/design-patterns/prototype/java/example - 프로토타입(Prototype) 패턴, 원형 패턴 원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본 인스턴스를 복사하여 새로운 객체를 생성한다. 또한 코드가 클래스에 의존하지 않고, 객체를 복사할 수 있다. 시나리오: 그래픽을 편집하는 프레임워크가 있다고 해보자. 이 프레임워크를 기반으로 음표, 쉼표, 보표(악보의 5줄)를 표.. 2021. 2. 25.
객체 생성 패턴- 팩토리 메소드 - 참조: GoF의 디자인 패턴 - Template method: https://en.wikipedia.org/wiki/Template_method_pattern - 팩토리 메소드 객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 내린다. 팩토리 메소드의 예제를 검색하면 흔히 메소드의 매개변수의 타입에 따라 반환하는 객체가 다른 예제가 많이 나온다. 그래서 흔히 객체를 매개변수타입에 따라 다르게 반환하는것이 팩토리 메소드라고 생각한다. 물론 나도 예전에는 그렇게 생각했다. 하지만 위의 정의를 다시한번 생각해보면 팩토리 메소드의 핵심은 매개변수에 따라 다른 인스턴스를 반환하는것이 아님을 알 수 있다. 이 패턴의 주요핵심은 어떤 인스턴스를 생성할지에 .. 2021. 2. 21.
객체 생성 패턴 - 빌더 패턴 - 참조: GoF의 디자인 패턴 - https://ko.wikipedia.org/wiki/%EB%B9%8C%EB%8D%94_%ED%8C%A8%ED%84%B4 - http://www.javabyexamples.com/builder-vs-fluent-interface - 빌더 패턴 빌더 패턴이란 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 분리하여, 서로 다른 표현의 결과에 대해서도 동일한 생성 절차를 제공하는 패턴이다. 요리사는 피자를 만든다. 매운 피자와 하와이안피자를 만들 수 있으며, 서로 다른 피자를 만든다고 해도 1명의 요리사가 레시피만 바꿔가면서 만들 수 있어야 한다. 빌더 패턴의 참여자는 4 요소가 있다. 추상 빌더(Builder): 제품(피자)의 일부(도우, 소스, 토핑)를.. 2021. 2. 17.