본문 바로가기

기타/객체지향 토막글

수필 객체지향, 응집도와 결합도

객체지향 개발을 하는 이유는 객체지향적으로 제대로 개발하면 유연하고 확장성 높고 유지보수 편리한 개발이 가능하기 때문이라고 한다. 객체지향적으로 개발하면 왜 유연하고 확장성 높고 유지보수가 편리하냐고 누가 단도직입적으로 묻는다면 나는 총으로 겨냥당한것처럼 돌부처가 될것 같다. 그래도 우격다짐으로 말해보면 객체지향적으로 개발하면 모듈간 응집도는 높고 결합도는 낮아지기 때문이라고 말할것이다. 하지만 역시 열심히 공부하려는 우리를 당혹스럽게 하는 뜬구름 잡는 얘기이기도 하다. 응집도는 높고 결합도는 낮아야 된다는 이 공대 용어 스러운 말이 무슨 뜻이야?

응집도가 높다는 말은 비슷한 일을 하는 기능들이 하나의 모듈로 얼마나 잘 뭉쳐 있냐와 비슷한 말이고 결합도가 낮다는 말은 그 일을 완수하기 위해서 얼마나 다른 모듈에 작게 의존하느냐와 비슷하게 말하여 진다.
 
사람 사는 세상을 예로 들어 분업화가 철저한 어느 공장을 살펴보았다. 작업능률을 높이려면 직원마다의 임무가 비슷한 임무로 포장이면 포장, 테스트면 테스트, 제작이면 제작으로 통일되어 있어야 한다. 근데 포장 했다가 테스트 했다가 때로는 짐나르기 심부름했다가 심지어 수시로 공장 청소까지 하면 정신이 사나워서 제대로 일하지 못할것이다. 거기에다 포장 공정의 일부를 몰라 다른 사람에게 물어보고, 테스트하는 방법도 몰라 다른 사람에게 물어보는 등 모든일을 수행할때 다른 사람에게 의존하게 된다면 그 직원은 일의 능률이 너무 떨어져서 조만간 해고 당하게 될것이다.

이일, 저일 온갖 잡일 하면서 정신사나운 경우는 응집도가 낮은 경우이고, 자신에게 주어진 일을 할때 혼자 힘으로 잘 하지 못하고 여러 사람에게 물어보는 경우는 결합도가 높은 경우이다. 공장 직원과 객체는 하나의 일만 잘해야 되는데 여러 잡일을 하므로 응집도가 낮은 것이고, 공장 직원과 객체가 조금만 의존해도 될 일을 남에게 많이 의존하므로 결합도가 높은 것이다.

응집도와 결합도는 둘다 인과관계로 어울리기도 한다. 응집도가 낮으면 저절로 결합도가 높아질 것이고, 결합도가 높으면 응집도가 낮아진다.

따라서 객체지향으로 개발할때는 어플리케이션의 모듈이 하나의 일만 잘 수행해야하며 되도록 다른 모듈에게 의존하는 것을 줄여야 한다.

응집도를 높이고 결합도를 낮추라는 말은 어렵게 개발자를 압박한다. 그러나 클래스는 하나의 일만 잘해야 한다~ 하위 클래스에 의존하지 말고 상위클래스에 의존하라~ 등의 객체지향 디자인 규칙과 다양한 디자인 패턴을 공부하고 적용하게 되면 자연스럽게 높은 응집도와 낮은 결합도라는 규칙을 따르게 된다. 이것이야 말로 객체지향과 디자인 패턴의 중요한 장점이다.


산골이 덧) 이 글은 수필 객체지향이라는 책쓰기용 원고의 일부라서 펌은 불허합니다. 이 글의 원고는 1차로 쓴것을 그대로 올려서 다듬어지지 않았습니다. 못써도 이해해주시고요. 지금 올리는 것은 공부한것을 독자와 공유하고 객체지향 개발자님의 조언을 받기 위해서입니다. 혹시 내공이 부족해서 미흡한 내용이 있을것 같습니다. 그래서 조언 부탁드리고요. 아직 원고가 완성되진 않았지만, 혹시 관심있는 출판사 관계자분이 계시면 제안서/기획서는 7월 1일 이후에 제출 가능 합니다만 ^ ^; 출판사 관계자분께 수필 디자인패턴 제안서/기획서를 보내드리겠습니다. I출판사만 믿습니다. ^ ^;