반복적으로 사용되는 객체의 상호작용을 패턴화한 것
자주 바뀌는 것이 기능이라면?
메서드를 클래스로 바꾸고 <<interface>> 타입의 상속 구조를 만든다.
strategy 패턴은 기능이 자주 바뀌기 때문에 오른쪽에 별도로 구성해둔다.
자주 바뀌는 것이 상태라면?
상태를 클래스로 바꾸로 <<interface>> 타입의 상속 구조를 만든다.
조건문이 있는 클래스를 수정해야 한다.
-> OCP (개방 폐쇄 원칙) 위반
자주 바뀌는 것이 상태이므로 조건문으로 처리하던 상태를 클래스로 바꾸고 상속 구조형태로 만들어 하위 클래스에서 상태를 추가, 삭제할 수 있도록 한다.
조건문은 상태가 바뀔 때마다 전체를 수정해야하는 유지보수의 어려움을 초래한다.
이를 interface 타입의 상속 구조로 만들어 클래스에 미치는 영향을 최소화한다
클래스, 객체의 구성(합성)으로 더 큰 구조를 만들어야할 때 유용
기본 클래스를 조합해서 더 많으느 클래스를 만들어야 한다면
많은 클래스를 조용히 처리한다.
객체를 실행하는 도중 동적으로 확장한다는 장점이 있다.
decorator 패턴은 객체의 동적 결합을 위해 구성(합성)을 사용해 확장한다.
구매한 컴포넌트가 맞지 않아 바로 사용할 수 없다면?
adapter를 만들어 사용
객체의 생성과 참조 과정을 추상화해
특정 객체의 생성 과정을 분리.
언제 변경하더라도 전체 시스템에 미치는 영향을 최소화해준다.
객체 생성을 직접 하지 않고 누군가에게 맡기고 싶다면?
factory method 패턴 사용
객체를 오직 1개만 만들어야 한다면?
singleton 패턴 이용
일반적으로 하나의 클래스에는 여러 개의 객체를 생성
BUT, 의도적으로 단 하나의 객체만 생성하도록 하는 경우 존재
※ static으로 사용하지 않는 이유?
-> static은 외부 객체가 생성이 불가능하기 때문
-> 정적코드가 되기 때문에 나중에 바꿀 수 없음. 하드웨어에 의존적임
singleton 패턴을 이용한 객체는 언제나 서로 같다
객체를 하나만 생성해서 그런건가
1) singleton 패턴에서는 private로 선언한다.
외부에서 사용할 수 없도록 막는다.
이 때문에 외부 혀용은 getInstance()를 만들어 사용한다.
2) 객체는 static으로 선언한다.
static은 최초 한 번만 메모리를 할당해 사용한다.
(메모리 사용을 줄인다.)
정의, 내용 더 찾아보기