목록디자인패턴 (16)
JAVA Developer Training

비지터 패턴 (방문자 패턴) 비지터 패턴은 방문자와 방문 공간을 분리하여, 방문 공간이 방문자를 맞이 할 때, 이후에 대한 행동을 방문자에게 위임하는 패턴이다. = ( 실제 로직을 가지고 있는 객체(Visitor)가 로직을 적용할 객체(Element)를 방문하면서 실행하는 패턴 ) 비슷한 객체에서 어떤 동작을 해야할 때 방문자 패턴을 사용하면 수행되는 로직을 분리할 수 있다는 것 데이터 구조와 연산을 분리하여 데이터 구조의 원소들을 변경하지 않고 새로운 연산을 추가 할 수 있다. - 연산을 수행해야할 원소의 클래스를 수정하지 않고도 새로운 연산을 추가 가능하게 해준다는 말 개체 형식에 따라 적용할 구체적 행위를 분리하여 정의 한다는것이 중요한점 되시겠다. (행위적 패턴) 때문에 방문자 패턴은 *OCP원칙..

추상 팩토리 패턴 인스턴스를 만드는 절차를 추상화 하는 패턴인 *생성 패턴중 하나이다. - 생성패턴은 사용하면 무엇이 생성되고, 누가 이걸 만드며 , 어떻게 생성되는지 언제 생성할 것인지 결정하는데 유연성을 확보 할 수 있게 해준다. 추상 팩토리 패턴은 인터페이스들을 이용하여 서로 연관된, 서로 의존하는 객체들을 클래스를 지정하지 않고도 생성하는 패턴이다. 팩토리 패턴과 추상 팩토리 패턴 기존 팩토리 패턴에서는 팩토리 클래스에 들어오는 input값에 따라 if-else, switch 즉, 조건문을 사용하여 값에대해 다양한 서브클래스를 리턴하는 형식이였다면, 추상 팩토리 패턴은 값이 아닌 하나의 팩토리 클래스를 받는다. 추상 팩토리 패턴에서는 팩토리 클래스에서 서브클래스를 생성하는 데에 있어 이러한 조건문..

이터레이터 패턴 컬렉션 구현방법을 노출시키지 않으면서 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공해 주는 패턴 , 다시 말해 컬렉션 이나 집합객체의 내부 구현방법을 드러내지 않으면서 그안에 있는 모든 원소에 순차적으로 접근할 수 있는 수단을 제공해주는 패턴이다. - 반복자(Iterator)를 만들어 패턴을 사용하면 컬랙션 객체안에 들어있는 항목에 접근하는 방식을 통일 할 수 있다. 사용 이유 이터레이터 패턴은 특정 집합체에 대하여 자세히 알지 못함에도 해당 집합체가 가지고있는 모든 항목들에 대해 반복작업을 수행할 수 있게 해주기 때문에 접근성이 높아진다고 볼 수 있다. 또한 접근방식을 통일 해 사용하기에 어떠한 종류의 집합 객체에도 사용 할 수 있는 다형적인 코드를 만들 수 ..

커맨드 패턴 커맨드 패턴은 이벤트가 발생했을 시 실행될 기능들의 변경이 필요한 경우 이벤트를 발생시키는 클래스를 변경하지않고 재사용 하고자 할 때 유용하다 , 실행될 기능들을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴이다. 커맨드를 추가하고 난 다음 Receiver(수신자), Invoker(발동자) 클래스만 수정하기만 하면 바로 추가된 커맨드를 사용할 수 있다. *Receiver = 행동을 담당하는 객체 = 기능을 수행하는 객체 Invoker = 커맨드를 저장하는 객체 - 버튼이 어떤 수행을 할 것인지 결정 쉽게말해 실행된 이벤트(요청)들을 객체로 감싸서 관리한다는 말 사용 이유 다른 시간에 요청을 작성하고 실행해야할때나 롤백,로깅, *트랜잭션 기능을 지원할..

