본문 바로가기

Dev.../패턴자료

Behavioral Patterns Behavioral Patterns Behavioral 패턴들은 객체들 사이의 통신과 관련된 가장 명확한 패턴이다. 이 단원에서는 다음과 같은 패턴들을 살펴볼 것이다. The Observer Pattern Observer 패턴은 클래스들이 서로 변경을 알아 챌 수 있도록 하는 방법을 정의한다. The Mediator Pattern Mediator 패턴은 클래스간에 서로 아는 것을 갖는 것으로부터 모든 클래스들을 유지하기 위하여 또 다른 클래스를 사용함으로써 간단하게 클래스 간의 통신을 어떻게 할 지를 정의한다. The Chain of Responsibilty Pattern Chain of Responsibility 는 클래스가 인식될 때까지 클래스들 사이의 요청을 전달하여 클래스들 사이의 디커플링을 훨씬.. 더보기
Summary of Structural Patterns Summary of Structural Patterns Adapter 패턴은 어떤 클래스의 인터페이스를 다른 클래스의 인터페이스로 변경할 때 사용한다. Bridge 패턴은 클라이언트 프로그램에서 나타내거나 사용하는 실제적인 종류의 클래스들을 변경을 허용하는 동안 일정한 인터페이스를 유지하려는 의도를 가지고 있다. Composite 패턴은 객체들의 수집이나 그 자체가 조합되어 있는 객체들의 수집이다. Decorator 패턴은 클래스가 주어졌을 때 그것을 새로운 가능성을 추가하고, 기저 클래스에 변경되지 않은 메소드를 건내준다. Facade 패턴은 복잡한 상속구조의 객체들의 그룹에서 그러한 데이터를 접근할 수 있는 간단한 인터페이스를 제공한다. Flyweight 패턴은 작고, 유사한 클래스 인스턴스의 급증을.. 더보기
The Decorator Pattern The Decorator Pattern 데코레이터 패턴은 새로 상속 받아 클래스를 생성하는 것 없이 개별의 객체들의 행위를 수정할 수 있는 방법을 제공한다. 8개의 객체들을 가지는 프로그램이 있다고 해보자. 그러나 그 중 3개는 추가적인 속성이 필요하다. 이러한 객체들의 각각에 대하여 상속받아 클래스를 생성할 수도 있고, 많은 경우에 이것은 완벽하게 받아 들일 수 있는 해결책일 수 있다. 그러나, 이 세 객체의 각각이 다른 수정을 요구한다면, 이것은 세 개의 상속 받은 클래스를 생성하는 것을 의미한다. 게다가, 클래스들 중에 하나가 다른 두개 클래스의 특성을 가지고 있다면, 혼란스럽고 불필요한 클래스를 생성하게 된다. 예를 들어, 툴바에 있는 몇몇 버튼들 주위에 특별한 테두리를 그리려 한다고 가정해 보자.. 더보기
The Bridge Pattern The Bridge Pattern 브리지 패턴은 클래스의 구현으로부터 인터페이스를 분리하는데 사용되어진다. 브리지 패턴은 추상화 정도에 의한 계층으로 구분되어 있고 또 이를 구현하는데 있어 몇 개의 계층으로 나누는 경우에 유용한 패턴이다. 추상화 정도와 구현에 따라 완전히 구별되는 여러 클래스로 나누기 보다는 이를 동적으로 조합되는 몇 개의 상이한 클래스로 관리한다. 어떤 생산물의 목록을 하나의 화면에 나타내고자 한다 가정해 보자. 나타내기 위한 가장 간단한 방법은 "JList" 클래스를 사용하는 것이다. 그러나, 생산물의 일부분은 팔리게 되었다면, 우리는 판매와 관련하여 하나의 표안에 생산물을 나타내고자 할 지도 모른다. 우리는 앞에서 어댑터 패턴에 대하여 공부했는데, 어댑터에 기반의 클래스를 생각하게.. 더보기
The Flyweight Pattern The Flyweight Pattern 데이터를 표현하기 위한 작은 클래스의 인스턴스들을 많이 생성해야 할 경우가 있다. 종종, 만약 몇개의 파라미터에 대한 것만 제외하고 기본적으로 같은 같은 인스턴스들이다라는 것을 인식할 수 있다면 인스턴스를 만들 필요가 있는 서로 다른 클래스들의 수를 크게 줄일 수 있다. 만약 그러한 변수들을 클래스 인스턴스의 외부로 옮길 수 있고 메소드가 호출하는 부분에서 그것들을 건내 줄수 있다면 나뉘어진 인스턴스의 수는 크게 줄일 수 있다. Flyweight 디자인 패턴은 그러한 클래스들을 조절하는 거에 대해서 방법을 제시한다. 인스턴스가 유일하도록 인스턴스의 고유한 데이터를 참조하고, 아규먼트로 전달되는 고유하지 않는 데이터를 참조하게 한다. Flyweight는 각각의 문자들.. 더보기
The Facade Pattern The Facade Pattern 종종 프로그램이 전개되고 개발됨에 따라, 프로그램들은 복잡해진다. 사실, 디자인 패턴을 이용하는 거에 대한 흥분은 이러한 패턴들이 때때로 프로그램의 흐름을 이해하는 것을 어렵게 하는 많은 클래스들을 생성한다는 것이다. 게다가, 그것들은 복잡한 시스템일 수도 있고, 복잡한 인터페이스를 가지고 있을 수도 있다. Facade 패턴은 이러한 하위 시스템에 대한 간단한 인터페이스를 제공하여 복잡한 것을 간단히 만드는 것이다. 이 간단성이 놓여있는 클래스의 유연성을 줄이는 경우가 있지만, 보통 대부분의 약아빠진 사용자들을 제외하고는 모두에게 필요한 함수를 제공한다. 다행스럽게도, 우리는 Facade가 유용하게 사용될 수 있는 예에 대하여 제공되는 복잡한 시스템을 작성할 필요가 없다.. 더보기
The Proxy Pattern The Proxy Pattern Proxy 패턴은 간단한 객체로 복잡한 객체를 표현하고자 할 때 사용되어진다. 만약 어떤 객체를 생성하는 것이 시간적으로나 컴퓨터 자원적으로 비용이 많이 든다면 , Proxy는 실제적인 객체를 필요로 할 때까지 객체 생성을 연기하도록 할 것이다. 일반적으로 Proxy는 표현하고자 하는 객체와 같은 메소드를 갖고, 일단 객체가 로드되면, 그것은 Proxy에서 실제적인 객체의 메소드로 바뀌게 된다. Proxy 가 유용하게 사용되어 질 수 있는 유용한 경우는 다음과 같다 : 커다란 이미지와 같은 객체가 로드하는데 시간이 많이 걸린다면 Proxy가 유용한다. 원격 머신에 객체가 있고 그 객체를 네트워크를 통하여 로드하는데 느릴 수 있고, 특히나 로드하는 동안 네트워크 상태가 절정.. 더보기
The Composite Pattern The Composite Pattern 종종 프로그래머들은 독립적인 객체나 객체들의 수집으로 표현될 수 있는 객체를 갖는 컴포넌트로 이루어진 시스템을 개발한다. 컴포지트 패턴은 위의 두 가지 경우를 조정하기 위하여 계획되어진다. 컴포지트 패턴은 부분-전체의 상속을 만들거나 트리로 데이터를 표현하는 걸 만들려 할 때 사용되어 질 수 있다. 요약해서, 하나의 컴포지트는 객체들의 수집이다. 트리 목록에서, 어떤 객체들은 추가적인 가지들을 가지는 노드일 수도 있고 어떤것들은 잎들일 수도 있다. 하나의 조합에서 모든 객체들에 접근할 수 있는 인터페이스 분리가 문제이고, 노드들과 잎 사이를 구분하는 것이 문제이다. 노드들은 자식을 가질 수 있고, 자식들은 노드를 가질 수 있는 반면, 잎들은 자식을 가질 수 없고, .. 더보기
The Adapter Pattern The Adapter Pattern 어댑터 패턴은 어떤 클래스의 인터페이스 프로그래밍을 다른 클래스로 변환할 때 사용되어진다. 우리는 어댑터를 하나의 프로그램에서 함께 작업하는 클래스간에 서로 관련성이 없게 하고자 할 때 사용한다. 어댑터의 개념은 그러므로 간단하다; 우리는 요구되는 인터페이스를 갖는 클래스를 작성하고 다른 인터페이스를 갖는 클래스와 통신할 수 있게 한다. 어댑터를 구현하는 방법에는 상속에 의한 방법과 객체 조합에 의한 방법이 있다. 첫번째 경우에서, 우리는 상속 받는 새로운 클래스를 만들고 요구되는 인터페이스에 매치되는 상속받은 새로운 클래스를 만들기 위해 필요로 하는 메소드를 추가한다. 다른 방법은 새로운 클래스 내부에 원본의 클래스를 포함하는 방법이고 새로운 클래스 내부에서 호출되는.. 더보기
Structural Patterns Structural Patterns Structural 패턴들은 어떻게 클래스들과 객체들이 좀 더 큰 구조에서 결합될 수 있는가를 설명한다. 클래스 패턴과 객체 패턴 사이의 차이점은 클래스 패턴은 어떻게 인스턴스가 프로그램 인터페이스들에 좀더 유용되게 사용되어 질 수 있는가를 설명하는 것이다. 반면 객체 패턴들은 어떻게 객체들이 객체 조합이나 다른 객체를 포함하는 객체들을 조합할 수 있는가를 설명하는 것이다. 예를 들어 우리는 다음과 같은 패턴들을 알아 볼 것이다. The Adapter Pattern Adapter 패턴은 더 쉽게 프로그래밍 할 수 있도록 인터페이스에 어울리는 하나의 클래스를 만들어 사용할 수 있다. The Composite Pattern Composite 패턴은 간단하거나 여러개의 객체.. 더보기