### 디자인 패턴
디자인 패턴은 레시피
4대 원칙은 요리 도구
5대 규칙은 도구 사용법이다.
---
### 어댑터 패턴
변환기
서로 연결될 수 없는 두 부분을 연결해 줍니다.\
이는 위의 OCP를 적용 할 때에 사용합니다.
( 확장에는 열려 있지만, 변경은 닫혀있는 )
ex) jdbc
이는 호출당하는 ㄷ쪽의 메서드를 호출하는 쪽에 맞게 대응하기 위해서 중간자를 두는 것입니다.
---
### 프록시 패턴
대신하여 역할을 수행합니다.
프록시 패턴의 경우는 실제 서비스가 가진 메서드와 같은 이름의 메서드를 사용한다.
이때에 인터페이스를 활용하여
인터페이스를 호출 하여 메서드를 실행하여
인터페이스를 implement 하면 override 된다
이 또한 OCP 와 DIP를 지킨것이다.
---
### 데코레이터
프록시와 같지만, 반환값을 조작해서 넘겨준다.
따라서 이는 메서드 호출의 반환값에 영향을 주기 위해 중간에 장식자를 두는것이다.
---
### 싱글턴 패턴
오직 인스턴스를 하나만 만들기 위해서 사용합니다.
구현은 인스턴스를 하나만 생기도록 강제하기 위해 생성자를 private으로 선언하고, 객체를 반환하는 정적 메서드를 둡니다.
이를 사용하면 하나의 객체를 공유하도록 한다.
이러한 공유자원은 속성을 가지지 않는것이 정석이다.
다만 읽기 전용은 괜찮다.
---
### 템플릿 메서드 패턴
이는 클래스이 메서드들에서 중복된 부분을 제거하고 다른 부분을 추상 클래스로 만들어서 각각 상속을 받아서 구현 하도록 합니다.
이는 DIP를 사용한다고 볼 수 있습니다.
오버라이딩을 하면 추상 클래스가 덮어지는 것을 이용해서 상위 클래스 타입으로 선언하여 이에 의존하도록 합니다.
---
### 팩토리 메서드 패턴
이는 오버라이드된 메서드가 객체를 반환하는 패턴이다.
팩토리 객체가 만들고 싶은 객체를 만들어주는 메서드를 제공합니다.
이는 상위 패턴에 의존시키기 위해서 고안되었습니다.
ex) animal 에서 animal toy 를 만들게 한다.
이 둘은 상위 개념이므로 구체화하는 것을 가져서 하위 객체들로 구현한다.
---
### 전략 패턴
이 또한 상위 의존성을 위해서 추상화를 시켜서 구성을 해놓은 후에 이를 메인 실행에서 객체를 생성시켜 오버라이딩을 이용해서 상위 객체로 소통한다.
이는 템플릿 메서드와도 유사하지만, 전략 패턴은 인터페이스를 활요아혹, 템플릿 메서드는 추상 클래스를 활용한다.
---
### 템플릿 콜백 패턴
이는 전략 패턴과 같은데, 익명 내부 클래스를 사용한다
익명 내부 클래스 와 내부 클래스의 차이??
이는 익명 내부 클래스를 이용하고 전략을 생성하는 코드를 하나의 클래스 안에 이관 시켜서 코드의 양을 줄였습니다.
이는 전략을 익명 내부클래스로 구현한 패턴입니다
---