티스토리 뷰

728x90

[keyword] 결합도 & 응집도(Coupling & Cohesion)


컴퓨터공학을 공부하던 대학생때 처음 듣고, 달달 외웠던 개념이다.

결합도를 낮추고 응집도를 높여야해!

문제를 풀기위해서 강제로 머릿속에 주입시켰던 개념.

현업에서 개발을 하면서, 이 것은 암기가 아닌 그냥 자동으로 떠오르는 개념이 되었다.




[결합도(Coupling)]

결합도가 낮아야 하는 이유는 무엇일까?

이때 기준은 모듈이다. 작업을 수행하는 최소단위.

Input -> [ module ] -> Output

특정 input에 대해서 원하는 output을 얻을 수 있는 최소단위.

함수라고 생각하면 쉽다.


함수간에 서로가 서로를 바라보고 의존하는 경우를 우리는 결합도가 높다고 한다.

이 경우에는 한 가지 작업을 수행할때, 두가지 함수가 필요하다.

결국 두개로 함수를 쪼개 놓았지만, 두개가 하나의 함수이다.

두개가 따로 존재하면 관리 포인트가 두가지가 되어버려서

이해하고 수정하는데 비용이 커진다.


따라서 우리는 두가지 모듈 간의 결합도를 낮추는 설계를 해야한다.

한 가지 작업에 두가지 모듈이 필요하다면 두가지 모듈을 합쳐야하고,

두 가지 작업을 하나의 모듈로 만들어 놓았다면 두가지 모듈로 분리해야겠다.


관리포인트를 하나로 만들어 유지보수성 향상.

꼭 필요한 것만 관리.

모듈간 의존성을 갖지 않도록 함.




[응집도(Cohesion)]

응집도가 높아야 하는 이유는 무엇일까?

응집도는 얼마나 잘 분류했는가에 대한 정량적 수치다.

사람은 여러가지 일들을 묶어서 생각한다.

연관 지어 생각할 수록 더 이해하기 쉽고 기억에 오래남는다.


우리가 동물을 파충류, 양서류, 어류... 로 분류해서 생각하는 것처럼.

비슷한 것들끼리 그룹해서 묶고, 그 그룹의 대분류를 기억한다.

이렇게 하면 더 많은 개념들을 더 적은 갯수로 기억할 수 있기때문이다.


따라서 응집도는 모듈이 얼마나 잘 분류되어 있는 정도이다.

이때 모듈은 클래스로 생각하면 쉬운데,

OOP에서 객체는 상태를 나타내는 값들과, 이 상태를 변경하는 메소드로 이루어져있다.

이때 얼마나 연관된 값들과 메소드들이, 클래스 외부에 있지 않고

내부에 있는지에 따라 응집도가 높다고 할 수 있다.


응집도가 높을 수록 우리는 한 가지에만 집중할 수 있어서 개발에 드는 시간을 줄일 수 있다.

그리고 응집도가 높을 수록 불필요한 재정의를 줄일 수 있다.




[참고] http://lazineer.tistory.com/93


728x90
댓글