응집도
응집도란?
응집도는 한 모듈 내의 구성 요소간의 밀접한 정도를 의미한다. 한 모듈이 하나의 기능(책임)을 갖고 있는 것은 응집도가 높은 것이고, 한 모듈이 여러 기능을 갖고 있는 것은 응집도가 낮은 것이다. 응집도가 높은 모듈은 하나의 모듈 안에 함수나 데이터와 같은 구성 요소들이 하나의 기능을 구현하기 위해 필요한 것들만 배치되어 있고 긴밀하게 협력한다. 예를들어 쇼핑몰 프로젝트에서 주문 처리를 담당하는 클래스에서 회원의 정보를 업데이트하는 메서드가 있다면, 이건 응집도가 낮은 것이다. 회원 정보는 회원만 담당하는 클래스에서 따로 분리하여 처리하는 것이 옳기 때문이다.
기능적 응집도 ( Functional Cohesion )
가장 응집도가 높은 형태로 가장 좋은 형태
모듈 내부의 모든 기능이 단일 목적을 위해 수행되는 경우
대입 되는 변수가 공통적으로 사용되는 경우
대표적으로 수학 연산에 관련된 모듈들을 모은 math 클래스를 들 수 있음
보통 메서드가 인스턴스 변수를 많이 사용하면 할 수록 메서드와 클래스는 응집도가 높아지는데, 위의 코드에서는 각 메서드 마다 인스턴스 변수를 이용해 자료를 업데이트 해줌으로써 응집도를 높였다.
순차적 응집도 ( Sequential Cohesion )
모듈 내에서 한 활동으로 부터 나온 출력값이 다음 활동의 입력데이터로 사용할 경우
어떤 모듈이 특정 파일을 읽고 처리하는 기능을 하는 등과 같다.
교환적 응집도 (Communication Cohesion)
통신적 응집도라고 불림.
동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있는 경우
메소드 호출에 공통된 파라미터가 입력되는 경우
순차적 응집도와 차이점은 대신에 처리 순서가 중요치 않다는 것.
첨언하자면, 파라메터 값이 같은데 처리 결과가 다른 메소드가 많은 경우를 의미하는 듯 하다.
절차적 응집도 ( Procedural Cohesion )
모듈이 다수 관련 기능을 가질 때 모듈 안의 구성요소가 그 기능을 순차적으로 수행할 경우
하나의 클래스에 있는 메소드들을 여러개 호출하는 경우
시간적 응집도 ( Temporal Cohesion )
일시적 응집도라고 불림
각 기능 요소들이 순서에 상관없이 특정 시점에 반드시 수행되는 경우 ( Unity에서 Init , Start 함수 )
연관된 기능이라기 보단 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우
메소드 호출이 일어나지 않고 변수의 초기화만 실행되거나 Exception 에러로그를 보내거나 등
논리적 응집도 ( Logical Cohesion )
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
논리적으로 비슷한 기능을 수행하지만 서로의 관계는 밀접하지 않은 형태
switch 문이 쓰여 case 에 따라 비슷하지만 다른 작업을 수행하는 경우
필자는 사실상 응집도에 관련해선 해당 논리적 응집도를 발견하면 무조건 리팩토링을 한다. switch 문은 유지보수 때 어려움을 주며 하드코딩 된 저 부분도 어떻게든 고친다.
우연적 응집도 ( Conicidental Cohesion )
가장 좋지 않은 응집도
모듈 내부의 각 구성 요소들이 서로 관련없는 요소로만 구성된 경우
Last updated
