본문 바로가기

IT/디자인 패턴(Design Pattern)

(13)
확장-축소 패턴 이번에 회사에서 기존 수작업으로 처리해야하는 작업들을 자동화하여 모든 회사에 새로운 데이터베이스 구조도로 동시에 변경될 수 있는 기능이 필요하다하여 분석 중 pgRoll(https://github.com/xataio/pgroll)이라는 비교적 최근에 나온 오픈소스를 분석하며 확장 축소 패턴에 대해서 분석해보았다. 아무래도 마이그레이션은 앞으로도 마주치기 싫으나 마주칠 수 밖에 없는 상황들이 계속 발생하기에 해당 패턴을 알면 도움이 될까 싶어 찾아보았고 공부해보았는데, 아무래도 한글로 되어있는 곳을 찾기가 쉽지않아 하기 링크를 참조하여 공부할 겸 번역하였다. (https://www.prisma.io/dataguide/types/relational/expand-and-contract-pattern) 확장 축..
[디자인 패턴] 팩토리 메소드 패턴(Factory Method Pattern) 1) 개요팩토리 메소드 패턴은 클래스의 인스턴스를 만드는 것을 서브클래스에서 결정하도록 하는 패턴입니다.​- 장점1. 구현 클래스 직접 접근보다 인터페이스 접근을 더 용이하게 해줍니다.2. 클라이언트 클래스로부터 인스턴스 구현을 분리시켜 객체간의 의존성을 낮춰줍니다.​- 단점1. 팩토리 메소드 패턴을 남용할 경우 인스턴스 생성 구조를 파악하기 복잡해집니다. 2) UML3) 예제 123456789public abstract class Product { public abstract String getName(); public abstract int getPrice(); @Override public String toString() { return "product Name : " + getName(); }}C..
[디자인 패턴] 옵저버 패턴(Observer Pattern) 1) 개요옵저버 패턴은 객체의 상태 변화를 관찰하는 관찰자 객체를 생성하여 사용하는 디자인 패턴입니다.즉, 객체의 변화가 발생하면 그에 따르는 종속객체들이 자동으로 변화가 통지되어 그에 따른 명령을 수행하도록하는 일대다의 의존성을 정의해줍니다. - 옵저버 패턴을 사용하는 경우1. 분산 이벤트 핸들링 시스템 2. 이벤트 기반 프로그래밍 - 장점1. 객체간의 결합도가 느슨해집니다.2. 실시간으로 효과적으로 데이터를 배분할 수 있습니다. - 단점1. 패턴을 잘못 구현할 경우 데이터 배분에 문제가 발생하여 위험도가 큽니다. 2) UML 3) 예제1234public interface Observer { public void update(int runs, int wickets, float overs);} Color..
[디자인 패턴] 인터프리터 패턴(Interpreter Pattern) 1) 개요문법 규칙을 클래스화 한 구조로, 일련의 규칙으로 정의된 문법적 언어를 해석하는 패턴입니다.(SQL, SHELL...) 인터프리터 패턴은 SQL과 같은 계층적 언어를 해석하기 위해 계층 구조를 표현할 수 있습니다. - 장점1. 문법의 추가 및 수정, 구현이 쉬워집니다. - 단점1. 복잡한 문법의 경우 관리 및 유지가 어려워집니다. 2) UML - AbstractExpression : interpret()를 정의 합니다.- TerminalExpression : interpret()를 구현합니다- NonTerminalExpression : Non-Terminal의 interpret()를 구현합니다.- Context : String 표현식이어야 하며, 인터프리터에 보내는 정보입니다.- Client :..
[디자인 패턴] 전략 패턴(Strategy Pattern) 1) 개요로직을 캡슐화하여 교환하며 상황에 맞는 로직을 사용하는 디자인 패턴입니다. - 장점1. 시스템의 구조 및 Context Class를 변경하지 않고 요청에 맞는 로직을 추가 및 수정할 수 있습니다.2. 같은 인터페이스 양식을 가진 알고리즘을 별도로 캡슐화하여 코드의 가독성이 높아지며, 생산성이 높아집니다.3. 요청에 맞는 로직을 실시간으로 변경할 수 있습니다. - 단점1. 상황에 맞는 적절한 로직을 모두 알고있어야 합니다.2. 관리해야하는 클리스의 수가 늘어납니다. - 패턴 비교 상태 패턴(State Pattern) 공통점 차이점 인터페이스를 사용하여 Concrete Class를 캡슐화합니다. 그에 따라, Concrete와 관계없이 인터페이스를 통하여 기능을 수행합니다. 상태 패턴은 자신의 상태를..
[디자인 패턴] 상태 패턴(State Pattern) 1) 개요상태 디자인 패턴은 객체 내부의 상태에 따라 동작을 변경해야할 때 사용하는 디자인 패턴입니다. - 장점1. 하나의 객체에 대한 여러 동작을 구현해야할 때 상태 객체만 수정하므로 동작의 추가, 삭제 및 수정이 간단해집니다.2. State 패턴을 사용하면 객체의 상태에 따른 조건문(if/else, switch)이 줄어들어 코드가 간결해지고 가독성이 올라갑니다. - 단점1. 상태에 따른 조건문을 대신한 상태 객체가 증가하여 관리해야할 클래스의 수가 증가합니다. 2) UML- Context : 객체의 상태를 정의하는 데 사용되는 메소드를 정의하는 인터페이스입니다.- State : 상태에 따른 동작을 정의하는 인터페이스입니다.- ConcreteState : State에서 정의된 메소드를 구현하는 클래스입..
[디자인 패턴] 템플릿메소드 패턴(TemplateMethod Pattern) 1) 개요상위 클래스에서 처리의 흐름을 제어하며, 하위클래스에서 처리의 내용을 구체화하는 디자인 패턴입니다.공통되는 사항은 상위 추상 클래스에서 구현하며, 각 객체마다 다른 부분은 하위 클래스에서 구현합니다.상속을 통한 확장 개발 방법으로 코드의 중복을 줄이고, 리팩토링(Refactoring)에 유리하여 가장 많이 사용되는 패턴 중 하나입니다. 2) UML - Abstract Class : 추상 클래스로 templateMethod를 정의합니다.- Concrete Class : 부모 클래스에서 abstract로 정의된 templateMethod를 구현합니다. 3) 예제123456789101112131415161718192021public abstract class OrderProcessTemplate { ..
[디자인 패턴] 방문자 패턴(Visitor Pattern) 1) 개요방문자 패턴은 로직을 객체 구조에서 분리 시키는 디자인 패턴입니다.비슷한 종류의 객체들을 가진 그룹에서 작업을 수행해야 할 때 주로 사용되는 패턴입니다. - 장점1. 로직이 추가/변경되면 그 로직이 포함된 클래스를 찾아가며 변경하지 않고 방문자 객체만 변경하면 됩니다. - 단점1. 방문자 인터펭스에 구현해야할 로직이 많으면 유지보수에 어려움이 있습니다.2. visit 메소드의 return 타입을 각각 파악하고 있어야 합니다. 2) UML - Client : 명령을 보냅니다.- Visitor : 명령을 수행하기 위해 필요한 메소드를 정의하는 인터페이스입니다.- ConcreteVisitor : 명령을 수행하는 메소드를 구현합니다.- Element : Visit를 사용할 수 있는지 확인하는 accep..