안녕하세요 Jercy입니다. 오늘은 Swift 코드에서의 결합도와 응집도에 대해 알아보겠습니다.
결합도(Coupling)와 응집도(Cohesion)는 소프트웨어 공학에서 중요한 개념입니다.
결합도는 모듈 간의 상호 의존 정도를 나타냅니다. 결합도가 높을수록 한 모듈이 다른 모듈의 내부 동작에 의존적이라는 것을 의미합니다. 결합도가 높으면 변경에 취약해지고 재사용성이 떨어집니다.
결합도의 종류로는 내용 결합도, 공통 결합도, 외부 결합도, 제어 결합도, 스탬프 결합도, 자료 결합도, 메시지 결합도 등이 있습니다. 이 중 내용 결합도와 공통 결합도는 결합도가 높은 편이고, 자료 결합도와 메시지 결합도는 상대적으로 결합도가 낮습니다.
예를 들어, 한 클래스가 다른 클래스의 내부 구현에 직접 접근하는 것은 내용 결합도에 해당합니다. 반면 단순한 메시지 전달을 통해 상호작용하는 것은 메시지 결합도라고 볼 수 있습니다.
iOS 개발에서는 델리게이트 패턴, 노티피케이션, 클로저 등을 활용해 결합도를 낮출 수 있습니다. 프로토콜을 통해 추상화 계층을 도입하는 것도 좋은 방법입니다.
응집도는 모듈이 독립적이고 집중적인 기능을 제공하는 정도를 나타냅니다. 응집도가 높을수록 모듈의 책임과 역할이 명확해집니다.
응집도의 종류로는 기능적 응집도, 순차적 응집도, 교환적 응집도, 절차적 응집도, 시간적 응집도, 논리적 응집도, 우연적 응집도 등이 있습니다. 이 중 기능적 응집도가 가장 바람직한 형태이고, 우연적 응집도는 응집도가 가장 낮습니다.
예를 들어, 한 클래스가 한 가지 책임만 가지고 있고 관련된 기능들이 모여있다면 기능적 응집도가 높다고 할 수 있습니다. 반면 여러 가지 책임이 혼재되어 있고 서로 관련 없는 기능들이 한 클래스에 모여 있다면 응집도가 낮다고 볼 수 있습니다.
iOS 개발에서 응집도를 높이기 위해서는 단일 책임 원칙(SRP)을 따르는 것이 중요합니다. 클래스나 구조체, 함수 등은 명확하고 집중적인 역할을 가져야 합니다. Massive View Controller 등의 안티패턴을 피하고 적절한 역할 분담을 통해 응집도를 향상시켜야 합니다.
결합도와 응집도는 상호보완적인 개념입니다. 결합도를 낮추고 응집도를 높이는 것이 좋은 설계의 지표가 될 수 있습니다. 하지만 무조건 결합도가 낮고 응집도가 높은 것만이 정답은 아닙니다. 적절한 트레이드오프를 통해 균형을 찾는 것이 중요합니다.
이상으로 Swift에서의 결합도와 응집도에 대해 알아보았습니다.
생각해볼 점:
•
현재 개발 중인 프로젝트에서 결합도가 높은 모듈은 없는지, 응집도가 낮은 모듈은 없는지 점검해 봅시다.
•
결합도를 낮추기 위해 어떤 설계 기법들을 활용할 수 있을지 고민해 봅시다.
•
응집도를 높이기 위해 역할과 책임을 적절히 분배하고 있는지 돌아봅시다.
제 생각:
•
결합도와 응집도를 고려하는 것은 처음에는 번거로워 보일 수 있지만, 장기적으로는 유지보수성과 확장성을 높이는 데 큰 도움이 됩니다.
•
시간이 지날수록 좋은 설계의 가치를 실감하게 될 것입니다. 꾸준한 노력과 학습을 통해 결합도와 응집도를 고려한 설계 능력을 키워나가는 것이 중요합니다.
•
코드 리뷰나 리팩터링을 통해 지속적으로 코드 품질을 개선해 나가는 자세가 필요합니다.