728x90
728x90
응집도(Cohesion)와 결합도(Coupling)
들어가며
- CS 관련 공부를 하다보면 자주 접하는 용어인 응집도(Cohesion)와 결합도(Coupling)에 대하여 간단하게 정리해본다.

응집도(Cohesion)
개념
- 모듈 내부의 구성 요소들이 서로 얼마나 밀접하게 관련되어 있는지를 나타내는 척도
- 높은 응집도를 가진 모듈은 하나의 명확한 기능이나 책임을 수행하며, 내부 요소들이 긴밀하게 협력한다.
- 유지보수와 재사용성을 높여준다.
예시
- 한 클래스가 특정한 데이터와 그 데이터를 처리하는 함수들로만 구성되어 있다면, 해당 클래스는 높은 응집도를 가진다고 볼 수 있습니다.
예제 코드
- 아래의 클래스는 계좌와 관련된 데이터와 기능(예: 입금, 출금, 잔액 조회)을 한 곳에 모아두어 하나의 명확한 역할만 수행하도록 설계되었다.
class BankAccount: # 계좌 소유자와 초기 잔액을 설정 def __init__(self, owner, balance=0): self.owner = owner self.balance = balance # 기능 : 입금 def deposit(self, amount): if amount > 0: self.balance += amount print(f"{amount}원이 입금되었습니다. 현재 잔액: {self.balance}원") else: print("입금액은 0보다 커야 합니다.") # 기능 : 출금 def withdraw(self, amount): if amount > 0: if self.balance >= amount: self.balance -= amount print(f"{amount}원이 출금되었습니다. 현재 잔액: {self.balance}원") else: print("잔액이 부족합니다.") else: print("출금액은 0보다 커야 합니다.") # 기능 : 현재 잔액 반환 def get_balance(self): return self.balance # 사용 예시 if __name__ == "__main__": account = BankAccount("홍길동", 1000) account.deposit(500) account.withdraw(300) print(f"최종 잔액: {account.get_balance()}원")
결합도(Coupling)
개념
- 서로 다른 모듈이나 클래스 간의 의존성을 나타내는 척도
- 낮은 결합도를 가진 시스템은 각 모듈이 독립적으로 동작할 수 있어, 한 모듈의 변경이 다른 모듈에 미치는 영향을 최소화한다.
예시
- 만약 두 모듈이 서로 독립적으로 동작하고, 한 모듈의 내부 구현 변경이 다른 모듈에 영향을 주지 않는다면, 이 시스템은 낮은 결합도를 갖고 있다고 할 수 있다.
예제 코드
- 결제 처리를 위한
PaymentProcessor
클래스가 특정 결제 게이트웨이에 의존하지 않고, 외부에서 주입된 추상화된 결제 게이트웨이(PaymentGateway
)를 사용하도록 설계되어 있다. - 이렇게 하면 결제 방식(예:
Stripe
,PayPal
등)이 바뀌더라도PaymentProcessor
클래스는 수정할 필요가 없어 시스템 간 결합도를 낮출 수 있다.
class PaymentGateway: # 추상 결제 게이트웨이 인터페이스 def process_payment(self, amount): raise NotImplementedError("서브클래스에서 구현해야 합니다.") class StripeGateway(PaymentGateway): def process_payment(self, amount): print(f"Stripe를 통해 {amount}원 결제 처리 중...") class PaypalGateway(PaymentGateway): def process_payment(self, amount): print(f"PayPal을 통해 {amount}원 결제 처리 중...") # 결제 처리 클래스는 특정 결제 게이트웨이에 의존하지 않고, 외부에서 주입받은 결제 게이트웨이를 사용한다. class PaymentProcessor: def __init__(self, gateway: PaymentGateway): self.gateway = gateway def make_payment(self, amount): self.gateway.process_payment(amount) # 사용 예시 if __name__ == "__main__": # Stripe 게이트웨이를 사용하는 경우 stripe_gateway = StripeGateway() processor = PaymentProcessor(stripe_gateway) processor.make_payment(100) # PayPal 게이트웨이를 사용하는 경우 : PaymentProcessor 코드를 변경할 필요가 없다. paypal_gateway = PaypalGateway() processor = PaymentProcessor(paypal_gateway) processor.make_payment(200)
정리
- 높은 응집도는 모듈 내부의 요소들이 서로 밀접하게 관련되어 한 가지 일을 잘 수행함을 의미한다.
- 낮은 결합도는 모듈들 사이의 의존성이 적어, 시스템 변경 시 영향을 최소화할 수 있음을 의미한다.
시스템 설계에서 높은 응집도와 낮은 결합도를 유지하는 것이 이상적이다. 즉, 응집도가 높아 각 모듈이 단일 책임을 잘 수행하고, 결합도가 낮아 모듈 간 의존성이 줄어들어 변경 시 영향 범위가 작아지는 상태가 더 좋은 설계라고 할 수 있다.
참고 사이트
Coupling and Cohesion - Software Engineering - GeeksforGeeks
The Design phase in the Software Development Life Cycle aims to create a solution based on the Software Requirement Specification, focusing on achieving low coupling and high cohesion to enhance software maintainability and reliability.
www.geeksforgeeks.org
728x90
728x90
'Computer Science > 개념 정리' 카테고리의 다른 글
[CS 개념] 옵저버 패턴(Observer Pattern) (1) | 2023.06.13 |
---|---|
[CS 개념] 전략 패턴(Strategy Pattern) (0) | 2023.06.12 |
[CS 개념] 팩토리 패턴(Factory Pattern) (1) | 2023.06.11 |
[CS 개념] 싱글톤 패턴(Singletone Pattern) (0) | 2023.05.18 |