디자인 패턴

옵저버 패턴 (Observer Pattern)
옵저버 패턴 (Observer Pattern) 객체의 상태 변화을 감지하고 연결된 다른 객체의 상태를 쉽게 변경할 수 있도록 한다.일대다 의존 관계를 구성해서 하나의 객체가 상태를 변경하면 모든 의존 객체에게 자동으로 알림이 전송되고 업데이트 하는 패턴이다. 주로 사용하는 곳알림, 이벤트 기능이 필요한 대부분의 기능에서 해당 패턴을 사용한다.Android의 Event Listener브라우저의 Event HandlerJava Swing 라이브러리(GUI)이외에도 GUI 프로그래밍을 하거나 메시지 발송과 같은 기능을 사용한다면 옵저버 패턴이 빠질 수 없다.용어 정리Subject : 상태 변경을 알려주는 객체 (발행인)Observer : 상태 변경에 대한 알림을 받는 객체 (구독자) 헷갈리는 개념 정리Pu..

전략 패턴 (Strategy Pattern)
전략 패턴 (Strategy Pattern) 객체들이 할 수 있는 행위에 대해 전략 클래스를 생성하고, 유사한 클래스를 캡슐화하는 인터페이스를 정의한다.객체의 행위를 동적으로 수정하고 싶은 경우, 직접 행위를 수정하지 않고 전략을 바뀌주기만 함으로써 행동을 유연하게 확장할 수 있다. 즉, 일련의 알고리즘을 정의하고 각각을 캡슐화하고, 상호 교환 가능하게 만든다. 패턴을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있게 된다. 샘플 오리 프로그램Duck을 상속받는 RedheadDuck과 MallardDuck이 존재한다.이들은 Duck에 속하는 객체로서 공통된 quack, swim 메서드를 수행하고, display 메서드는 오버라이딩해서 각자에 맞게 사용한다. 요구사항 추가오..
[MSA] 리액티브 마이크로 서비스 패턴
마이크로 서비스 아키텍처에도 디자인 패턴이 존재한다. 그 중 하나가 바로 '리액티브 마이크로 서비스 패턴'이다. 리액티브 패턴은 기존 마이크로 서비스의 문제를 해결하기 위해 등장한 패턴으로 서비스간의 의존도를 낮추는것이 가장 큰 목적이다. 보통의 경우에 서비스 간의 통신을 위해서 RESTful API와 같은 블로킹 I/O 모델을 사용해 동기식 통신을 구현하곤 했다. 동기식 블로킹 I/O를 사용하면 서비스가 요청을 처리하는 동안 운영체제의 스레드를 점유하게 된다. 동시 요청 수가 증가하거나 요청과 관련된 컴포넌트가 증가하면 운영체제의 가용 스레드가 부족해 응답 시간이 늦어지거나 서버가 중단되는 문제가 발생할 수 있다. 따라서 동기식 블로킹 I/O를 과도하게 사용하면 마이크로서비스 시스템에 에러가 발생하기 ..
[디자인 패턴] 싱글톤 패턴 (Creational)
싱글톤(Singleton)전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하고, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 주의사항객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다.-> private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다.다중 스레드에서 경합 조건(Race Condition)이 발생해 인스턴스가 2개 이상 생성되는 경우를 막아야 한다. 아래 코드는 위 주의사항을 잘 지킨 예시이다.public class SingletonService { private static final SingletonService instance = new Singleto..
![[디자인 패턴] Observer Pattern (behavioral)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrO7H1%2FbtrlS2ckgip%2FR4zJUTHtP2kAKG7psxsQH1%2Fimg.png)
[디자인 패턴] Observer Pattern (behavioral)
용어 정리 Subject : 데이터(db) Observer : subject에 관심을 가지고 사용하는 클래스 또는 컴포넌트 사용 용도 및 상황 각각의 observer들이 subject에 대한 알림에 대응해 서로 다른 행동을 취해야 할 때 subject이 하나의 observer에 의해 변경되었을 때, 모든 observer들이 알림을 받아야 하고 그에 따른 업데이트를 진행해야 하는 경우 해결 방안 subject을 설계할 때 observer의 행동에 영향을 받지 않도록 설계해야한다. 모든 subject은 observers에 대해서 독립적이어야 한다. Observer Pattern의 구조 Subject와 Observer 클래스는 추상클래스로서 각각 ConcreteSubject와 ConcreteObserver의 ..