모듈 내부의 요소들이 서로 함께 속해있는 정도

  • 결합도와 반대되는 개념

종류 (강한 순서로)

  • 기능적응집도
    • 모듈 내부의 모든 기능이 단일 목적 수행
    • 모든 경우가 이렇다면 가장 이상적
  • 순차적응집도
    • 모듈내에서의 결과를 다른 활동에서 사용하는 경우
  • 교환적응집도
    • 입력과 출력이 동일하나 다른 기능을 수행하는 활동들을 모음
    • 좋지 않나라고 생각할 수 있으나, 단순히 입출력만 같기 때문에 애매함
  • 절차적응집도
    • 다수의 관련 기능을 가질 때, 모듈 구성 요소들이 그 기능을 순차적으로 수행
  • 시간적응집도
    • 특정 시간에 처리되어야 할 활동들을 한 모듈에서 처리
    • ViewDidLoad
  • 논리적응집도
    • 유사한 성격을 갖거나 특정 형태로 분류되는 처리요소를 한 모듈에서 처리
    • 실제로는 다른 것이지만 성격이 비슷하여 묶음
  • 우연적응집도
    • 아무 상관없는 경우

응집도가 높고, 결합도가 낮은 클래스

  • 인스턴스 변수의 수가 적어야 함
  • 각 메소드는 인스턴스 변수를 하나 이상 사용해야 함
  • 메소드가 인스턴스 변수를 더 많이 사용할 수록 응집도가 높음
  • self를 사용함으로써 멤버변수를 사용하고 있는지 주기적인 체크가 가능
    • 컴파일러의 성능을 높혀주는 효과도 있음

응집도 높고, 결합도가 낮으면 좋을까?

  • 응집도가 지나치게 매우 높은 경우
    • 사실상 불가능
    • 코드 생산에 너무 많은 비용 소모
    • 유사한 비용인 경우 응집도가 높은 것이 좋음
      • 유사한 비용으로 응집도 높은 코드를 짤 수 있다는 것은 코딩을 잘한다는 말
      • 많이 연습해서 이러한 레벨로 성장해야함

Reference