정의
- 객체를 생성하는 인터페이스를 제공함.
- 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브 클래스에서 이루어지게 한다.
- 객체의 생성로직을 클라이언트 코드에 노출시키지 않음.
예제
// Abstract Product
interface Logger {
void log(String message);
}
- Logger 인터페이스 생성
// Concrete Product 1
class FileLogger implements Logger {
public void log(String message) {
System.out.println("Logging to a file: " + message);
}
}
// Concrete Product 2
class ConsoleLogger implements Logger {
public void log(String message) {
System.out.println("Logging to the console: " + message);
}
}
- 다양한 타입의 로거를 구현
- 각각 파일과 콘솔에 로깅하는 로직을 정의할 수 있다.
// Abstract Creator
abstract class LoggerFactory {
abstract Logger createLogger();
public void logMessage(String message) {
Logger logger = createLogger();
logger.log(message);
}
}
- 추상 생성자인 LoggerFactory정의
- createLogger 추상 메서드를 정의하여 로거 객체를 생성한다.
- logMessage 를 통해 메시지를 로깅가능하다.
class FileLoggerFactory extends LoggerFactory {
Logger createLogger() {
return new FileLogger();
}
}
class ConsoleLoggerFactory extends LoggerFactory {
Logger createLogger() {
return new ConsoleLogger();
}
}
- 구현체 생성자
- 생성을 담당하는 클래스를 concrete creator 라고 한다.
- createLogger 를 구현하는데
- 객체의 생성로직을 구현한다.
- 외부에 객체의 생성에 대해 캡슐화를 수행함.
public class Client {
public static void main(String[] args) {
LoggerFactory fileLoggerFactory = new FileLoggerFactory();
fileLoggerFactory.logMessage("This is a message to be logged in a file.");
LoggerFactory consoleLoggerFactory = new ConsoleLoggerFactory();
consoleLoggerFactory.logMessage("This is a message to be logged in the console.");
}
}
- 분기를 나누지 않고 별도의 객체를 각각의 의도에 맞게 생성가능하다.
장점
- 객체 생성 캡슐화
- 클라이언트는 객체 생성관련한 내용을 알 필요가 없다.
- 코드의 확장성
- 새로운 종류의 로거 추가를 위해 별도의 concrete product 와 concrete creator 클래스만 추가하면 된다.
- 단일 책임 원칙
- 각 클래스는 자신의 주요 책임을 수행한다.
LoggerFactory
클래스는 객체 생성에 중점을 둔다.
단점
- 코드의 양
- 클래스의 분화의 정도가 심각해진다..
- 어떤 기능을 추가하기 위하여 너무 많은 클래스로 분화되게 된다.
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[디자인패턴] 생성 패턴 - 추상 팩토리 메서드 (0) | 2023.10.07 |
---|---|
[디자인패턴] 3가지 디자인 패턴의 분류 (0) | 2023.10.07 |
[6단원]디자인 패턴 - 프록시 패턴 추가예제 (0) | 2023.10.01 |
[6단원]디자인 패턴 - 전략 패턴 (Strategy Pattern) (0) | 2023.09.23 |
[6단원]디자인 패턴 - 템플릿 콜백 패턴(Template Callback Pattern - 견본/회신 패턴) (0) | 2023.09.23 |