본문 바로가기

IT

(14)
[디자인 패턴] 방문자 패턴(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. 장점- 결합도를 낮추며, 요청의 발신자와 수신자를 분리시킬 수 있습니다...