brunch

모듈의 특성

쓸모 있는 모듈러 디자인

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


제가 읽고 있는 소프트웨어 설계 책에서 모듈의 특성을 "Function", "Logic", "Context"로 분류해 놓은 것이 너무 적절한 것 같아서, 그것을 풀어서 설명하고자 합니다.


1. Function (기능)


모듈의 첫 번째 특성은 모듈이 외부에 제공하는 기능입니다. 모듈이 존재하는 이유이자, 모듈의 고유성을 나타내는 특성입니다. 그리고, 모듈의 기능은 단순화되고, 표준화된 인터페이스를 통해서 발현되어야 합니다.


모듈러 디자인에서 모듈과 관련된 복잡성을 나타낼 때 모듈 내 복잡성, 모듈 간 복잡성으로 분류할 수 있는 모듈 간 복잡성이 기능과 관련됩니다. 확실한 것은 모듈 간 복잡성은 모듈 내 복잡성보다 작아야 합니다.


그리고, 모듈이 가진 기능은 모듈이 제공하는 서비스로 볼 수 있기 때문에 모듈 내부를 블랙박스로 보고 제공해야 합니다. 보통 모듈의 사용자 입장에서는 모듈의 기능, 이후 설명할 모듈의 환경만 고려해서 써야만 합니다.


2. Logic (로직)


모듈의 두 번째 특성은 모듈 내부의 로직입니다. 모듈 내부의 로직은 앞에서 설명한 모듈의 기능을 구현하기 위해서 내부에서 작동하는 절차를 의미합니다. 모듈 내부의 로직은 모듈 외부에 노출되어 있지 않으며, 모듈 내 복잡성의 원인이 됩니다.


모듈의 로직은 모듈을 직접 개발하는 사람이나 모듈을 수정, 보완하는 사람에게 의미 있는, 의미 있어야만 하는 특성입니다.


모듈러 디자인에서 모듈을 사용해야 하는 데 모듈의 로직을 신경 써야 한다면, 모듈러 디자인을 잘못 수행하고 있는 겁니다. 예를 들어서, 모듈러 가구를 사용자가 조립해서 사용하고 있는데, 사용자가 가구를 이루고 있는 각각의 모듈이 어떻게 작동하고 있는 지를 이해해야 한다면 사용자는 어려워서 해당 가구를 사용하지 못할 겁니다.


3. Context (환경)


마지막 모듈의 특성은 모듈이 사용되는 환경입니다. 모듈이 쓰이는 적절한 위치, 조건을 의미합니다. 시스템에서 원하는 모듈의 조건, 모듈에 준수해야 하는 제약조건, 타 모듈 간의 관계 등이 여기에 해당합니다. 모듈을 가져다 쓰는 사용자 입장에서는 기 개발된 모듈을 쓸 수 있을지, 없을지 먼저 파악해야 합니다.


모듈의 환경이 중요한 것이 모듈의 환경이 모듈이 감당해야 하는 총복잡성을 결정합니다.


그것을 모듈의 기능과 모듈의 로직으로 나눠서 구현하면서 모듈 간 복잡성, 모듈 내 복잡성이 결정됩니다.


모듈 간 복잡성이 작으면 모듈을 사용하기 쉬울 수 있겠지만, 모듈을 구현하는 데 복잡성이 높아지므로 모듈의 수명 주기에 영향을 미칠 수 있습니다.


반대로 모듈 간 복잡성이 높으면 모듈을 사용하기는 어렵겠지만, 모듈을 사용하는데 복잡성이 높아지므로 모듈의 재사용성이 낮아지겠죠.



모듈의 특성을 모듈의 기능, 모듈의 로직, 모듈의 환경으로 나눠서 설명을 했습니다.


모듈러 디자인 활동을 함에 있어서 어떻게 모듈을 구성할 것인지, 그것을 어떻게 사용해서 시스템을 구성할 것인지를 결정할 때 모듈의 특성을 고려해야만 제대로 모듈러 디자인을 수행할 수 있습니다.


Image by SpaceX-Imagery from Pixabay

keyword
매거진의 이전글소프트웨어 커플링 (Software Coupling)