brunch

소프트웨어 인터페이스의 의미

"Balancing Coupling in Software Design"

by 심야서점
제목을 입력해주세요_-001 (18).png


소프트웨어 모듈 간의 커플링 강도와 모듈 간의 통합 강도는 서로 연결되어 있는 속성입니다.

커플링을 지나치게 강하게 만들면 모듈 별로 독립성을 떨어지게 되고, 커플링을 약하면 모듈 간의 통합 강도가 떨어져서 시스템의 성능이 떨어지게 됩니다.


모듈 간의 커플링을 최소화하면서 모듈 간의 통합 강도를 높이기 위해서 필요한 것이 "인터페이스"에 대한 명확한 이해입니다.


인터페이스는 모듈이 외부 모듈에 노출하는 공개 인터페이스 (Public Interface)와 모듈 내부에서 활용되는 비밀 인터페이스 (Private Interface)로 구분이 됩니다.


둘 간의 차이는 인터페이스를 제공하는 모듈에 대한 지식 차이입니다. 공개 인터페이스는 모듈의 상세 구현 내용을 숨기고, 그것을 이용하는 데 필요한 최소한 연결 지식만 가지고 있습니다. 반대로, 비밀 인터페이스는 모듈의 상당한 구현 영역을 제공해야 합니다.


그리고, 모듈 간에 전달되는 지식의 차이만큼 모듈 간의 의존성이 발생하게 됩니다.


왜 그렇게 될까요?


소프트웨어 모듈은 사람이 만듭니다. A라는 모듈이 B라는 모듈을 활용하고자 한다면, A 모듈을 만드는 사람은 B 모듈을 만드는 사람에게 어느 정도의 정보를 제공받아야 합니다.


두 개의 모듈이 공개 인터페이스로만 연결이 되어있다면, B 모듈을 만드는 사람은 제한된 함수 정의 정보 (함수명, 함수 파라미터 종류 등)만 알아보면 될 겁니다. 그런데, 비밀 인터페이스로 연결이 되어 있다면 A 모듈을 만드는 개발자는 B 모듈의 소스 코드를 요청해야 될 수 있습니다. 소스 코드를 직접 분석해야만 자기가 무엇을 이용할지, 어떻게 이용할지 알 수 있겠죠.


이렇게 되면, A, B 모듈은 거의 라이프사이클이 동일하게 움직일 수밖에 없습니다.

B 모듈을 조금만 고쳐도 A 모듈은 그것에 맞춰서 수정을 해야 할 겁니다. B 모듈이 폐기가 되면 A 모듈은 더 이상 서비스를 받지 못해서 다시 만들어야 해야만 할 수 있습니다.


서로 떨어질 수 없을 정도의 의존성을 갖는 셈이죠.


연결되는 커플링의 종류, 인터페이스 종류에 따른 소프트웨어 모듈 간의 의존성, 지식 전달 흐름을 고려한다면 적절한 커플링 수준을 파악할 수 있습니다.

keyword
매거진의 이전글소프트웨어 커플링의 종류