모듈이란?
모듈은 소프트웨어를 각 기능 별로 나눈 소스 단위를 말한다. 독립적으로 컴파일 가능한 프로그램 혹은 하나의 함수나 클래스도 모듈이 된다.
좋은 소프트웨어일수록 모듈의 독립성이 높다고 한다. 목적에 맞는 기능만으로 각 모듈을 만들어서 각 모듈이 주어진 기능만을 독립적으로 수행하게 만들면 다음과 같은 장점이 있기 때문이다.
모듈의 장점
- 재사용성이 높다.
- 코드의 이해가 쉽고 수정이 용이하다.
- 하나의 모듈을 수정하더라도 다른 모듈에 끼치는 영향이 적다.
이러한 모듈의 독립성은 모듈의 결합도(Coupling)와 응집도(Cohesion)를 기준으로 측정하게 된다.
결합도
결합도는 모듈 간의 상호 의존 정도를 의미한다.
결합도가 높으면 하나의 모듈을 변경해야할 때 연관된 다른 모듈까지 모두 변경해야 하는 일이 발생할 수도 있다. 그렇기 때문에 좋은 소프트웨어는 결합도가 낮아야 한다.
- 결합도가 낮은 클래스의 특징
- Open Closed Principle의 원칙을 잘 지킨 클래스(확장에는 열려있고, 변경에는 닫혀있는 클래스)
- 다형성을 잘 지킨 클래스
응집도
응집도는 한 모듈 내의 구성 요소 간의 밀접한 정도를 의미하는데, 한 모듈이 하나의 기능을 갖고 있는 것은 응집도가 높은 것이고, 한 모듈이 여러 기능을 갖고 있는 것은 응집도가 낮은 것이다.
![]() |
![]() |
---|
응집도가 높은 모듈이 코드를 이해하기도 쉽고, 수정한 후 관련 없는 다른 모듈에게는 영향을 주지 않아서 코드의 유지보수에 유리하다.
만약 응집도가 낮다면 상태와 기능의 논리적 역할이 약할 것이고 이것은 곧 클래스를 더 분리할 수 있다는 말이 될 수도 있다.
- 응집도가 높은 클래스의 특징
- 단일 책임을 가진 클래스 (Single Responsiblity Principle)
- 다른 클래스와 잘 협력하는 클래스
'CS > 소프트웨어공학' 카테고리의 다른 글
SonarQube 이용하여 로컬에서 정적 파일 분석하기(Windows/Javascript) (1) | 2025.01.22 |
---|---|
코드 품질이란? (코드 품질 기준과 측정) (0) | 2025.01.07 |
모듈이란?
모듈은 소프트웨어를 각 기능 별로 나눈 소스 단위를 말한다. 독립적으로 컴파일 가능한 프로그램 혹은 하나의 함수나 클래스도 모듈이 된다.
좋은 소프트웨어일수록 모듈의 독립성이 높다고 한다. 목적에 맞는 기능만으로 각 모듈을 만들어서 각 모듈이 주어진 기능만을 독립적으로 수행하게 만들면 다음과 같은 장점이 있기 때문이다.
모듈의 장점
- 재사용성이 높다.
- 코드의 이해가 쉽고 수정이 용이하다.
- 하나의 모듈을 수정하더라도 다른 모듈에 끼치는 영향이 적다.
이러한 모듈의 독립성은 모듈의 결합도(Coupling)와 응집도(Cohesion)를 기준으로 측정하게 된다.
결합도
결합도는 모듈 간의 상호 의존 정도를 의미한다.
결합도가 높으면 하나의 모듈을 변경해야할 때 연관된 다른 모듈까지 모두 변경해야 하는 일이 발생할 수도 있다. 그렇기 때문에 좋은 소프트웨어는 결합도가 낮아야 한다.
- 결합도가 낮은 클래스의 특징
- Open Closed Principle의 원칙을 잘 지킨 클래스(확장에는 열려있고, 변경에는 닫혀있는 클래스)
- 다형성을 잘 지킨 클래스
응집도
응집도는 한 모듈 내의 구성 요소 간의 밀접한 정도를 의미하는데, 한 모듈이 하나의 기능을 갖고 있는 것은 응집도가 높은 것이고, 한 모듈이 여러 기능을 갖고 있는 것은 응집도가 낮은 것이다.
![]() |
![]() |
---|
응집도가 높은 모듈이 코드를 이해하기도 쉽고, 수정한 후 관련 없는 다른 모듈에게는 영향을 주지 않아서 코드의 유지보수에 유리하다.
만약 응집도가 낮다면 상태와 기능의 논리적 역할이 약할 것이고 이것은 곧 클래스를 더 분리할 수 있다는 말이 될 수도 있다.
- 응집도가 높은 클래스의 특징
- 단일 책임을 가진 클래스 (Single Responsiblity Principle)
- 다른 클래스와 잘 협력하는 클래스
'CS > 소프트웨어공학' 카테고리의 다른 글
SonarQube 이용하여 로컬에서 정적 파일 분석하기(Windows/Javascript) (1) | 2025.01.22 |
---|---|
코드 품질이란? (코드 품질 기준과 측정) (0) | 2025.01.07 |