중재자(Mediator) 패턴은 객체 간의 상호작용을 캡슐화하는 객체를 정의하는 패턴이다. 객체들이 서로 참조하지 않도록 하여 객체 사이의 소결합(loose coupling)...
반복자(Iterator) 패턴은 내부 표현부를 노출하지 않고, 어떤 집합 객체에 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공한다. 리스트와 같은 어느 원소의 집합을...
명령(Command) 패턴은 요청 자체를 캡슐화하는 패턴이다. 이를 통해 요청 처리하는 것을 호출하는 객체와 이를 수행하는 객체를 분리시켜 융통성을 확보할 수 있다. 드물지...
책임 연쇄(Chain of Responsibility) 패턴은 요청을 보내는 객체와 이를 처리할 책임을 지는 객체들 간의 결합도를 없애기 위한 패턴이다. 하나의 요청에 대해서...
프록시(Proxy) 패턴은 다른 객체에 대한 접근을 제어하기 위해 대리자(Surrogate)나 자리채움자(PlaceHolder) 역할을 하는 객체를 두는 패턴이다. 어떤 객...
플라이급(Flyweight) 패턴은 객체 간의 공유를 통해 많은 수의 작은 객체들을 효과적으로 사용하기 위한 패턴이다. 객체 중심으로 설계함으로써 많은 효과를 거둘 때도 많...
퍼사드(Facade) 패턴은 한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공하는 패턴으로, 서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 ...
장식자(Decorator) 패턴은 객체에 동적으로 새로운 기능이나 책임을 추가할 수 있게 해주는 패턴이다. 상속을 통해 서브클래스를 추가하여 기능을 추가하는 것보다 융통성이 ...
복합체(Composite) 패턴은 부분과 전체의 계층을 동일하게 다룰 수 있도록, 구조를 트리 구조로 구성한다. 사용자로 하여금 개별 객체와 복합 객체를 모두 동일하게 다룰 ...
가교(Bridge) 패턴은 구현 코드로부터 추상을 분리하여 이들이 서로 독립적으로 발전할 수 있도록 하기 위한 목적을 가지는 패턴이다. 보통 하나의 추상적인 개념, 기능이 ...
어댑터 (Adapter, 적응자) 패턴은 활용하고자 하는 클래스의 인터페이스를, 사용자가 기대하는 인터페이스로 사용할 수 있도록 적응(변환)하는 패턴이다. 아무런 연관이 없거...
싱글톤 (Singleton) 패턴은 프로그램에서 오직 하나의 클래스 인스턴스만을 가지도록 하고, 이 인스턴스에 대하여 코드 어느 곳이든 접근할 수 있는 전역적인 엑세스 포인트...
원형(Prototype) 패턴은 프로토타입이 되는 인스턴스를 사용해 생성할 객체의 종류를 명시하고 만들어진 객체를 복사하여 이로부터 새로운 객체를 생성하는 패턴이다. 사...
팩토리 메서드(Factory Method) 패턴은 객체를 생성하기 위해 인터페이스에 객체를 생성할 연산을 정의하고, 어떤 클래스의 인스턴스를 생성할지는 그 인터페이스를 상속한...
빌더 패턴은 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴이다. ...
추상 팩토리 패턴은 객체 생성을 위한 패턴으로, 서로 관련성이 있거나 독립적인 여러 객체들의 집합을 생성하기 위한 인터페이스를 제공한다. 위의 그림과 같이 클라이언트는 ...
객체지향 소프트웨어 설계의 어려움 객체지향 소프트웨어를 설계한다는 것은 쉬운 일이 아니다. 특히 재사용할 수 있는 객체지향 소프트웨어를 만드는 것은 더 어렵다. 적절한 객체...
Layered Architecture는 기술적 관심사로부터 도메인 개념을 분리한다. 도메인 주도 설계의 전제 조건은 도메인 영역을 다루는 도메인 계층을 격리시키는 것이다. 하...
시스템이 너무 복잡해서 개별 객체 수준에서 완벽히 파악되지 않을 경우 커다란 모델을 솜씨있게 다루고 이해하기 위한 기법이 필요하다. 보통 큰 시스템의 목표는 전체 업무 도메인...
디자인 패턴은 특정한 상황에서의 설계 문제 해결을 위해, 상호 교류하는 수정 가능한 객체와 클래스에 관해 설명한 것이다. (Gamma et al. 1995, p.3) ...
복잡하게 동작하는 소프트웨어에 좋은 설계가 결여되어 있다면, 요소들을 리팩터링하거나 파악하기가 어려워진다. 개발자들이 소프트웨어의 처리 방식에 내포된 의미를 확신하지 못하면 ...
심층적인 모델링이라는 것이 대단하게 느껴지기는 하지만 어떻게 하면 이를 달성할 수 있을까? 심층 모델이 강력한 이유는 모델에 사용자의 행위, 문제, 문제의 해법에 대한 지식을...
도메인 주도 설계에서 가장 어려운 일은 도메인 전문가의 관심사를 포착하고 효과적인 설계로 이끌어줄 명확한 모델을 발견하는 것이다. 궁극적으로는 도메인에 대한 심층적인 이해를 ...
모든 객체에는 생명주기가 있다. 한 객체는 생성되어 다양한 상태를 거친 후 저장되거나 삭제되면서 소멸한다. 다른 객체와 복잡한 상호의존성을 맺으며, 여러 상태의 변화를 겪기도...
Model Driven Design의 효과를 놓치지 않으면서 구현과 조화를 이루려면, 모델과 구현은 상세 수준에서 연결되어야 한다는 점이다. 도메인 개념을 담은 객체를 정의...
소프트웨어의 구현을 건전한 상태로 유지하고, 모델과의 밀접한 관계를 유지하려면 모델링과 설계의 우수한 실천법을 적용해야 한다. 모델의 여러 요소들을 실제로 설계하고 구현할 때...
프로젝트에 도메인 모델은 있지만 소프트웨어를 개발하는 데 아무런 도움을 주지 못한다면, 의미가 없다. Model Driven Design 코드와 기반이 되는 모델이 서...
도메인 모델은 프로젝트를 위한 공통 언어의 핵심이 될 수 있다. 모델은 프로젝트에 참여한 사람들의 머릿속에 축적된 개념을 모아 놓은 것으로, 도메인에 대한 통찰력을 반영하는 ...
용어 도메인: 소프트웨어가 다루는 대상 영역, 사용자의 활동이나 관심사와 관련되어 있다. 모델: 어떤 대상을 단순화하고 해석하여 문제 해결과 관련된 측면을 추상화한...
도메인 주도 설계 성공한 프로젝트의 공통적인 특징: 반복적인 설계를 거쳐 발전하고 프로젝트의 일부분이 된 풍부한 도메인 모델이 있다. 복잡성...
Collections 컬렉션 구현은 주로 성능에 관련된 개발자의 의도를 전달한다. 컬렉션 사용과 커뮤니케이션을 위한 코드 작성 사이에는 밀접한 관련이 있다. ...
Method 프로그램은 복잡한 제어 흐름이 들어 있는 커다란 루틴 문제: 하나의 거대한 루틴에서는 코드를 읽기가 어려움 프로그램 ...
Behavior 프로그램의 행위에 대한 패턴 제어 흐름: 연산을 여러 단계로 나눈다. 주요 흐름: 주요 제어 흐름을 명확하게 표현한다. ...
State 객체는 외부에 드러나는 행위 와 행위를 지원하기 위한 상태 를 묶어주는 편리한 단위 객체 사용으로 프로그램에 있는 모든 상태를 잘게 쪼개...
Class 객체지향프로그래밍 클래스: 비슷한 성질을 가진 것을 총칭 객체: 클래스가 구체화된 것 클래스 관련 패턴 ...
Introduction Code를 통한 커뮤니케이션의 단계 생각을 하며 프로그래밍하기 본능에 의해 코딩하는 것을 멈추고 내가 어떤 생각을 하고 ...