728x90
반응형
컴포지트 패턴은 객체들을 트리 구조로 구성하여 개별 객체와 복합 객체(객체들의 그룹)를 동일한 방법으로 다룰 수 있게 하는 구조적인 디자인 패턴입니다. 이 패턴은 객체들 간의 계층 구조를 표현하고, 클라이언트가 개별 객체와 복합 객체를 구분하지 않고 사용할 수 있도록 합니다.
장점
- 일관된 인터페이스: 개별 객체와 복합 객체를 동일한 방식으로 처리할 수 있어 코드를 단순화하고 일관성을 유지합니다.
- 계층 구조: 객체들 간의 계층 구조를 표현하여 복잡한 관계를 간단하게 모델링할 수 있습니다.
- 재귀적 구조: 복합 객체 내에 다른 복합 객체를 포함할 수 있어 계층 구조를 재귀적으로 표현할 수 있습니다.
- 클라이언트 코드 간소화: 클라이언트 코드가 개별 객체와 복합 객체를 구분하지 않고 동일한 인터페이스로 처리할 수 있으므로 코드가 간소화됩니다.
단점
- 복잡성: 컴포지트 패턴을 구현하기 위한 추가적인 추상화와 코드 구조가 필요할 수 있으므로 초기 구현에는 다소 복잡할 수 있습니다.
- 성능: 복합 객체 내에 수많은 자식 객체가 있을 경우 성능 저하가 발생할 수 있습니다.
사용 예시
컴포지트 패턴은 파일 시스템, 그래픽 계층 구조, 조직도와 같이 계층 구조를 가지는 구조를 모델링할 때 주로 사용됩니다. 예를 들어, 파일 시스템에서 폴더와 파일을 모두 동일한 방식으로 다룰 수 있습니다.
자바 예시 코드
다음은 컴포지트 패턴을 사용하여 파일 시스템을 모델링한 간단한 자바 예시 코드입니다.
import java.util.ArrayList;
import java.util.List;
// Component 인터페이스
interface FileSystemComponent {
void display();
}
// Leaf 클래스: 파일을 나타내는 클래스
class File implements FileSystemComponent {
private String name;
public File(String name) {
this.name = name;
}
public void display() {
System.out.println("파일: " + name);
}
}
// Composite 클래스: 폴더를 나타내는 클래스
class Folder implements FileSystemComponent {
private String name;
private List<FileSystemComponent> components = new ArrayList<>();
public Folder(String name) {
this.name = name;
}
public void addComponent(FileSystemComponent component) {
components.add(component);
}
public void display() {
System.out.println("폴더: " + name);
for (FileSystemComponent component : components) {
component.display();
}
}
}
public class Main {
public static void main(String[] args) {
// 파일 시스템 생성
Folder root = new Folder("루트");
Folder folder1 = new Folder("폴더 1");
File file1 = new File("파일 1.txt");
File file2 = new File("파일 2.txt");
// 파일 시스템 구조 구성
root.addComponent(folder1);
folder1.addComponent(file1);
folder1.addComponent(file2);
// 파일 시스템 출력
root.display();
}
}
코드 설명
- FileSystemComponent 인터페이스는 display 메서드를 정의하여 모든 컴포넌트에 공통의 인터페이스를 제공합니다.
- File 클래스와 Folder 클래스는 각각 파일과 폴더를 나타내며 display 메서드를 구현합니다.
- Folder 클래스는 다른 컴포넌트들을 추가할 수 있는 컨테이너 역할을 합니다.
- Main 클래스에서 파일 시스템을 구성하고 출력합니다.
이 코드에서 Folder는 복합 객체로, 다른 파일과 폴더를 포함할 수 있습니다. 클라이언트 코드에서는 파일과 폴더를 동일한 방식으로 다룰 수 있으며, 복잡한 파일 시스템을 효과적으로 모델링할 수 있습니다.
728x90
반응형
'개발 > 자바' 카테고리의 다른 글
[java] 데코레이터(Decorator) 패턴 (0) | 2024.01.11 |
---|---|
[java] 어댑터(Adapter) 패턴 (0) | 2024.01.11 |
[java] 추상 팩토리(Abstract Factory) 패턴 (0) | 2024.01.10 |
[자바] 팩토리 메서드(Factory Method) 패턴 (1) | 2024.01.10 |
[java] 싱글턴(Singleton) 패턴 설명 및 코드 (0) | 2024.01.09 |