Static Factory Method
- class의 constructor를 private으로 capsulation한다.
- 대신 static method로 인스턴스를 생성해서 준다.
- 이러면 singleton도 할 수 있고 불필요한 인스턴스 생성도 막을 수 있다.
- constructor엔 이름을 못정하는데, method는 가능하다.
Signature ( Method Signature )
- method의 이름과 parameter들의 조합을 signature라고 합니다.
- contructor는 하나의 signature만 가질 수 있습니다.
- 대신 static factory method는 다른 이름으로 같은 signature를 여러개 가질 수 있습니다.
Immutable Class
- instance가 만들어지면 변경할 수 없는 class를 뜻한다.
- String, Boolean, Integer, Float, Long 등이 있다.
- Stirng의 경우 이미 만들어진 instance의 내용을 변경하면 새롭게 만들어진다.
- heap 영역에 생성된다.
Instance-Controlled
- instance 생성을 통제하는 것이다.
- singleton, noninstantiable로 만들 수 있다.
Singleton
- 같은 인스턴스를 여러개 만들어야 한다면 한개만 생성하고 쓰는게 효율적이다.
- singleton은 인스턴스를 한개만 생성하는 것이다.
Noninstantiable
Flyweight Pattern
- 한 개의 instance를 여러 개의 가상 instance로 만든다.
- 클래스의 필드 값만 변경하면 되는 경우 instnace를 생성하는 대신 내용만 변경하여 제공한다.
- 이렇게하면 제공받는 사람은 새로운 instance를 생성한 것처럼 보이는 것이다.
JDBC
- Service Interface, Provider Registration API, Service Access API가 핵심 component다.
- Client -> Service Access API -> Provider Registration API -> Service Interface 순으로 인스턴스를 구현 한다.
- JDBC는 요청하는 값들이 정해져 있어서 static factory method로 구현하기 좋다.
- 각 순서마다 아직 반환할 인스턴스가 안 정해져 있다. ( 반환활 객체의 클래스가 존재하지 않아도 된다. )
동반클래스
- interface에 private method나 static method가 쓰이기 전에는 상속받은 class에서 사용해야 했다.
- 상속받은 객체를 통해 사용하는 대신 interface와 이름이 비슷한 class를 만들어 사용하는 방식이다.
- 예) Collection, Collections
Flyweight vs immutable Class
브리지 패턴
- 구현분에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게하는 패턴이다.

리플렉션
의존 객체 주입
컴포지션
- 다른 객체의 instance를 자신의 객체의 instance 변수로 포함하여 호출하는 기법
public class Client{
ConnectionInterface connecitonInterface; // 컴포지션 사용
public setConnection(ConnectionInterface connection){
this.ConnectionInterface = connection;
}
}