본문 바로가기

Knowledge

(36)
퍼사드 패턴 (Facade Pattern) 퍼사드 패턴 (Facade Pattern) 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다.퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있다. 퍼사드 패턴과 유사한 데코레이터 패턴과 어댑터 패턴을 비교해보면...데코레이터 패턴 : 객체를 감싸서 새로운 행동을 추가어댑터 패턴 : 인터페이스를 변경해서 클라이언트에서 필요로 하는 인터페이스로 적응시키기 위한 용도퍼사드 패턴 : 어떤 서브시스템에 대한 간단한 인터페이스를 제공하기 위한 용도 퍼사드 패턴의 예제컴퓨터를 작동시키기 위해 우리는 단순히 전원버튼만을 누르지만 이것도 퍼사드 패턴의 예라고 볼 수 있다.실제로 전원을 키면 일어나는 작업은 한두가지가 아니다. ※ 만약 퍼사드 패턴이 적용되지 않은 컴퓨..
어댑터 패턴 (Adapter Pattern) 어댑터 패턴 (Adapter Pattern) 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다.어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. 》》 프로그램 세계에서는 이미 제공되어 있는 것을 그대로 사용할 수 없을 때 필요한 형태로 교환하고 사용하는일이 자주 있다. 》》 어댑터 패턴을 아이폰7과 이어팟에 비유해보자면...클라이언트 : 타겟 인터페이스에 맞게 구현되어있다.어댑터 : 타겟 인터페이스를 구현하며 여기에는 어댑티 인스턴스가 들어가있다.어댑티 : 어댑터에 의해 변환된 것을 받는다. 어댑터를 어떻게 사용하는걸까?1. 클라이언트에서 타겟 인터페이스를 사용하여 메소드를 호출함으로써 어댑터에 요청한다.2. 어댑터에서는 ..
List (ArrayList, LinkedList, Vector) 리스트 (List) 순열(sequence)라고도 불리며, 순서를 가지고 일렬로 나열한 원소들의 모임이다.순서가 있다는 점에서 집합과는 구별되며, 갈림길 없이 일렬로 나열되어 처음과 끝이 각각하나씩만 있다는 점에서 트리나 그래프와도 구별된다. 》》 저장공간이 정해져있지 않으므로 필요에 의해 자동으로 늘어난다.》》 중복이 있고, 순서가 있다. 자바에서는 List자료구조를 크게 ArrayList, LinkedList, Vector 로 세분화할 수 있다. ※ ArrayList객체 내부에 있는 배열에 데이터를 저장한다.ArrayList arraylist = new ArrayList(); 》》 ArrayList 정렬Collections.sort(this); // 올림차순Collections.sort(this, Co..
커맨드 패턴 (Command Pattern) 커맨드 패턴 (Command Pattern) 요구사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 다른 요구사항을 집어넣을 수도 있다.또한 요청내역을 큐에 저장하거나 로그를 기록할 수도 있고 작업 취소 기능도 지원 가능하게 한다. 》》 작업 요청을 객체의 형태로 캡슐화 하는 것이 가장 큰 목적이다.》》 즉, 커맨드 패턴을 사용하면 작업을 요청한 곳과 그 작업을 처리한 곳을 분리시킬 수 있다. ※ 커맨드패턴의 구조 클라이언트 : 커맨드 객체를 생성하고 인보커를 통해 리시버에 전달하여 요청한다.인보커 : 클라이언트의 커맨드 객체를 리시버에 전달한다.리시버 : 요청대로 특정 행동을 수행한다. 커맨드 : 어떠한 특정 행동을 담고 있는 추상 객체이다. 이를 식당에 비유하여 쉽게 설명하자면.... 클라이언트 -..
Map (HashMap, Hashtable, TreeMap) Map 이진 탐색 트리를 기반으로 두개의 자료형을 동시에 저장하도록 만든 자료구조이다. List와 Set이 순서나 집합적인 개념의 인터페이스라면 Map은 검색의 개념이 가미된 인터페이스이다.Map 인터페이스는 데이터를 삽입할 때 Key와 Value의 형태로 삽입되며, Key를 이용해서 Value를 얻을 수 있다. ※HashMapHashMap은 Map 인터페이스를 구현한 클래스로서 중복을 허용하지 않는다. Map의 특징인 Key와 Value의쌍으로 이루어져있다.Map hashmap = new HashMap(); ※HashtableHashMap과 동기화를 보장하냐 안하냐의 차이외에는 거의 동일한 자료구조라고 볼 수 있다.Hashtable hashtable = new Hashtable(); ※TreeMapHa..
싱글톤 패턴 (Singleton Pattern) 싱글톤 패턴 (Singleton Pattern) 싱글톤 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기위한 패턴이다. 》》 단 하나의 유일한 객체를 만들기 위한 디자인 패턴 여기서 중요한 것은 인스턴스가 단 하나만 만들어지고, 어디서든지 접근가능하게 한다는 점이다 !어디서 필요할까 ?정의를 살펴보면 알 수 있듯이 프로그램 상에서 객체가 하나만 필요할 때 사용된다.ex. 환경설정 관리 또는 로그관리, 동일한 DB커넥션 생성 → 여러 인스턴스가 존재할 필요가 없다!싱글톤 패턴 대신 전역 변수에 객체를 대입해서 사용해도 되지 않을까? 전역 변수에 객체를 대입하면 프로그램이 시작될 때 객체가 생성된다. 그런데 만약 프로그램이 끝날때까지그 객체를 한번도 쓰지 않..
추상 팩토리 패턴 (Abstract Factory Pattern) 추상 팩토리 패턴 (Abstract Factory Pattern) 추상 팩토리 패턴에서는 인터페이스를 이용하여 서로 연관된 또는 의존하는 객체를구상클래스를 지정하지 않고도 생산할 수 있다. 추상 팩토리 패턴을 이용해서 코드를 구성하면 클라이언트에서는 실제로 어떤 객체가 생산되는지 전혀 알 필요가 없게된다.이렇게 클라이언트와 객체 생성을 분리시키는 것을 추상 팩토리 패턴이라고 한다. 여기서 중요한 것은 인터페이스를 이용하여 생산한다는 점이다. 추상 팩토리패턴과 팩토리 메소드 패턴의 차이점은?두가지 패턴 모두 객체를 생성하는 일을 하지만,팩토리 메소드 패턴은 상속을 이용해서 객체를 생성하고, 추상 팩토리 패턴은 객체 구성을 이용하여 객체를 생성한다는 점이다.
팩토리 메소드 패턴 (Factory Method Pattern) TestClass test = new TestClassA(); 여기서 new는 무엇일까 ? new를 사용한다는 것은 구상 클래스의 인스턴스를 만들겠다는 뜻이다. 그렇다면 만약 다음과 같은 상황을 가정해보자. TestClass test; if(A){test = new TestClassA();}else if(B){test = new TestClassB();}else if(C){test = new TestClassC();}else if ..... 일련의 구상클래스들이 있을 때는 어쩔 수 없이 위와 같은 코드를 만들어야 하는 경우가 있다.이렇게 코드를 짜게되면 나중에 변경하거나 확장할 때 어려움을 겪는다. 문제가 "new"에 있는걸까?new 자체에 문제가 있는 것은 아니다. 문제가 있는건 바로 "변화" 때문.인..