728x90
반응형

헤드퍼스트 디자인 패턴 13

[소프트웨어 아키텍처] 14. 데코레이터 패턴(Decorator Pattern -java)

데코레이터 패턴(Decorator Pattern) 기존 클래스 코드를 변경하지 않고 객체에 새로운 작업을 추가할 수 있는 패턴 데코레이터 패턴을 사용하면 객체에 추가 요소를 동적으로 더할 수 있습니다. 또한, 서브클래스를 만들 때보다 훨씬 유연하게 기능을 확장할 수 있습니다. 데코레이터의 슈퍼클래스는 자신이 장식하고 있는 객체의 슈퍼클래스와 같습니다. 한 개체를 여러 개의 데코레이터로 감쌀 수 있습니다. 데코레이터는 자신이 감싸고 있는 객체와 같은 슈퍼클래스를 가지고 있기에, 원래 객체(싸여 있는 객체)가 들어갈 자리에 데코레이터 객체를 넣어도 무관합니다. 데코레이터는 자신이 장식하고 있는 객체에게 어떤 행동을 위임하는 일 말고도 추가 작업을 수행할 수 있습니다. 객체는 언제든지 감쌀 수 있으므로 실행 ..

[소프트웨어 아키텍처] 13. 프로토타입 패턴(Prototype Pattern -java)

프로토타입 패턴(Prototype Pattern) 클래스의 인스턴스를 생성할 때 자원과 시간이 많이 들거나 복잡하다면 프로토타입 패턴을 사용하면 됩니다. 프로토타입 패턴을 사용하면 기존 인스턴스를 복사하기만 해도 새로운 인스턴스를 만들 수 있습니다.(java 에서는 clone() 메소드를 사용하거나 역직렬화를 하면 됩니다.^^) 본래의 객체를 새로운 객체에 복사하여 우리의 필요에 따라 수정하는 메커니즘을 제공합니다. 프로토타입 패턴을 가장 큰 특징은 클라이언트에서 어떤 클래스의 인스턴스를 만드는지 전혀 모르는 상태에서도 새로운 인스턴스를 만들 수 있다는 점 입니다. 프로토 타입 패턴 구조 깊은 복사, 얇은 복사 깊은 복사와 얇은 복사에 대해서 들어본적이 있으신가요? 먼저, 우리는 모든 데이터 타입은 값 ..

[소프트웨어 아키텍처] 12. 빌더 패턴(Builder Pattern -java)

빌더 패턴(Builder Pattern) 짜장면을 여러 단계로 나누어서 먹을수 있도록 먹는 방법을 캡슐화하고 싶다면…? 짜잔! 빌더 패턴을 사용하면 됩니다.!! 반복자 패턴을 기억하시나요? 반복자 패턴을 사용하면 컬렉션의 구현방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근할 수 있습니다. 쉽게 이야기 하면, 반복 작업을 별도의 객체로 캡슐화해서 컬렉션의 내부 구조를 클라이언트로부터 보호할 수 있습니다. 빌더 패턴도 동일한 아이디어를 적용합니다.! 빌더를 캡슐화해서 클라이언트가 빌더에게 구조를 만들어 달라고 요청하는 것 입니다...! 빌터 패턴 구조 AbstractBuilder 빌더패턴의 대상이 되는 클래스 ConcreteBuilder AbstractBuilder에 필요한 메소드를 구현한 클래스 빌..

[소프트웨어 아키텍처] 11. 싱글톤 패턴(Singleton Pattern -java)

싱글톤 패턴(Singleton Pattern) 인스턴스가 하나뿐인 특별한 객체 싱글톤 패턴은 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공합니다. 다른 클래스에서는 싱글톤으로 구현한 클래스 인스턴스를 만들지 못하도록 해야합니다. 싱글톤 패턴을 실제로 적용할 때는 클래스에서 하나뿐인 인스턴스를 관리하도록 만들면 됩니다. 그리고 다른 클래스에서도 자신의 인스턴스를 추가로 만들지 못하게 해야합니다. 이말은 인스턴스가 필요하다면 반드시 클래스 자신을 거치도록해야함을 의미합니다. 어디서든 해당 인스턴스에 접근할 수 있도록 전역 접근 지점을 제공합니다. 언제든 인스턴스가 필요하면 클래스에 요청할 수 있게 만들어 놓고, 요청이 들어오면 하나뿐인 인스턴스를 건네주도록 만들어야 합니다. 여기서 싱글..

[소프트웨어 아키텍처] 10. 중재자 패턴(Mediator Pattern -java)

중재자 패턴(Mediator Pattern) 모든 클래스간의 복잡한 로직을 캡슐화하여 하나의 클래스에 위임하여 처리하는 패턴 N:M의 관계에서 N:1의 관계로 복잡도를 낮추어 유지보수 및 재사용의 확장성에 유리한 패턴 입니다. 객체 간의 메시지를 전달할 일이 있을 때도 중재자를 두고 전달할 수 있다. 서로 관련된 객체 사이의 복잡한 통신과 제어를 한곳으로 집중하고 싶을 때 사용합니다. 주로 UI 프로그래밍에서 많이 사용되는 방법으로 Widget 간의 상호 처리를 서로간에 처리하는 것이 아니라 한 객체가 전담하여 처리하도록 하는 방식입니다. Facade Pattern, Observer Pattern과 유사하다. 중재자 패턴 구조 Mediator 여러 Colleague를 중재하는 인터페이스 Colleague..

