1. 싱글톤 패턴
= singleTon. 객체를 메모리에 단 한번만 올려 사용하는 패턴
2. 팩토리 패턴
1) 팩토리(factory)란 ?
- 객체 생성을 처리하는 클래스
- 팩토리를 사용했을 때의 장점
1. 객체 생성코드를 전부 한 객체 또는 메소드에 집어넣으면 코드에서 중복되는 내용을 제거할 수 있다.
2. 클라이언트 입장에서는 객체 인스턴스를 만들 때 필요한 구상 클래스가 아닌 인터페이스만 필요로 하게 된다.
3. 구현이 아닌 인터페이스를 바탕으로 프로그래밍을 할 수 있고, 그 결과 유연성과 확장성이 뛰어난 코드를 만들 수 있다.
- 정적 팩토리 : 객체를 생성하기 위한 메소드를 실행시키기 위해서 객체의 인스턴스를 만들지 않아도 된다. 하지만 서브 클래스를 만들어서 객체 생성 메소드의 행동을 변경시킬 수 없다.
* 간단한 팩토리(simple factory)는 디자인 패턴이라기보다 관용구에 가깝다.
2) 의존성 뒤집기 원칙(Dependency Inversion Principle) - 추상화 지향!
- 추상회된 것에 의존하도록 만들어라. 구상 클래스에 의존하도록 만들지 않도록 한다는 원칙.
- 고수준 구성요소가 저수준 구성요소에 의존하면 안 된다.
(여기에서 '고수준' 구성요소는 다른 '저수준' 구성요소에 의해 정의되는 행동이 들어있는 구성요소이다.)
- 코드가 변하지 않을 것이라고 확신한다면 의존성 뒤집기 원칙을 적용할 필요 없다.
* 원칙을 지키는 데 도움이 될만한 가이드 라인!
- 어떤 변수에도 구상 클래스에 대한 레퍼런스를 저장하지 말자.(new 연산자를 사용하지 말자)
- 구상 클래스에서 유도된 클래스를 만들지 말자.(추상화된 것으로부터 유도된 클래스를 만들자)
- 베이스 클래스에 이미 구현되어 있던 메소드를 오버라이드 하지 말자.
* 팩토리 메소드는 객체 생성을 처리하며, 팩토리 메소드를 이용하면 객체를 생성하는 작업을 서브 클래스에 캡슐화 시킬 수 있다. 이렇게 하면 수퍼 클래스에 있는 클라이언트 코드와 서브 클래스에 있는 객체 생성 코드를 분리시킬 수 있다.
--------------------------------
팩토리에 해당하는 두 패턴 : 팩토리 메소드 패턴, 추상 팩토리 패턴
3) 팩토리 메소드 패턴
팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정하게 만든다. 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브 클래스에게 맡기는 것이 된다.
- 구상 형식의 인스턴스를 만드는 작업을 캡슐화 한다.
- 상속을 통해 객체를 만든다. 객체 생성시 클래스를 확장, 메소드를 오버라이드 한다.
- 클라이언트와 구상 형식을 분리, 클라이언트에서는 자신이 사용할 추상 형식만 알면 되고 구상 형식은 서브 클래스에서 처리한다.
- 클라이언트 코드와 인스턴스를 만들어야 할 구상 클래스를 분리시켜야 할 때, 어떤 구상 클래스를 필요로 하게 될지 미리 알 수 없는 경우에 사용한다.
- 서브 클래스를 만들고 팩토리 메소드를 구현하기만 하면 팩토리 메소드 패턴을 활용할 수 있다.
4) 추상 팩토리 패턴
추상 팩토리 패턴에서는 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성할 수 있다.
- 클라이언트에서 추상 인터페이스를 통해 일련의 제품들을 공급받을 수 있다. 이때, 실제로 어떤 제품이 생산되는지 전혀 알 필요가 없다. (클라이언트와 팩토리에서 생산되는 제품을 분리시킬 수 있다.)
- 실제 팩토리는 실행시, 서브 클래스에 의해서 결정된다.
- 객체 구성을 통해 객체를 만든다.(클라이언트와 구상 형식 분리)
- 제품군을 만들기 위한 추상 형식을 제공한다. 이형식의 서브 클래스에서 제품 생산 방법을 정의한다.
- 일단 인스턴스를 만들고 추상 형식을 써서 만든 코드에 전달하는 식으로 추상 팩토리 패턴을 사용할 수 있다.
- 일련의 연관된 제품을 하나로 묶을 수 있다.
- 구상 팩토리 구현시 제품 생산 용도로 팩토리 메소드를 사용하기도 한다.
- 클라이언트에서 서로 연관된 일련의 제품들(제품군)을 만들어야 할 때 사용한다.
*팩토리 메소드 패턴, 추상 팩토리 패턴 모두 객체 생성을 캡슐화해서 코드와 구상 형식을 분리시킬 수 있게 해준다.
'Web Programming > java-jsp' 카테고리의 다른 글
팩토리 패턴 (0) | 2013.09.08 |
---|---|
싱글톤 패턴 (0) | 2013.09.08 |
객체(Object)와 인스턴스(Instance) (0) | 2013.09.08 |
Tomcat + Spring Framework + myBatis셋팅 (0) | 2013.09.05 |
ermaster (0) | 2013.09.04 |