• 독서
[디자인 패턴] 스테이트 패턴(State Pattern)
# 설명 State pattern은 객체의 상태에 따라서 행동이 정해진다고 가정했을때, 상태를 객체 자체에서 체크(if-else구문)하여 행동을 정하는 것이 아닌, 상태를 객체화하여 필요에 따라서 다르게 행동하도록 행동을 위임하는 디자인 패턴이다. 클래스 전반에서 모든 기능이 상태에 의존적으로 행동된다면, 상태를 분리하여 클래스로써 작용 할 수 있도록하는 것이 유용하다. ## Context 운영체제에서도 등장했던 Context의 개념과 유사하다. 어떠한 상태를 쥐고 있는 객체이다. 이 객체의 상태가 변화함에 따라서, 다른 행위를 하게 될 것이다. ## State 인터페이스로써, 컨텍스트는 이 State에 구현된 handle(행위)를 호출함에 따라서, ConcreteState(구현된상태)에 따른 행위가 적..
[디자인패턴] 어댑터 패턴(Adapter Pattern)
# 설명 어댑터 패턴의 주요 개념은 요약하면 아래와 같다. 서로 다른 인터페이스를 중간에서 연결해주어 규격을 맞추어주는 것. 즉, 인터페이스가 서로 다른 것을 어댑터로 하여금 중간 매개체로 연결을 시켜주는 것이다. 안드로이드를 공부하다보면 리사이클러뷰를 구성할때 어댑터를 사용해야 했다. 영문도 모르고 사용했지만, 거기서 어댑터는 View와 데이터 사이를 중간 어댑터에서 관리를 도맡아 주는 역할을 했다. 어댑터 패턴을 사용하면 이미 사용중이거나 정의된 인터페이스들을 중간(어댑터)에서 매개체의 역할로써 사용하여, 이미 사용중인 클래스를 수정하지 않고 사용하게 해준다. 디자인패턴의 5가지 원칙 OCP원칙을 충족시킨다. Warrior 예제를 보면 어떤것인지 알 수 있을 것이다. 어댑터를 이용하는 방법은 크게 두..
[디자인 패턴] 컴포지트 패턴(Composite Pattern)
# 설명 Composite은 "합성물"이라는 뜻을 가지고 있다. 예측이 불가능한 이 이름을 먼저 위키백과에 검색해보자 컴포지트 패턴(Composite Pattern)이란 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동리하게 다루도록 한다. 트리구조는 쉽게 이해된다. 그렇다면 부분-전쳬계층을 뜻하는 단일 객체와 복합객체는 무슨 의미를 가지고 있는 것일까? 이를 흔히들 파일과 폴더의 구조로 설명을 한다고 한다. 폴더안에는 여러 파일이 들어갈 수 있을 뿐만 아니라 폴더를 가지고 있을 수도 있다. 그러나 파일안에 폴더는 들어가지 못한다. 단일객체가 파일, 복합객체가 폴더의 의미로 연결지어 보면 쉬울 것이다. 이를 통해 부분과 전체에 대한 복합 ..
[디자인패턴] 데코레이터 패턴(Decorator Pattern)
# 설명 객체(오브젝트)에 동적으로 책임(기능)을 추가한다. 뜻 그대로 피자의 토핑을 하나씩 올리는거와 같이 기능을 하나씩 추가해 나간다. 상속을 사용하지 않고도 유연하게 기능의 확장이 가능하다. ( 특히 자바는 다중 상속을 지원하지 않는다 ). Component - 동적으로 추가할(될) 서비스를 가질 수 있는 객체 정의 ConcreteComponent - 추가적인 서비스가 필요한 실제 구현 객체 Decorator - Component의 참조자를 관리하면서 Component에 정의된 인터페이스를 만족하도록 정의 ConcreteDecorator - 새롭게 추가되는 서비스를 실제 구현할 클래스로 addBehavior()을 통해 구현. ## 간단 예제 라면을 정의한 라면 클래스를 상속받는 카레라면과 너구리라면..
[디자인패턴] 브릿지 패턴(Bridge Pattern)
# 설명 기능의 확장과 구현의 확장을 따로 계층화 함 기능에 대한 여러가지 구현을 다양하게 적용 가능 기능과 구현을 혼재시키면 상속의 관계가 복잡해질 수 있기 떄문에 두 계층을 분리시켜 다리(Bridge)의 역할을 하게 함 기능의 확장과 구현의 확장을 따로 계층화 한다. 라는 말이 브릿지 패턴의 핵심이자 요지이다. 그러나 기능과 구현 또 이 확장이라는 것이 잘 와닿지 않을 수 있다. 이를 간단하게 설명해보자. ## 구현 계층 List라는 컬렉션은 LinkedList, ArrayList등 여러 형태로 구현이 가능하다. List라는 구현체에서 확장이라 함은 이러한 LinkedList,ArrayList와 같은 것이다. List를 vector로 구현의 확장이 가능할 것이다. 이렇게 리스트의 구현사항과 구현형태를..
[디자인패턴] 전략패턴 (Strategy Pattern)
# 설명 - 전략패턴 적용 정책이나 알고리즘을 교체하여 유연하게 사용 가능함 if-else문과 같은 것이 없어질 수 있음 한 분야(행동)에 대한 다양한 알고리즘이 존재하면, 이 알고리즘을 캡슐화하여 사용 할 수 있음 시스템이 커질경우 메서드 중복문제를 해결함 OCP(Open-Close-Principle)에 위배되지 않게 함. 확장에는 열려있어야하며 수정에는 닫혀있어야함 ## 예제 전화 상담을 하는 상담원이 존재한다고 가정하자. 이 상담원들에게는 3가지의 근무 방식(스케줄링)이 존재한다. RoundRobin, LeastJob, Priority 방식으로 다음 상담자를 배분할 수 있다. Scheduler이라는 Strategy(전략)을 정의하고, RoundRobin, LeasJob, Priority에 맞는 알고..