[소프트웨어 아키텍처] 9. 책임 연쇄 패턴(CoR: Chain of Responsibility Pattern -java)

책임 연쇄 패턴(CoR: Chain of Responsibility Pattern) 책임 연쇄 패턴은 핸들러들의 체인(사슬)을 따라 요청을 전달할 수 있게 해주는 행동 디자인 패턴 입니다. 각 핸들러는 요청을 받으면 요청을 처리할지, 다음 핸들러로 전달할지 결정 합니다. 쉽게 이야기하면, 1개의 요청을 2개 이상의 객체에서 처리해야 한다면?! 책임 연쇄 패턴을 사용하면 좋습니다.!! 요청을 처리할지 다음 핸들러로 전달할지 결정하면 되기 때문이죠! CoR은 윈도우 시스템에서 마우스 클릭과 키보드 이벤트를 처리할 때 흔히 사용됩니다. 책임 연쇄 패턴 구조 Handler 모든 구상 핸들러에 공통적인 인터페이스 일반적으로 요청을 처리하기 위한 단일 메소드만 포함 체인의 다음 핸들러를 세팅하기 위한 다른 메소드를..

[소프트웨어 아키텍처] 8. 팩토리 메소드 패턴, 추상 팩토리 패턴(Factory Method Pattern, Abstract Factory Pattern -java)

팩토리 메소드 패턴(Factory Method Pattern) 구상 형식 인스턴스를 만드는 작업을 캡슐화 합니다. 객체의 인스턴스를 만드는 작업이 항상 공개되어야 하는 것은 아닙니다. 오히려 공개했을 경우 결합 문제가 발생할 수도 있습니다. 이러한 불필요한 의존성을 없애서 결합 문제를 해결하는 방법이 바로 팩토리 패턴 입니다. 객체를 생성할 때 필요한 인터페이스를 만듭니다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정합니다. 팩토리 메소드 패턴을 사용하면 클래스 인스턴스를 만드는 작업을 서브클래스에게 맡기게 됩니다. 사용하는 서브클래스에 따라 생산되는 객체 인스턴스가 결정됩니다. Factory factory = new SeoulFactory(); new를 사용하면 구상 클래스의 인스턴스가 만들어..

[소프트웨어 아키텍처] 7. 반복자 패턴과 컴포지트 패턴(Iterator Pattern, Composite Pattern -java)

반복자 패턴과 컴포지트 패턴(Iterator Pattern, Composite Pattern) 반복자 패턴 컬렉션을 캡슐화!!!!!!!! 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공합니다. 자료구조와 접근 방법을 분리시켜 객체화 하는 방법 서로 다른 구조를 가지고 있는 저장 객체에 대해서 접근하기 위해서 interface를 통일시키고 싶을 때 사용하는 패턴입니다. 만약 MenuItem에 대하여 DinerMenu 클래스는 배열을, PancakeHouseMenu 클래스는 List를 사용한다고 하자. DinerMenu 배열 사용 public class DinerMenu { private static final int MAX_ITEMS = 6; private int nu..

[소프트웨어 아키텍처] 5. 템플릿 메소드 패턴(Template method Pattern -java)

템플릿 메소드 패턴 커멘드 패턴에서 우리는 메서드의 호출을 캡슐화 했습니다. 이번에는 서브클래스에서 언제든 필요할 때마다 알고리즘을 가져다가 사용 할 수 있도록 캡슐화 해보겠습니다. 그리고 할리우드에서 영감을 받아 만들어진 디자인 원칙도 같이 배워보도록 합시다.! 템플릿 메소드 패턴은 알고리즘의 골격을 정의 합니다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있습니다. 간단하게 말하면, 알고리즘의 템플릿(틀)을 만듭니다. 템플릿이란 그냥 메서드 입니다.(템플릿 안에는 또 다른 메서드가 존재합니다.) 좀더 구체적으로 이야기 하면 알고리즘의 정의한 메서드 입니다. 즉, 템플릿 메서드..

[소프트웨어 아키텍처] 2. 전략 패턴(Strategy Pattern -java)

전략패턴 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 사용 할 수 있게하는 패턴 입니다. 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다. 하나의 움짤에 여러가지 전략을 설정할 수 있습니다. 변하지 않는 것은 움짤, 변하는 것은 전략 입니다. 상속이 모든 문제를 해결할 수는 없습니다.(템플릿 메소드 패턴에서는 상속을 사용합니다.) 2022.10.25 - [컴퓨터 공학/0 + 소프트웨어 아키텍처] - [소프트웨어 아키텍처] 5. 템플릿 메소드 패턴(Template method Pattern -java) [소프트웨어 아키텍처] 5. 템플릿 메소드 패턴(Template method Pattern -java) 템플릿 메소드 패턴 커멘드 패턴에서 우리는 메서드의 호출을 캡슐화 했습니..

728x90
반응형