
소프트웨어 개발
Composite Pattern컴포지트 패턴
컴포지트 패턴(Composite Pattern)은 개별 객체와 복합 객체를 동일하게 다루는 구조 패턴이다. 트리 구조를 표현할 때 사용하며, 파일 시스템, UI 컴포넌트 계층, 조직도 등에 적용된다.
구조
Component (인터페이스)
├── Leaf (단말 노드: 자식 없음)
└── Composite (복합 노드: 자식 포함, Component 목록 관리)Python 구현: 파일 시스템
python
from abc import ABC, abstractmethod
from typing import List
class FileSystemItem(ABC):
def __init__(self, name: str):
self.name = name
@abstractmethod
def get_size(self) -> int: pass
@abstractmethod
def display(self, indent: int = 0): pass
# Leaf
class File(FileSystemItem):
def __init__(self, name: str, size: int):
super().__init__(name)
self.size = size
def get_size(self) -> int:
return self.size
def display(self, indent=0):
print(" " * indent + f"📄 {self.name} ({self.size}KB)")
# Composite
class Directory(FileSystemItem):
def __init__(self, name: str):
super().__init__(name)
self._children: List[FileSystemItem] = []
def add(self, item: FileSystemItem):
self._children.append(item)
return self
def get_size(self) -> int:
return sum(child.get_size() for child in self._children)
def display(self, indent=0):
print(" " * indent + f"📁 {self.name}/")
for child in self._children:
child.display(indent + 2)
# 트리 구성
root = Directory("프로젝트")
src = Directory("src")
src.add(File("main.py", 10)).add(File("utils.py", 5))
tests = Directory("tests")
tests.add(File("test_main.py", 8))
root.add(src).add(tests).add(File("README.md", 2))
root.display()
print(f"총 크기: {root.get_size()}KB")