모듈(Module)과 모듈화(Modularization)

park·2022년 11월 4일
2
post-custom-banner

모듈(Module)

모듈이란 프로그램을 구성하는 시스템을 기능 단위로 독립적인 부분으로 분리한 것이다. 단순히 규모가 큰 것을 작게 여러 개로 나눈 조각이 아니라, 하나 이상의 논리적인 기능을 수행하기 위한 명령어들의 집합이라 할 수도 있다. 모듈은 독립적인 프로그램 그 자체일 수도 있고 함수나 메서드일 수도 있다. 모듈이 되려면 다른 것들과 구분될 수 있는 독립적인 기능을 가져야 하고 유일한 이름을 사용해야 한다. 그리고 다른 프로그램이나 또 다른 모듈에서 호출하여 사용할 수도 있어야 한다. 또, 모듈 자체로서 재사용될 수 있고 독립적으로 컴파일이 가능해야 한다는 중요한 특징을 포함해야 한다. 따라서 모듈은 다양한 형태로 존재할 수 있는데 용도가 비슷한 함수나 추상화된 자료, 객체(Object), 메서드(Method)등이 이에 해당한다.

모듈화(Modularization)

모듈화 프로그래밍이란 이런 기능적인 분리를 통해서 다른 프로그램을 개발할 때에도 유지보수와 코드 재사용성을 높여 소프트웨어를 설계하는 기법을 일컫는다. 모듈화를 할 때 가장 먼저 결정할 것은 '어느 정도의 크기로 모듈을 분리할 것인가'이다. 작게 나누면 좋지만 무조건 작다고 해서 좋은 것은 아니다. 모듈이 작아지면 작아질수록 그 개수도 늘어나고 그 사이에서 통신 횟수가 증가하면 과부하로 인해 성능이 떨어지고 복잡도가 증가하기 때문이다. 따라서 모듈의 크기를 결정지을 때는 문제의 특성이나 유형에 알맞게 결정해야 한다.

모듈과 모듈화에 대한 내용을 찾아보다가 객체 지향이랑 차이가 뭐지? 라는 생각이 들어 차이를 비교하는 내용을 찾아 보았다.

클래스

클래스는 사용자가 직접 객체를 선언하고 객체 멤버를 구성하여 사용할 수 있습니다. 이 때 클래스의 범위와 용도를 정해줄 수 있죠. 이렇게 만든 클래스는 그 용도와 목적에 맞게 상속을 통한 인스턴스화, 인터페이스 구현이 가능합니다. 즉, 다른 객체에서 해당 클래스의 내부 멤버를 세부용도에 맞게 변경하여 사용할 수 있다는 것입니다.

외부 객체에서 접근가능한 클래스 명을 import하여 사용할 수 있으며, 외부 객체에서 끌어다 쓰는 이 클래스 내부 멤버들은 클래스를 구현하는 동안에만 수명이 지속됩니다.

모듈

모듈은 어느 개인이나 단체에 의해 이미 완성되어 있는 것을 사용자가 가지고온 후 그 모듈 객체와 객체 멤버를 끌어와서 사용합니다. 이러한 모듈은 클래스와 다르게 상속을 통한 인스턴스화, 인터페이스 구현이 불가능합니다. 즉, 다른 객체에서 해당 모듈의 내부 멤버를 변경하여 사용하지 못한다는 것입니다.

모듈의 내부 멤버에 프로그램 수명동안 기본적으로 접근이 가능합니다.

이처럼 모듈과 클래스 모듈은 용도에 맞도록 구성한 객체 멤버들을 캡슐화 시킨 후 가져다 사용한다는 부분에서는 동일하지만, 그 사용성에 가장 큰 차이가 존재합니다. 모듈은 보통 다운받은 파일을 프로그램에 포함시켜 놓고 자유롭게 사용하는 반면 클래스는 그 목적에 맞게 각 프로세스에서 상속하여 사용합니다. 모듈은 내부 멤버를 변경하여 사용할 수 없지만 상속받은 클래스는 멤버를 자유롭게 변경할 수 있습니다.

클래스는 객체를 만들기위해 만들고, 모듈은 클래스에 메소드를 제공하기 위해 만든다.

클래스는 말그대로 객체생성을 위해 만드는거고, 모듈은 클래스에서 사용할 기능들을 제공하기 위해 만든다고 생각하면 쉽다


참고사이트:
https://iwuooh.com/entry/%EB%AA%A8%EB%93%88Module%EA%B3%BC-%EB%AA%A8%EB%93%88%ED%99%94Modularization%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A0%95%EC%9D%98%EC%99%80-%EC%9D%B4%ED%95%B4

https://alin-j-alin.tistory.com/20

https://www.morolog.dev/entry/Ruby-Class%EC%99%80-Module%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90

post-custom-banner

0개의 댓글