-
팩토리 메서드 패턴: 객체 생성 로직을 하드코딩하지 않고, 사용자 입력이나 설정에 따라 동적으로 객체를 생성해야 할 때 발생하는 유지보수 문제를 해결합니다. 🛠️
-
객체 생성을 서브클래스로 위임하여 메인 코드가 어떤 구체적인 클래스를 인스턴스화할지 알 필요 없게 만들며,
Product,ConcreteProduct,Creator,ConcreteCreator로 구성됩니다. 🏭 -
유연성을 극대화하여 기존 로직 변경 없이 새로운
ConcreteCreator를 쉽게 추가/교체할 수 있어 코드를 분리하고 테스트하기 쉽게 만듭니다. 🔄 -
Spring 프레임워크에서 인터페이스를 통한 빈(Bean) 주입 방식의 핵심 메커니즘으로 활용됩니다. 🍃
-
옵저버 패턴: 하나의 객체(Subject) 상태 변경 시 여러 다른 객체(Observer)들이 반응해야 할 때, 직접 호출 방식의 강한 결합과 확장성 문제를 해결합니다. 📡
-
Subject는 자신에게 등록된 Observer들에게 상태 변경을 알리고, Observer들은 Subject의 구체적인 정보를 몰라도 업데이트를 받으면 반응합니다.
Subject(attach, detach, notify)와Observer(update) 인터페이스로 구성됩니다. 🔔 -
Subject와 Observer 간의 느슨한 결합을 통해 시스템의 확장성과 유연성을 높이며, 이벤트 기반 시스템, UI 프레임워크, 실시간 애플리케이션의 근간을 이룹니다. 🚀
-
YouTube 채널 구독, UI 이벤트 리스너, 메시지 브로커, 실시간 대시보드 업데이트 등에 광범위하게 적용됩니다. 📺
-
전략 패턴: 런타임에 여러 알고리즘이나 동작을 지원해야 할 때, 거대한 if-else 블록이 개방-폐쇄 원칙을 위반하고 유지보수를 어렵게 만드는 문제를 해결합니다. 🧩
-
각 알고리즘을 별도의 클래스로 캡슐화하고 상호 교환 가능하게 만듭니다.
Strategy인터페이스,ConcreteStrategy구현체, 그리고Context클래스가Strategy참조를 통해 동작을 위임합니다. ♟️ -
새로운 알고리즘 추가 시 기존 코드 수정 없이 새로운
ConcreteStrategy클래스만 추가하면 되므로, 코드를 깔끔하고 유지보수 및 테스트하기 쉽게 만듭니다. 💡 -
GPS 앱의 경로 선택, 다양한 정렬 기준, 결제 방식 선택 등 런타임에 동작을 변경해야 하는 시나리오에 유용합니다. 💳
-
이 세 가지 디자인 패턴은 코드베이스를 더 깔끔하고 모듈화하며 유지보수하기 쉽게 만드는 데 크게 기여합니다. ✨
-
이 외에도 데코레이터, 커맨드, 어댑터 등 탐구할 가치가 있는 강력한 패턴들이 많습니다. 📚




![[우분투 리눅스 기초 강의] 10강. WinClient 가상머신 설치](https://i2.ytimg.com/vi/E15J4JUM7Sw/hqdefault.jpg)
