https://www.youtube.com/watch?v=mE3qTp1TEbg&list=PLlsmxlJgn1HJpa28yHzkBmUY-Ty71ZUGc
이 시리즈를 보고 정리할 것이다.
한 번 싹 정리할 기회가 필요했는데 지금이 딱 그 때 같다.
1. 모든 내용을 상세히 정리하지 않습니다.
내 학습이 우선이기 때문이다.
나는 그냥 모르는 거 GPT한테 물어가면서 한 번에 싹 정리하면 끝이다.
지금 남들에게 가르치기 위해서 포스팅 하는 것이 아니다.
2. 패턴은 총 22개를 정리합니다.
Java에서 사용되는 다양한 디자인 패턴은 대체로 소프트웨어 개발에서 일반적으로 채택되는 패턴들을 포함합니다. 이들은 특정 문제를 해결하기 위한 검증된 솔루션을 제공하며, 크게 세 가지 범주로 분류할 수 있습니다: 생성 패턴(Creational), 구조 패턴(Structural), 행위 패턴(Behavioral).
1. 생성 패턴 (Creational Patterns)
생성 패턴은 객체 생성에 관련된 패턴으로, 객체 생성을 보다 유연하게 하기 위해 사용됩니다.
- Singleton: 클래스에 대한 단일 인스턴스만을 생성하고, 이에 대한 전역 접근점을 제공합니다.
- Factory Method: 객체 생성을 서브 클래스에 위임하여, 사용하는 객체의 클래스를 서브 클래스가 결정하게 합니다.
- Abstract Factory: 관련된 객체의 가족을 생성하기 위한 인터페이스를 제공하며, 구체적인 클래스는 서브 클래스에서 결정합니다.
- Builder: 복잡한 객체의 생성과 표현을 분리하여, 동일한 생성 과정에서 다른 표현을 생성할 수 있습니다.
- Prototype: 기존 객체를 복제함으로써 객체를 생성합니다.
2. 구조 패턴 (Structural Patterns)
구조 패턴은 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴입니다.
- Adapter: 인터페이스 호환성 문제로 함께 사용할 수 없는 클래스들을 함께 작동하도록 돕습니다.
- Composite: 객체들을 트리 구조로 구성하여 개별 객체와 복합 객체를 클라이언트가 동일하게 다룰 수 있도록 합니다.
- Proxy: 다른 객체에 대한 접근을 제어하거나 복잡한 작업을 단순하게 만들기 위해 대리자 또는 자리표시자를 제공합니다.
- Flyweight: 많은 수의 비슷한 객체를 생성할 때 메모리 사용을 최소화하기 위해 공유를 사용합니다.
- Facade: 복잡한 서브시스템에 대한 간단한 인터페이스를 제공합니다.
- Bridge: 추상화와 구현을 분리하여, 둘을 독립적으로 변형할 수 있습니다.
- Decorator: 객체에 추가적인 책임을 동적으로 추가하며, 서브 클래스 생성으로 기능을 확장하는 것보다 유연한 대안을 제공합니다.
3. 행위 패턴 (Behavioral Patterns)
행위 패턴은 객체들 사이의 커뮤니케이션 패턴을 다룹니다.
- Strategy: 실행 중에 알고리즘을 선택할 수 있게 하는 패턴으로, 알고리즘군을 정의하고 각각을 캡슐화하여 교체가 가능하게 합니다.
- Observer: 객체의 상태 변경을 관찰하고 이에 대한 응답으로 다른 객체들에게 통지를 제공합니다.
- Template Method: 메서드에서 알고리즘의 골격을 정의하고, 일부 단계를 서브클래스에서 구현하게 합니다.
- Command: 요청을 객체의 형태로 캡슐화하여, 사용자 정의 요구 사항에 따라 매개변수를 포함한 명령을 여러 개 저장, 전달 및 수행할 수 있습니다.
- State: 객체의 상태 변화에 따라 객체의 행동을 변경합니다.
- Chain of Responsibility: 요청을 여러 객체에 걸쳐 처리할 수 있도록 객체 체인을 만듭니다.
- Iterator: 컬렉션의 구현 방법을 노출시키지 않고 그 내용에 접근하고 순회할 수 있는 방법을 제공합니다.
- Mediator: 객체들 사이의 복잡한 통신과 제어 방식을 캡슐화하는 객체를 제공합니다.
- Memento: 객체의 상태를 이전 상태로 복원할 수 있도록, 상태를 저장하고 복원하는 메커니즘을 제공합니다.
- Visitor: 데이터 구조에서 처리를 분리하여, 구조 내의 각 요소에 정의된 연산을 수행할 수 있게 합니다.
- Interpreter: 주어진 언어의 문법에 대한 표현을 정의하며, 이 언어로 쓰인 문장의 해석을 실행할 수 있는 인터프리터를 사용합니다.
이러한 패턴들은 소프트웨어 개발에서 특정 문제를 해결하기 위해 널리 사용되며, Java를 포함한 모든 객체 지향 프로그래밍 언어에서 유용하게 적용될 수 있습니다.
OK. 가자.