퍼사드 패턴 어떤 서브 시스템의 인터페이스에 대한 통합된 인터페이스를 제공한다. 퍼사드에서 고수준의 인터페이스를 정의 하기 때문에 서브시스템을 더 쉽게 사용할 수 있다. - 여기서 퍼사드란 프랑스어로 건물의 외관 이라는 뜻을 가지고 있다. 건물의 외관을 본다면 내부의 구조까지는 보이지 않는다는 점을 이해하면 좋을 것이다. 즉, 퍼사드 패턴은 많은 서브시스템(내부 구조)을 거대한 클래스(건물 외관)로 감싸서 편리한 인터페이스를 제공해 준다. 사용 이유 여러 구성 요소로 구성된 시스템을 사용자가 작업 수행시 간단한 방법으로 이용하고 싶을때 사용한다 예시로는 온라인 쇼핑몰이 있겠다. 온라인 쇼핑몰의 경우 사용자는 단순히 주문을 하고 싶을 뿐이지 주문하는 행동을 했을때 장바구니 상태는 어째서 이렇게 바뀌었는지 ..
스테이트 패턴( State Pattern ) 스테이트 패턴, 즉 상태패턴은 규칙에따라 객체의 상태를 변화시켜 객체가 할 수 있는 행위를 바꾸어주는 패턴을 말한다. 스테이트 패턴의 사용 이유 상태 패턴은 객체의 상태를 효율적으로 관리 할 수 있도록 도와준다. 보통 코드를 짰을 경우 각 객체들은 상태값이 변경됨에 따라서 다른 일을 수행하는데 이를 객체에 어떤 동작이 수행될때 마다 상태를 파악하여 그에 맞는 동작을 수행하게 한다면 굉장히 코드가 길어지고 난잡해질 것이며, 수많은 조건문들을 걸어 주어야 할 것이다. 이를 스테이트 패턴을 이용해서 더 나은 코드를 만든다면, 공통된 상태 인터페이스를 만들고 각 상태에 따라 객체를 생성한후 상세 동작을 상태 객체에서 수행하도록 설정하는 것이 되겠다. 예시 우리가 사용..
싱글톤 패턴 ( Singleton Pattern ) 어플리케이션이 실행될때 최초 1회만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴 생성자가 여러번 호출 되더라도 실제로 생성되는 객체는 하나이며 최초 생성 이후 호출된 생성자는 최초 생성된 객체를 반환한다. 주로 공통된 객체를 여러개 생성해서 사용할때 사용된다. 대표적인 예로 도메인관점으로 인스턴스가 한개만 존재하는것을 보증하고 싶을 경우 사용한다. 장점 한번의 객체생성으로 재사용이 가능하기때문에 메모리 낭비를 방지할 수 있다. 또한 한번의 생성으로 *전역성을 띄기에 다른 객체와 공유가 용이하다. *공통으로 사용되는 인스턴스 이기에 다른클래스의 인스턴스들이 접근하여 사용할 수 있다. 단, 여러클래스의 인스턴스가 동시에 싱글톤 인스턴..
프록시 패턴에서 프록시(Proxy)는 대리, 대리인이라는 뜻으로 직접적으로 수행할 기능을 거쳐가게 하는 것이라 생각하면된다. 쉽게말해 업무관련 일정 질문을 CEO가 아닌 CEO의 비서에게 물어본다고 보면 된다. 프록시 패턴의 예로는 우리가 가지고있는 스마트폰의 게임화면을 들 수 있겠다. 요즘의 스마트폰 게임은 로딩창이 로딩창의 역할만을 하는 것이아니라 로딩되는 중 미니게임, 혹은 튜토리얼을 알려주는 식이 많다. 이는 로딩을 기다리는 유저에게 기다리는 시간의 체감을 줄여주기 위해서인데 이때 또한 프록시 패턴을 이용했다고 볼 수 있다. 1. 설치,진행 까지의 기능 과 2. 튜토리얼, 미니게임의 기능이 별도로 운영되는 것이다. 즉, 용량이 큰, 작업이 큰 1번의 작업 중 2번이 완료되었을때 미리 2번을 보여주..