프로그래밍공부(Programming Study)

프로그래밍 설계에서 응집도와 결합도의 중요성: 개념, 특징, 및 실습 예제

Chaany 2024. 8. 13.
728x90

프로그래밍 설계 및 구현 시, 코드의 품질과 유지보수성을 높이기 위해 중요한 개념 중 하나가 바로 응집도(cohesion)결합도(coupling)입니다. 이 두 가지 개념은 소프트웨어 모듈이 얼마나 독립적이고, 서로 간에 얼마나 밀접하게 연관되어 있는지를 평가하는 데 사용됩니다.

응집도(Cohesion)란?

응집도는 모듈 내의 구성 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 개념입니다. 높은 응집도를 가진 모듈은 단일한 기능을 중심으로 잘 조직된 코드로 구성되며, 이는 코드의 가독성, 유지보수성, 재사용성을 높입니다. 반대로 낮은 응집도를 가진 모듈은 다양한 기능들이 혼합되어 있어 모듈의 목적이 불분명해지며, 유지보수가 어려워질 수 있습니다.

  • 특징:
    • 높은 응집도: 모듈의 구성 요소들이 공통의 목적을 달성하기 위해 협력함.
    • 낮은 응집도: 모듈의 구성 요소들이 서로 다른 기능을 수행하며, 관련성이 낮음.

결합도(Coupling)란?

결합도는 모듈 간의 상호 의존성을 나타내는 개념입니다. 낮은 결합도를 가진 시스템은 모듈들이 독립적으로 동작하며, 하나의 모듈에 변화가 발생하더라도 다른 모듈에 미치는 영향이 적습니다. 반대로 높은 결합도를 가진 시스템은 모듈 간의 상호 의존성이 높아, 하나의 모듈이 변경되면 다른 모듈들도 함께 수정해야 하는 경우가 많습니다.

  • 특징:
    • 낮은 결합도: 모듈들이 독립적으로 동작하며, 변경의 영향이 최소화됨.
    • 높은 결합도: 모듈 간의 의존성이 높아, 하나의 모듈에 변경이 있을 때 다른 모듈도 함께 수정되어야 함.

응집도와 결합도의 상관관계

일반적으로 높은 응집도와 낮은 결합도가 좋은 소프트웨어 설계를 나타냅니다. 모듈이 독립적이면서도, 내부적으로는 잘 조직된 기능을 제공할 때 소프트웨어의 유지보수성과 확장성이 크게 향상됩니다.

실습 예제: 파이썬 코드로 응집도와 결합도 이해하기

# 응집도가 높은 예제
class FileHandler:
    def __init__(self, filename):
        self.filename = filename

    def read_file(self):
        with open(self.filename, 'r') as file:
            return file.read()

    def write_file(self, content):
        with open(self.filename, 'w') as file:
            file.write(content)

# 결합도가 낮은 예제
class Database:
    def connect(self):
        # 데이터베이스 연결 로직
        pass

    def disconnect(self):
        # 데이터베이스 연결 종료 로직
        pass

class DataProcessor:
    def process_data(self, data):
        # 데이터 처리 로직
        pass

# 이 모듈들은 독립적으로 동작할 수 있으며, 하나의 모듈이 변경되어도 다른 모듈에는 영향을 미치지 않음

위의 예제에서 FileHandler 클래스는 파일 읽기와 쓰기 기능을 하나의 모듈로 응집하여 제공합니다. 이 클래스는 파일 처리를 위한 기능들을 잘 결합하고 있으며, 응집도가 높습니다.

반면, DatabaseDataProcessor 클래스는 서로 독립적으로 동작할 수 있는 기능을 제공하며, 결합도가 낮습니다. 이러한 구조는 모듈의 독립성을 유지하고, 시스템의 변경에 유연하게 대응할 수 있도록 해줍니다.

결론

응집도와 결합도는 프로그래밍 설계의 핵심적인 요소로, 이를 적절히 고려하여 설계된 소프트웨어는 더 높은 품질과 유지보수성을 가지게 됩니다. 개발자는 모듈 간의 결합도를 낮추고, 모듈 내부의 응집도를 높이는 방향으로 코드를 작성하여 시스템의 복잡성을 줄이고, 코드의 재사용성과 가독성을 높일 수 있습니다.

728x90

댓글