본문 바로가기

전체 글

(32)
[디자인 패턴] 상태 패턴(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..
[디자인 패턴] 메멘토 패턴(Memento Pattern) 1) 개요메맨토 패턴은 객체의 상태 정보를 가지는 클래스를 따로 생성하여, 객체의 상태를 저장하거나 이전 상태로 복원할 수 있게 해주는 패턴입니다. 메멘토 패턴은 바둑, 오목, 체스 등의 보드게임 등에서 '무르기' 기능을 구현할 때 사용되기도 합니다.단, 이전 상태의 객체를 저장하기 위한 Originator가 클 경우 많은 메모리가 필요합니다. 2) UML - Originator : 객체의 상태를 저장합니다. Memento 객체를 생성하며 후에 Memento를 사용하여 실행 취소(undo)를 할 수 있습니다.- Memento : Originator의 상태를 유지하는 객체입니다.(POJO) - Caretaker : 마치 게임의 세이브포인트처럼 복수의 Memento의 상태를 유지해주는 객체입니다. 3) 예제..
[디자인 패턴] 중재자 패턴(Mediator Pattern) 1) 개요객체들 간의 상호작용 행위를 정리하여 모은 중재자 객체를 따로 두어 관라히는 디자인 패턴입니다. - 중재자 패턴이 사용되는 경우- 객체들간의 관계가 매우 복잡하여 객체의 재사용에 부담이 갈 경우 - 장점1. 객체들 간 수정을 하지않고 관계를 수정할 수 있습니다.2. 객체들간의 관계의 복잡도, 의존성 및 결합도를 감소시킵니다. - 단점1. 중재자 패턴 사용 시 중재자 객체에 권한이 집중화되어 굉장히 크며 복잡해지므로, 설계 및 중재자 객체 수정 시 주의해야 합니다. 2) UML - Mediator : Colleague 객체간의 상호작용을 위한 인터페이스를 정의합니다.- ConcreteMediator : Mediator의 인터페이스를 구현하여 객체간의 상호작용을 조정합니다.- Colleague : ..
[디자인 패턴] 이터레이터 패턴(Iterator Pattern) 1) 개요 이터레이터(Iterator)란 반복하다라는 의미로 어떠한 객체의 집합을 순서대로 명령을 처리할 수 있게 해주는 디자인 패턴입니다.거의 대부분의 프로그래밍 언어에서 콜렉션(Collectins) 자료구조에 사용이 가능하며, 간단하면서도 실제로도 굉장히 많이 쓰고있는 패턴입니다. for문의 i++에서 i를 하나씩 증가시키면서 콜렉션 요소 전체를 처음부터 차례대로 검색할 때, 사용되는 증가 변수인 i의 기능을 추상화해서 일반화한 것을 디자인 패턴화 시킨 것이 이터레이터 패턴입니다. 2) UML- Iterator : 순서대로 객체를 검색하는 인터페이스를 정합니다.- ConcreateIterator : Iterator에서의 인터페이스를 구현합니다.- Aggregate : Iterator의 역할을 만드는 ..
[디자인 패턴] 커맨드 패턴(Command Pattern) 1) 개요커맨드 패턴은 해당 요청에 따라야하는 기능들을 캡슐화한 객체에 정리하여 실행할 수 있게 해주는 디자인 패턴입니다.즉, 요청에 따르는 기능들이 다양하고 변경 및 추가 삭제가 많은 경우 요청이 발생되는 클래스를 변경하지 않고 수정할 때 매우 유용합니다. 1. 커맨드 패턴이 사용되는 경우- 병렬처리(Parallel Processing) : 병렬로 여러 스레드에서 실행이 되어야하는 경우- 매크로(Macro) : 특정 명령에 따른 동일한 일련의 작업을 반복적으로 수행해야 하는 경우- 네트워킹(Networking) : 네트워크를 통해 일련의 작업을 보내야하는 경우(원격조작, 게임 캐릭터에 명령) 2. 장점- 기존 코드를 변경하지 않고 새 명령을 추가할 수 있어 코드확장이 수월합니다.- 호출자(invoker..
[디자인 패턴] 책임 연쇄 패턴(Chain of Responsibility Pattern) 1) 개요클라이언트로부터의 요청을 처리할 수 있는 처리객체를 집합(Chain)으로 만들어 부여함으로 결합을 느슨하기 위해 만들어진 디자인 패턴입니다.일반적으로 요청을 처리할 수 있는 객체를 찾을 때 까지 집합 안에서 요청을 전달합니다.실제로 굉장히 많이 쓰이는 패턴 중 하나입니다. 1. 책임 연쇄 패턴이 적용되는 경우- 요청의 발신자와 수신자를 분리하는 경우- 요청을 처리할 수 있는 객체가 여러개일 때 그 중 하나에 요청을 보내려는 경우- 코드에서 처리객체(handler)를 명시적으로 지정하고 싶지 않은 경우 즉, 책임 연쇄 패턴은 요청을 처리할 수 있는 객체가 여러 개이고 처리객체가 특정적이지 않을 경우 권장되는 패턴입니다. 2. 장점- 결합도를 낮추며, 요청의 발신자와 수신자를 분리시킬 수 있습니다...