개발을 하다보면 이전에 사용했던 코드와 유사한 기능을 구현할때 이전의 코드를 들여다보는 경험을 종종 하게 됩니다.이때 이전의 코드를 그대로 복사하여 사용하기도 하고, 변형해서 쓰기도 하고, 혹은 상황에 맞지 않다고 판단하여 다른 방향의 구현을 고민하기도 합니다.디자인
정의애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴즉, 하나의 인스턴스만 생성하여 사용하는 디자인 패턴이다.클래스의 생성자가 여러번 호출되어도, 실제로 생성되는 객체는 하나이며 최초로
객체 지향 디자인 패턴의 기본 원칙은 확장에 있어서는 열려 있어야 하며, 수정에 있어서는 닫혀 있어야 한다는 것이다. (OCP, Open Closed Principle)여기서 수정에 있어서 닫혀 있어야 한다는 말에 주목해보자.코드를 수정하지 않아도 모듈의 기능을 확장하
정의복잡한 객체를 생성하는 방법을 정의하는 클래스와 표현하는 방법을 정의하는 클래스를 별도로 분리합니다.이로 인해 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴입니다.빌더 패턴은 많은 Optional한 멤버 변수(혹은 파라미터)나 지속성 없는
정의Original 객체를 새로운 객체에 복사하여 필요에 따라 수정하는 메커니즘을 제공합니다.객체를 생성하는데 비용(시간과 자원)이 많이 들고, 비슷한 객체가 이미 있는 경우에 사용됩니다.Java 의 Cloneable을 구현하여, clone() 메소드를 정의 후 사용합
Adapter 패턴 정의 클래스의 인터페이스를 사용자가 기대하는 인터페이스 형태로 변환시키는 패턴입니다. 즉, 서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킵니다. 구현 방법 Class Adapter : 자바의 상속 (Ineheritance)을 이용
정의복합 객체 그룹(전체)과 단일 객체를 동일하게 취급하거나 다룰 수 있게 해주는 방식으로, 재귀적 특성을 띄며 트리(tree) 구조에 가까운 패턴이다.복합체 패턴의 구조는 크게 3가지로 분류된다.1\. Base Component클라이언트가 Composition(복합체
정의어떤 다른 객체로 접근하는 것을 통제하기 위해서, 그 객체의 대리자(surrogate)나 자리표시자(placeholder)의 역할을 하는 객체를 제공한느 패턴입니다.예를 들어 우리가 시스템 명렁어를 실행하는 객체를 갖고 있을 때 우리가 그 객체를 사용하는 것이라면
정의객체(발행자)의 상태 변화를 관찰하는 Observer(관찰자, 구독자)들의 목록을 객체에 등록하여, 상태 변화가 있을 때 마다 notify(알림)를 통해 객체의 Observer들의 목록에 있는 각 Observer에게 통지하도록 하는 디자인 패턴이다.발행 / 구독 모
Strategy 패턴 정의 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방