Factory Pattern 객체 생성을 처리하는 패턴. 객체를 사용하는 코드와 생성하는 코드를 분리한다. 팩토리 패턴이 필요한 경우 class Client { fun orderPizza(type: String): Pizza? { var pizza: Pizza? = null when (type) { "cheese" -> pizza = CheesePizza() "pepperoni" -> pizza = PepperoniPizza() "clam" -> pizza = ClamPizza() "veggie" -> pizza = VeggiePizza() } pizza?.prepare() pizza?.bake() pizza?.cut() pizza?.box() return pizza } } 구상 클래스를 생성하는 코드가..
Singleton Pattern 클래스 인스턴스를 하나만 만드는 패턴 생성자를 private으로 두고, 하나뿐인 인스턴스의 전역 접근을 제공한다. 인스턴스가 필요할 때 클래스에 요청하고, 요청이 들어오면 하나뿐인 인스턴스를 반환한다. → lazy instantiation 싱글톤 패턴이 필요한 경우 인스턴스가 하나만 존재해야 하는 경우 사용한다. (스레드 풀, 캐시, 로그 등) 이런 경우 인스턴스가 여러개라면, 자원을 불필요하게 사용하거나 결과가 일관되지 않을 수 있다. 전역 변수를 사용해서 인스턴스를 생성하면, 필요하지 않은 경우에도 인스턴스가 생성되어 자원을 잡아먹을 수 있다. 여러 곳에서 같은 데이터를 공유할 수 있다. 구조 구현 방식 1) 기존 싱글톤 패턴 방식 public class Singlet..
Observer Pattern 어떤 객체의 상태가 바뀌면 그 객체를 구독하는 다른 객체(옵저버)에게 알림을 보내는 패턴 Subject Observer에게 데이터가 변경될 때마다 알려주는 역할 새로운 값을 Observer에게 전달한다. 옵저버 패턴의 대상이 되는 데이터를 관리한다. Observer Subject를 구독하고, Subject의 데이터가 바뀌면 그 데이터를 전달받는다. 특징 일대다 의존성 하나의 Subject에 여러 Observer가 연관된다. Observer는 데이터를 가질 필요가 없고, Subject가 알림을 보내길 기다린다. → Subject에 의존 여러 객체가 동일한 데이터를 관리하지 않고, 하나의 객체(Subject)만 가지고 있기 때문에 깔끔한 코드. 느슨한 결합 (Loose Coup..