정의


내가 느끼기에는, 굉장히 추상적인 개념이라고 느껴졌다. 네이버에 검색하면 나오는 두산백과에서의 정의는 다음과 같다.

모듈

프로그램의 기능을 독립적인 부품으로 분리한 것을 모듈이라고 하며, 모듈화 프로그래밍이란 이러한 분리를 강조하여 유지 보수와 타 프로그램에서의 코드 재사용을 손쉽게 하는 소프트웨어 설계 기법을 말한다. 모듈은 일반적으로 서브루틴과 데이터 구조의 집합체로서, 그 자체로서 컴파일 가능한 단위이며, 재사용 가능하고 동시에 여러 다른 모듈의 개발에 사용될 수 있다. 모듈의 인터페이스는 모듈에 의해 제공되거나 필요로 되는 요소들을 표현한다. 모듈의 개념을 명시적으로 지원하는 언어로는 Ada, FORTRAN, Pascal, Python, Ruby 등이 있으며, 일반적으로 프로그래밍 언어에 따라 모듈의 개념을 패키지라 부르기도 하며 그 규모도 언어마다 상이하다.

[네이버 지식백과] 모듈 [module] (두산백과 두피디아, 두산백과)

뭐라고 정의하고 있는데, 마지막의 ‘그 규모도 언어마다 상이하다’라는 말에서 내가 느꼈던 바가 맞음을 알 수 있다.

정리하자면, 그 자체로 컴파일 가능하고 독립적인 기능을 가지는 단위를 의미하는 것 같다.

즉, 모듈은 (함수가 될 수도, )파일이 될 수도, 라이브러리가 될 수도, 프로그램이 될 수도 있는 추상적인 개념이라고 이해했다.

단, 일반적으로 파이썬과 같이 모듈의 개념을 직접 사용하는 언어에서는 그 단위를 지칭하고, 자바나 Go와 같은 언어에서는 패키지가 모듈의 개념을 대체하고 있는 것으로 보인다.

좋은 모듈이란


모듈은 모듈화의 산물이다. 따라서 좋은 모듈이란 모듈화를 잘 하는 것을 의미한다.

모듈화를 잘 한다는 것은 **목적에 맞는 기능만으로 모듈을 나누는 것**이다.

즉, 독립성이 높은 모듈일수록 좋다.

소프트웨어 공학에서 모듈의 독립성은 모듈의 결합도응집도로 측정한다.

독립성을 높이기 위해서는 모듈의 결합도를 낮추고 응집도를 높여야 한다.