-
디자인 패턴이란?
- 자주 사용하는 설계 패턴을 정형화 해서 이를 유형별로 가장 최적의 방법으로 개발을 할 수 있도록 정해둔 설계
- 알고리즘과 유사하지만, 명확하게 정답이 있는 형태는 아니며, 프로젝트의 상황에 맞추어 적용 가능
생성 패턴
- 객체를 생성하는 것과 관련된 패턴으로, 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화 하고, 코드의 유연성을 높여준다
- Factory Method
- Singleton
- Prototype
- Builder
- Abstract Factory
구조 패턴
- 프로그램 내의 자료구조나 인터페이스 구조 등 프로그램 구조를 설계하는데 활용될 수 있는 패턴
- 클래스, 객체들의 구성을 통해서 더 큰 구조를 만들 수 있게 해준다
- Adapter
- Composite
- Bridge
- Decorator
- Facade
- Proxy
행위 패턴
- 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것으로, 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 제공함
- Template Method
- Interpreter
- Iterator
- Observer
- Strategy
Singleton Pattern(**)
- Singleton 패턴은 어떠한 클래스가 유일하게 1개만 존재할 때 사용함
- 디폴트 생성자를 막는다
- static으로 getInstance()를 만든다
- Instance가 Null인 경우 새로 생성
Adapter Pattern
- 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용 할 수 있도록 함
- 인터페이스끼리 호환시키려고 할 때, 중간에 Adapter 클래스를 만들어서 사용함
Proxy Pattern
- Proxy는 대리인이라는 뜻, 뭔가를 대신해서 처리하는 것
- Proxy Class를 통해서 대신 전달하는 형태로 설계되며, 실제 Client는 Proxy로부터 결과를 받음
- Cache의 기능으로도 활용 가능
- Spring에서 Proxy를 이용해 AOP를 구현했다
Observer Pattern
- 관찰자 패턴은 변화가 일어났을 때, 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것
- Event listener에서 이런 패턴을 사용하고 있음
Facade Pattern(**)
- Facade는 건물의 앞쪽 정면이라는 뜻
- 여러 개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존 관계가 있을 때, 중간에 facade라는 객체를 두고 Interface만을 활용하여 기능을 사용하는 방식
- 원래는 개별로 의존성 관리를 해야하는데, 한 곳에 모아서 관리한다
Strategy Pattern(*****)
- 객체 지향의 핵심
- 유사한 행위들을 캡슐화하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경하여 유연하게 확장하는 패턴
- 기본 Encoder는 그대로 두고, 전략만을 바꿔 넣어서 결과 값을 다르게 만든다!
- 전략 메서드를 가진 전략 객체(Normal Strategy , Base64 Strategy)
- 전략 객체를 사용하는 컨텍스트 ( Encoder )
- 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트