본문 바로가기

Pattern

(12)
행위패턴 - 옵저버패턴 1. 옵저버 패턴이란? 옵서버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다. (PUB/SUB) 쉽게 말해, 유튜버들이 새로운 영상을 올렸을 때 구독자들에게 알림을 보내주는 것이라 생각하면 된다. 사용자가 유튜버 채널에 구독 -> 유튜버가 채널에 새로운 영상 업로드 -> 해당 채널을 구독한 사람들에게 이벤트 통지 2. 샘플코드 자바에서 기본적으로 Observer 인터페이스와 Observable 클래스를 제공하지만 패턴을 직접 만들어 ..
행위패턴 - 책임 연쇄 패턴 1. 책임 연쇄 패턴이란? 클라이언트로부터의 요청을 처리할 수 있는 처리객체를 집합(Chain)으로 만들어 부여함으로 결합을 느슨하기 위해 만들어진 디자인 패턴이다. 다음과 같은 상황일 때 책임 연쇄 패턴을 고려할 수 있다. 요청의 발신자와 수신자를 분리하는 경우 요청을 처리할 수 있는 객체가 여러개일 때 그 중 하나에 요청을 보내려는 경우 코드에서 처리객체(handler)를 명시적으로 지정하고 싶지 않은 경우 2. 샘플 코드 구조 자체는 데코레이터 패턴과 비슷하기 때문에 데코레이터 패턴에서 사용했던 예제를 그대로 사용했다. ParamHandler public abstract class ParamHandler { private ParamHandler mHandler = null; public ParamH..
구조패턴 - 프록시 1. 프록시 패턴이란? 일반적으로 프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스이다. 프록시는 어떠한 것(이를테면 네트워크 연결, 메모리 안의 커다란 객체, 파일, 또 복제할 수 없거나 수요가 많은 리소스)과도 인터페이스의 역할을 수행할 수 있다. 쉽게 말해 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴이다. 2. 샘플코드 유저가 로그인 할 때 프록시에 아이디와 패스워드를 캐싱하여 접근 권한을 판단할 수 있는 기능을 만들어보겠다. 억지스러운 코드긴 하지만 중간에 대리자가 있다는 개념 위주로 이해하면 될 것 같다. RepositoryService public interface RepositoryService { boolean loginUser(String id, Stri..
구조패턴 - 데코레이션 패턴 1. 데코레이션 패턴이란? 데코레이터 패턴(Decorator pattern)이란 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴이다. 요리를 만들 때 음식을 맛깔스럽게 만들기 위해 데코를 한다고 하는데 이와 같이 무언가를 첨가한다는 개념으로 이해하면 좋을 것 같다. 2. 언제 사용하는지? 기존 기능은 유지하면서 새로운 기능을 더해야 할 때 사용할 수 있다.물론 기존 클래스를 상속 받아 새로운 서브 클래스를 만들어도 되지만 기능을 조합해야 하는 상황이라면 데코레이션 패턴이 더 유리하다. 3. 샘플코드 Http 통신할 때 Request Parameter를 체크하는 서비스를 만든다는 가정으로 작성하였다. ParamService interface ParamService { boolean check..
구조패턴 - 컴포짓패턴 1. 컴포짓패턴이란? 컴포지트 패턴(Composite pattern)이란 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한다. 2. 언제 사용하는지? 위 내용에 나와 있듯이 컴포지트 패턴은 클라이언트가 복합 객체나 단일 객체를 동일하게 취급하는 것을 목적으로 한다. 기본적으로 트리 구조로 작성되며 복합 객체와 단일 객체의 처리 방법이 다르지 않을 경우 전체 - 부분 관계로 정의하여 사용한다. 트리 구조의 가장 대표적인 예로 파일과 디렉토리 관계를 예로 들 수 있다. 3. 샘플 코드 Component // Component 역할 public interface Component { public int getSize(); } ..
생성패턴 - 팩토리메서드 1. 팩토리메서드 패턴이란? Factory method는 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며 자식 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 2. 종류 - 단순한 방식 팩토리메소드 패턴 중 가장 간단한 유형으로 생성 클래스를 외부에 두어 타입에 맞는 객체를 생성하여 반환하는 방식이다. CoffeeFacotry(생성 클래스) public class CoffeeFactory { public static Coffee orderCoffee(String recipe) { if (recipe.equals("LATTE")) { return new Latte(recipe, 4000); } else if (recipe.equals("AMERICANO")) { return ..
생성패턴- 싱글톤 1. 싱글톤 패턴이란? 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 설정 값과 같이 여러 클래스에서 접근 가능하며 공통된 값들을 공유할 때 많이 사용하는 방식이다. 2. 주의점 - 멀티쓰레드 안정성 싱글톤은 하나의 인스턴스를 공유하기 때문에 멀티쓰레드 환경에 유의하여 작성되어야 한다. public class Settings { private Settings() { } private Settings INSTANCE = null; public Settings getInstance() { if (INSTANCE == null) INSTANCE = new Setting..
RxJava 연산자 📚 RxJava에서 연산자란? RxJava에서 연산자란 함수이다. 연산자를 이용하여 데이터를 생성하고 통지하는 Flowable이나 Observerble 등의 생산자를 생성할 수 있다. 생산자에서 통지한 데이터를 다양한 연산자를 통하여 데이터를 가공하여 결과값을 만들어 낼 수 있다. 🙋‍♂️ Flowable, Observable 생성 연산자 interval 지정한 시간 간격마다 0부터 시작하는 숫자를 통지한다. (Long Type) InitialDelay 파라미터를 사용하여 최초 대기 시간에 대한 대기 시간을 지정할 수 있다. 완료 없이 계속 통지한다. 호출한 스레드와는 별도의 스레드에서 사용된다. Polling 용도의 작업을 사용할 때 활용될 수 있다. range(n, m) 지정한 값(n)부터 m개의 숫..