본문 바로가기

Dev.../패턴자료

The Prototype Pattern The Prototype Pattern 프로토타입 패턴은 매우 시간을 많이 소비하거나 좀 복잡한 클래스의 인스턴스를 생성할 때 사용된다. 그래서, 더 많은 인스턴스를 생성하는 것 보다는 인스턴스 원본의 사본을 만들어 적당하게 수정하는 것이 낫다. 프로토타입들을 그것들이 제공하는 처리과정의 타입에서만 다른 클래스들을 필요로 할 때마다 사용되어질 수 있다. Cloning in Java clone 메소드를 이용하여 자바의 어떤 객체이든지 간에 사본을 만들 수 있다. Jobj j1 = (Jobj)j0.clone(); clone 메소드는 항상 Object 타입의 객체를 반환한다. 그래서 복사한 객체의 실제 타입으로 형 변환을 해야 한다. clone 메소드를 사용할 때는 3가지 중요한 제한사항이 있다. clone .. 더보기
The Builder Pattern The Builder Pattern 우리는 이미 생성 메소드의 인자로 넘겨지는 데이터에 의존하는 여러개의 서로 다른 하위 클래스 중의 하나를 반환하는 Factory 패턴을 보았었다. 그러나 단지 계산 알고리즘 뿐만 아니라 나타낼 필요가 있는 데이터에 의존하는 서로 다른 사용자 인터페이스를 가정해 보자. 전형적인 예는 이메일 주소록이 될 것이다. 아마 주소록에는 사람들과 사람들의 그룹 둘 다 가지고 있을 것이고, 사람이름, 회사, 이메일 주소, 전화번호를 가지고 있는 사람창을 변경시키기 위해 주소록을 디스플래이하기를 기대하게 될 것이다. 반면에 주소 페이지에서 그룹을 표시하고자 한다면, 그룹의 이름을 보고자 할 것이다. 한 사람을 클릭하면 그룹과 다른 것들을 얻을 수 있다. 모든 이메일 주소는 아래 그림처.. 더보기
The Singleton Pattern The Singleton Pattern Singleton 패턴은 Creational 패턴들과 같은 그룹에 속하지만, "non-creational" 패턴의 확장적인 면이 있다. 프로그래밍에서 클래스의 인스턴스를 하나만을 갖게 해야 할 경우가 있다. 예를 들어 우리의 시스템은 오직 하나의 윈도우 메니져나 프린트 스풀러를 가질 수 있다. 유일하게 하나의 인스턴스를 갖는 클래스를 만드는 가장 간단한 방법은 static 변수를 클래스에 포함시키는 것이다. static 변수는 유일한 인스턴스의 하나이고, 인스턴스의 수는 문제가 되지 않는다. static boolean instance_flag = false;문제는 생성된 인스턴스가 성공적인지 아닌지를 어떻게 찾는가 인데 이것은 생성자가 반환을 하지 않기 때문이다. .. 더보기
The Abstract Factory Pattern The Abstract Factory Pattern 추상화 팩토리 패턴은 팩토리 패턴보다 더 추상화한 단계이다. 이 패턴은 연관된 객체의 여러 클래스들 중의 하나를 반환하고자 할 때 사용할 수 있다. 즉, 추상화 팩토리는 여러 팩토리들 중의 하나를 반환하는 팩토리 객체이다. 추상화 팩토리의 고전적인 응용중의 하나는 컴퓨터시스템이 다중의 "룩앤필(look-and-feel)"을 지원하는 경우에서의 사용이다. 여기서 팩토리는 사용하는 시스템이 windows이면 windows를 반환하는 객체이다. 자바에서는 룩앤필을 지원하는데 그 사용예를 잠깐 살펴보자. String laf = UIManager.getSystemLookAndFeelClassName();try {UIManager.setLookAndFeel(laf.. 더보기
The Factory Pattern The Factory Pattern 객체 지향 프로그램에서 계속해서 볼 수 있는 패턴 중의 하나는 Factory 패턴 또는 클래스이다. Factory 패턴은 제공된 데이터에 의존하는 여러 가능한 클래스 중의 하나를 반환하는 것이다. 일반적으로 반환되는 모든 클래스는 공통적인 부모 클래스와 공통적인 메소들을 가지지만, 그것들은 각각은 다른 일을 하고, 다른 종류의 데이터를 위해 최적화 되어진다. How a Factory Works아래의 Factory 다이어 그램은 Factory 패턴의 이해를 돕기 위한 것이다. 그림에서 x는 상위 클래스이고 xy와 xz는 x로 부터 파생되었다. Factory는 입력된 인자에 의존하여 하위 클래스를 반환을 결정하는 클래스이다. 오른쪽에서 어떤 abc라는 값이 주어질 때의 g.. 더보기
Creational Patterns Creational Patterns 모든 Creational Patterns은 객체의 인스턴스를 생성하는 최상의 방법과 관련이 있다. 이것은 작성된 프로그램이 생성되고 배치된 객체들과 의존적이지 않아야 하기 때문에 중요하다. 자바에서는 가장 간단한 방법으로 new 연산자를 이용하여 객체들의 인스턴스를 생성하는 방법이다. Fred = new Fred() ; //instance of Fred class 그러나 이 방법은 프로그램 안에서 생성된 객체가 의존적이어서 결국 코딩이 어렵게 된다. 많은 경우에, 생성된 객체의 정확한 본질은 프로그램의 요구에 의하여 변경되어 질 수 있고, "createor"라는 특수한 클래스로의 추상화 과정은 프로그램을 보다 유연하고 일반적으로 만들 수 있게 한다. The Factor.. 더보기
The History of Design Patterns The History of Design Patterns 소프트웨어에 대한 디자인 패턴의 아이디어는 건축 분야에서 나왔다. 1977년과 1979년에 건축가인 크리스토퍼 알렉산더(Christopher Alexander)는 “A Pattern Language:Towns, Buildings, Construction”라는 제목의 책과 “The Timeless Way of Building”이라는 제목의 책 두 권을 발표했다. 이 두 권의 책이 담고 있는 기본 아이디어는 건축물의 설계에 빈번하게 발생하는 동일 설계 내용이 있으며 따라서, 이런 것들을 하나의 패턴으로 보고 다른 건축물 설계에 재사용하는 것이 여러 가지 면에서 이득을 가져 다 준다는 것이다. 두 권의 책이 담고 있는 이런 기본 아이디어는 건축 영역을 벗.. 더보기
Some Background on Design Patterns Some Background on Design Patterns 1995년 Richard Helm, Ralph Johnson, John Vlissides 는 그들의 저서에서 '객체지향 소프트웨어를 설계하는 일은 어려운 일이며, 재사용이 가능한 소프트웨어를 설계하는 일은 그 보다 한층 더 어려운 일'이라 했다. 디자인 패턴은 전문가들이 시행착오를 거쳐 만들어낸 경험의 산물이라 할 수 있다. 앞으로 소개 될 디자인 패턴들은 결국 재사용 가능한 객체들을 어떻게 설계한 것인가에 대한 경험적인 해답들이라 할 수 있을 것이다. 디자인 패턴들을 살펴 보기 전 객체지향 프로그램의 개념을 살펴 볼 것이며, 효율적인 객체지향 프로그램을 하기 위한 디자인 패턴의 정의를 내려 볼 것이다. Object-Oriented Progr.. 더보기
The Mediator Pattern The Mediator Pattern 어떤 프로그램이 여러 개의 클래스로 만들어져 있을 때 로직과 계산은 이러한 클래스로부터 논리적으로 나뉘어 진다. 그러나 이러한 고립적인 클래스들이 증가함에 따라 이러한 클래스들의 통신 문제가 보다 복잡해졌다. 다른 클래스의 메소드들에 대하여 아는 것이 필요한 클래스가 더 많아지고 클래스들의 구조는 더 얽혀 복잡해 진다. 이것이 프로그램을 읽는 것과 유지를 어렵게 한다. 게다가 프로그램을 변경하는 것이 어려운데 왜냐면 어떤 변화가 여러 개의 다른 클래스들에서 코드에 영향을 줄 지도 모르기 때문이다. Mediator 패턴은 이러한 클래스들 사이의 느슨한 커플링을 진행하여 이러한 문제를 해결할 수 있는 방법을 소개한다. Mediator는 다른 클래스들의 메소드들에 대한 정.. 더보기