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

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

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

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

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

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


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

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 산골
산골 블로그 소개 저는 하얀머리 개발자와 작가를 꿈꾸는 블로거 산골 입니다. 프로그램 개발자로서 저의 관심사는 개발자의 숨통을 트여준 아이폰 개발, 철학과 같은 깊이가 있는 객체지향 방법론입니다. 글쓰기와 수영을 좋아합니다. 블로그를 통해 관심사를 공유합니다. 제 블로그에 관심 있으시면 아래 RSS나 즐겨찾기로 편하게 구독하세요.

rss Bookmark and Share

댓글을 달아 주세요

  1. BlogIcon 갓쉰동 2009.06.25 23:01 신고  댓글주소  수정/삭제  댓글쓰기

    작게 만들어서 합치라는 말이지 않을까요?

  2. 2009.06.26 01:26  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • BlogIcon 산골 2009.06.27 13:46 신고  댓글주소  수정/삭제

      비밀님은 뭐랄까..후배가 볼때 깐깐하고 엄하지만
      뒤에서는 후배가 정말 잘되길 바라고 후배의 성장을
      위해 물심양면 지원하는 그런 선배같은 이미지가 느껴지십니다. ^ ^;
      거외 그런 좋은 선배들은 항상 계시더라고요.
      군대도 있고 사회도 있고..저도 그런 선배가 되야될텐대 말이죠 ^ ^;

      이 댓글 달기 위해 상당히 많은 시간 할애하셨을 것 같은데 그 정성에
      거듭 감사드립니다.

      제가 쓴 원고를 블로그에 올린 이유가 이런식의 피드백을 바랬기 때문입니다.
      내가 쓴글에 대한 피드백을 얻는데 만약 그 피드백이
      기분 안좋고 상처가 될지라도 꼭 사실 그대로 피드백을 받아야 뭔가
      가능성 있는 책이 되지 않겠느냐는 생각인데..
      구체적인 지적 감사드립니다.

      제가 쓰려는 책이 뭔가 출판 가능성이 있으려면 시중에 많이 나온 객체지향 책과 차별화가 되야 되는데 그 차별화요소가 딱딱한 문장이 아닌 뭔가
      인문적인 책 같은 느낌이 들도록 접근하자 였는데요.

      그럴려면 천상 문장력으로 승부해야 된다는 얘기인데..이번에 문장에 대한
      피드백을 받으니 정신 번쩍 차려야겠습니다.

      제가 바란 피드백은 크게 기술적인 피드팩(기술에 대한 내공) 과
      글이 이해하기 쉬운가(문장력) 이었는데 이번에는 기술적인 피드백보다는
      문장력에 대한 지적을 받으니 정신이 번쩍들으면서 한편으론 아직
      기술력에 대한 지적을 크게 받진 않은것 같아서 아직까진 다행인것도 같습니다. ^ ^;

      좌우지간 문장에 대해 감수하신 부분은 잘 참고하고 반영하고요..앞으로
      남은 작업 정신 차려서 잘 해보겠습니다~ 감사합니다~ ^ ^

  3. 초보 개발자 2014.03.20 18:53 신고  댓글주소  수정/삭제  댓글쓰기

    정말 수필처럼 설명이 너무 잘 되있는거 같습니다. 좋은 정보 감사합니다.^^