- 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 할 수있는 훌륭한 해결책
- “바퀴를 다시 발명하지 마라(Don’t reinvent the wheel)”
- 이미 만들어져서 잘 되는 것을 처음부터 다시 만들 필요가 없다는 의미이다.
- 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 ‘규약’ 형태로 만들어 놓은 것
싱글톤 패턴(Singleton Pattern)의 의미를 보자면 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 즉, 생성자의 호출이 반복적으로 이뤄져도 실제로 생성되는 객체는 최초 생성된 객체를 반환 해주는 것이다. 쉽게 얘기하면 단 한 개의 물건으로 여러 사함이 함께 공유하며 사용하는 방법이다.
슈퍼클래스에서 객체를 생성하기 위한 인터페이스를 제공하지만 서브클래스가 생성될 객체의 유형을 변경할 수 있도록 하는 생성 디자인 패턴이다. 즉, 객체를 만드는 부분을 Subclass에 맡기는 패턴이다.
상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법.
변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은
서브클래스에서 만들도록 한다.
- 하위 클래스에서 사용되지만, 변하지 않는 기능을 상위 클래스에 저장해 놓고 확장할 기능은 서브 클래스에서 만들도록 설계한다는 내용을 담고 있다.
어댑터 패턴은 서로 다른 인터페이스를 가진 두 클래스를
어댑터 클래스로 인터페이스를 통일 시켜 사용하는 방법이다.
(1 대 1 or 1 대 N 관계)
서로의 정보를 주고받는 과정에서 정보의 단위가 클수록, 객체들의 규모가 클수록 복잡성이 증가하게 된다. 이때 가이드라인을 제시해줄 수 있는 것이 '옵저버 패턴'구독자, 고객들은 정보를 얻거나 받아야 하는 주체와 관계를 형성하게 된다. 관계가 지속되다가 정보를 원하지 않으면 해제할 수도 있다. (잡지 구독을 취소하거나 우유 배달을 중지하는 것처럼)
-> 이때, 객체와의 관계를 맺고 끊는 상태 변경 정보를 Observer에 알려줘서 관리하는 것을 말한다.
정리
옵저버 패턴은, 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고, 자동으로 정보가 갱신되는 1:N 관계(혹은 1대1)를 정의한다.인터페이스를 통해 연결하여 느슨한 결합성을 유지하며, Publisher와 Observer 인터페이스를 적용한다.
전략 패턴(strategy pattern)은 정책 패턴(policy pattern)이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 ‘직접’ 수정하지 않고 전략이라고 부르는 ‘캡슐화한 알고리즘’을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴입니다.
행동 패턴으로, 상태변화에 따라 클래스의 행동을 바꾸는 패턴입니다.
상태 패턴에서는 다양한 상태를 나타내는 객체와 상태 객체가 변경됨에 따라 동작이 달라지는 컨텍스트 객체를 생성합니다.
State Pattern 상태 패턴 사용이 적합한 경우
- 현재 상태에 따라 행동(기능)이 변화되는 객체인 경우, 상태의 가짓수가 많고, 상태가 빈번하게 변경되는 경우
- 클래스의 상태 필드에 따라서 기능을 변경하는, 수많은 조건문으로 코드가 복잡해진 경우
- 상태 필드를 변경하는 조건 코드가 많이 중복해서 사용되고 있는 경우
장점
- 상태를 관리하는 로직을 클래스 객체에서 분리해 관리할 수 있습니다. (단일책임원칙)
- 기존 상태 클래스와 컨텍스트 객체의 수정 없이 새로운 상태를 추가할 수 있습니다. (개방/폐쇄원칙)
- 상태를 관리하기 위한 조건 코드를 간단하게 만들 수 있습니다.
단점
- 상태의 가짓수가 적고, 상태 변경도 드물다면, 상태 패턴을 적용하는 것은 과도할 수 있습니다.