소프트웨어 모듈
─────────────
소프트웨어는 모듈(module)이라는 덩어리를 조합해서 만들어집니다. 소프트웨어에서의 모듈은 특정 기능을 제공하는 단위, 소프
트웨어를 구성하는 독립적인 부분이 되는 것을 모듈이라고 합니다. 이 모듈은 함수나 데이터들이 모여서 만들어지고, 하나의 모듈
은 여러 모듈이 모여서 만들어지기도 합니다. 즉, 모듈에는 계층구조가 있다는 것입니다. 

독립성이 높은 모듈
───────────────
독립성이 높은 모듈에서 독립성이란 그 모듈 내부 구현이 변경되더라도 그것을 사용하는 외부 모듈에는 영향을 주지 않는 것을
말 합니다.

한 모듈에서 구현한 내용이 다른 모듈을 참조하지 않으면 이해하기 어렵다거나, 한 모듈의 구현 방법을 변경할 때 그것을 사용하
는 다른 모듈도 수정해야 한다면 그 모듈의 독립성이 낮다고 말합니다. 모듈은 그것이 '어떤 기능(what)을 제공하는가'라는
관점과 그것이 '어떻게(how) 구현되는가'라는 관점으로 살펴볼 수 있습니다.
What과 How가 명확하게 구별되는 모듈이 독립성이 높은 모듈인 셈인데, 거꾸로 독립성이 낮은 모듈은 어떤 기능을 제공하고 있
는 지 불명확하고 구현 방법과 기능이 애메합니다.

모듈의 정보 은닉
──────────────
독립성 높은 모듈을 만드는 원칙을 정리해 보면 '그 모듈을 사용하는데 필요한 정보를 모듈 밖으로 최소한으로 노출하여 실제 기
능 구현방법은 외부에 보여주지 않아야 한다'입니다. 즉 모듈을 블랙박스로 취급하는것인데  이  원칙을  정보 은닉(information
hiding) 혹은 캡슐화(encapsulation)라고 부릅니다.

모듈을 블랙박스로 만들면 그 모듈을 사용하는 쪽에서는 제공된 기능만 활용해서 프로그램을 개발하면 됩니다. 모듈 쪽에서는
제공하기로 한 기능만 구현하면 되기 때문에 더 빠른 알고리즘이 있다면 교체하고, 메모리 효율을 높이고 싶으면 그에 맞는 다른
구현 방법을 적용하는 식으로 모듈의 개선 작업이 용이해집니다. 결국 블랙박스 방식은 독립성이 높은 모듈을 구현할  수 있도록
합니다. 블랙박스로 정보 은닉이 된 모듈은 사용자 측에서 모듈을 재사용하고, 소프트웨어를 부품화할 때도 매우 효과적입니다.

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST