728x90
gof builder 패턴 코드에 대한 분석을 바탕으로 Builder 패턴에 대해서 알아보기로 했습니다.
MakeReport는 Java 인터페이스로, 보고서를 생성하는 기본 구조를 정의합니다. 이 인터페이스는 Header, Body, Footer 세 가지 주요 요소를 생성하는 메서드와 최종적으로 보고서를 반환하는 메서드를 포함하고 있습니다. 이러한 설계는 확장성과 유연성을 고려한 객체지향 프로그래밍(OOP)의 인터페이스 기반 설계 원칙을 잘 보여줍니다.
코드 분석
package gof;
public interface MakeReport {
public void MakeHeader();
public void MakeBody();
public void MakeFooter();
public String getReport();
}
주요 구성 요소
- MakeHeader()
- 보고서의 헤더를 생성하는 메서드입니다.
- 헤더에는 회사 이름, 날짜, 제목과 같은 일반적인 정보가 포함될 수 있습니다.
- MakeBody()
- 보고서의 본문을 작성합니다.
- 주요 내용, 통계 데이터, 분석 결과 등을 담을 수 있습니다.
- MakeFooter()
- 보고서의 푸터를 생성합니다.
- 작성자 정보, 페이지 번호, 저작권 정보 등이 포함될 수 있습니다.
- getReport()
- 보고서를 생성한 후 최종적으로 반환하는 메서드입니다.
- 이 메서드를 통해 완성된 보고서를 String 형태로 전달받을 수 있습니다.
인터페이스 설계 특징
- 추상화: 구체적인 구현 내용이 없으며, 이를 통해 다양한 보고서 형식에 대해 동일한 메서드 구조를 강제합니다.
- 유연성: 다양한 보고서 형식(HTML, PDF, Plain Text 등)을 지원하려면 해당 인터페이스를 구현하여 커스텀 보고서를 쉽게 제작할 수 있습니다.
- 확장성: 새 보고서 형식을 추가할 때 기존 코드를 변경하지 않고도 확장이 가능합니다. (OCP 원칙 준수)
활용 사례
- HTML 보고서 생성
public class HtmlReport implements MakeReport {
private StringBuilder report = new StringBuilder();
@Override
public void MakeHeader() {
report.append("<header><h1>HTML Report</h1></header>");
}
@Override
public void MakeBody() {
report.append("<body><p>This is the body of the report.</p></body>");
}
@Override
public void MakeFooter() {
report.append("<footer><p>Footer Information</p></footer>");
}
@Override
public String getReport() {
return report.toString();
}
}
- Plain Text 보고서 생성
public class TextReport implements MakeReport {
private StringBuilder report = new StringBuilder();
@Override
public void MakeHeader() {
report.append("=== Report Header ===\n");
}
@Override
public void MakeBody() {
report.append("This is the body of the report.\n");
}
@Override
public void MakeFooter() {
report.append("=== Report Footer ===\n");
}
@Override
public String getReport() {
return report.toString();
}
}
사용 예제
public class ReportDemo {
public static void main(String[] args) {
MakeReport htmlReport = new HtmlReport();
htmlReport.MakeHeader();
htmlReport.MakeBody();
htmlReport.MakeFooter();
System.out.println(htmlReport.getReport());
MakeReport textReport = new TextReport();
textReport.MakeHeader();
textReport.MakeBody();
textReport.MakeFooter();
System.out.println(textReport.getReport());
}
}
출력 결과
<header><h1>HTML Report</h1></header><body><p>This is the body of the report.</p></body><footer><p>Footer Information</p></footer>
=== Report Header ===
This is the body of the report.
=== Report Footer ===
장점 및 단점
장점
- 코드 재사용성: 동일한 인터페이스를 통해 다양한 보고서 형식을 구현할 수 있습니다.
- 유지보수성: 보고서 형식을 변경하거나 추가할 때 기존 코드에 영향을 주지 않습니다.
- OCP(Open-Closed Principle): 새로운 보고서 형식을 추가할 때 기존 인터페이스 구조를 변경할 필요가 없습니다.
단점
- 복잡성 증가: 간단한 보고서 생성에도 여러 클래스를 만들어야 할 수 있습니다.
- 구현 의존성: 인터페이스를 사용할 때 구현체를 직접 지정해야 하므로, DI(Dependency Injection) 또는 Factory 패턴이 필요할 수 있습니다.
결론
MakeReport 인터페이스는 확장성과 재사용성을 극대화하기 위해 설계되었습니다. 이를 활용하면 다양한 보고서 형식을 체계적으로 생성하고 관리할 수 있습니다. 그러나 단순한 요구사항에서는 과도한 설계가 될 수도 있으므로, 프로젝트의 복잡도와 요구사항에 따라 적절히 활용하는 것이 중요합니다.
728x90
'Design Pattern with Java' 카테고리의 다른 글
5. 템플릿메소드 패턴(Template Method) (0) | 2025.01.15 |
---|---|
4. Builder 패턴(from effective-java) (0) | 2025.01.07 |
3.추상 팩토리 패턴(Abstract Factory Pattern) (0) | 2025.01.07 |
2.프로토타입 패턴(Prototype Pattern) (0) | 2025.01.07 |
1. 싱글톤 패턴(Singleton Pattern) (0) | 2025.01.07 |