디자인 패턴

    옵저버 패턴 (Observer Pattern)

    옵저버 패턴 (Observer Pattern)

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

    전략 패턴 (Strategy Pattern)

    전략 패턴 (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 Singlet..

    [디자인 패턴] Observer Pattern (behavioral)

    [디자인 패턴] Observer Pattern (behavioral)

    용어 정리 Subject : 데이터(db) Observer : subject에 관심을 가지고 사용하는 클래스 또는 컴포넌트 사용 용도 및 상황 각각의 observer들이 subject에 대한 알림에 대응해 서로 다른 행동을 취해야 할 때 subject이 하나의 observer에 의해 변경되었을 때, 모든 observer들이 알림을 받아야 하고 그에 따른 업데이트를 진행해야 하는 경우 해결 방안 subject을 설계할 때 observer의 행동에 영향을 받지 않도록 설계해야한다. 모든 subject은 observers에 대해서 독립적이어야 한다. Observer Pattern의 구조 Subject와 Observer 클래스는 추상클래스로서 각각 ConcreteSubject와 ConcreteObserver의 ..