모듈 (프로그래밍) 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
1번째 줄: 1번째 줄:
'''모듈'''(module)이란 다른 프로그램에 링크되어 특정한 기능을 수행하도록 작성된 독립적인 프로그램의 단위이다. 보통 [[라이브러리]](library)가 1개의 파일로 구성되는데 반해, 모듈은 2개 이상의 파일들로 구성된다. 모듈을 이용하면 소프트웨어 개발을 마치 [[레고]](lego) 블록을 쌓듯이 조립식으로 쉽게 할 수 있다. [[컴포넌트]](component)라고도 한다.
+
일반적으로 컴퓨터 분야에서의 '''모듈(module)'''이라는 용어는, 독립되어 있는 하나의 소프트웨어 또는 하드웨어 단위를 지칭하는데 사용된다.
 +
<ref name='module_def'>텀즈, 〈[http://www.terms.co.kr/module.htm module 모듈 ]〉, 1999년 9월 13일</ref>
  
 
== 개요 ==
 
== 개요 ==
일반적으로 컴퓨터 분야에서의 모듈(module)이라는 용어는, 독립되어 있는 하나의 소프트웨어 또는 하드웨어 단위를 지칭하는데 사용된다.
+
모듈(module)은 역사적으로 프로그래밍이라는 관점에서는 기본적으로 본체에 대한 독립된 하위 단위라는 필연적인 개념의 큰 틀을 따르고 있지만 본체와 모듈 간에 가지고 있었던 문제들을 해결해 나가는 과정에서 발전하였다. 모듈에 가장 큰 영향을 미쳤던 클래스 그리고 라이브러리가 향상됨에 따라 점차 발전하였다. 이러한 지속 가능성은 이것의 가장 큰 장점 중 하나이다. 초기에는 분리된 독립성의 모듈로 도입되었으나 점차로 객체화, 캡슐화, 모듈화 프로그래밍 기법 등 여러 기능들이 추가되면서 점차적으로 영역이 나뉘어가고 있다. 그러나 이로 인하여 모듈성을 제대로 반영하지 못하고 있다는 비난을 받을 수도 있다. 한편 이러한 비난은 모듈 시스템, 모듈 프로그래밍이 갖는 현재의 한계를 인식하고 보다 안정적으로 발전하기 위해 효율적인 방향을 추구하는데 기여할 수 있다.
<ref name='module_def'>텀즈, 〈[http://www.terms.co.kr/module.htm module 모듈 ]〉, 1999년 9월 13일</ref> 모듈(module)은 역사적으로 프로그래밍이라는 관점에서는 기본적으로 본체에 대한 독립된 하위 단위라는 필연적인 개념의 큰 틀을 따르고 있지만 본체와 모듈 간에 가지고 있었던 문제들을 해결해 나가는 과정에서 발전하였다. 모듈에 가장 큰 영향을 미쳤던 클래스 그리고 라이브러리가 향상됨에 따라 점차 발전하였다. 이러한 지속 가능성은 이것의 가장 큰 장점 중 하나이다. 초기에는 분리된 독립성의 모듈로 도입되었으나 점차로 객체화, 캡슐화, 모듈화 프로그래밍 기법 등 여러 기능들이 추가되면서 점차적으로 영역이 나뉘어가고 있다. 그러나 이로 인하여 모듈성을 제대로 반영하지 못하고 있다는 비난을 받을 수도 있다. 한편 이러한 비난은 모듈 시스템, 모듈 프로그래밍이 갖는 현재의 한계를 인식하고 보다 안정적으로 발전하기 위해 효율적인 방향을 추구하는데 기여할 수 있다. 여기서 본체는 하드웨어적인 운영체계일 수도 있고 규모 있는 소프트웨어 프로그램의 본체일 수도 있다.<ref name='module_synopsis'>위키백과, 〈[https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%93%88_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D) 모듈(프로그래밍) ]〉</ref>
 
  
 +
여기서 본체는 하드웨어적인 운영체계일 수도 있고 규모 있는 소프트웨어 프로그램의 본체일 수도 있다.<ref name='module_synopsis'>위키백과, 〈[https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%93%88_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D) 모듈(프로그래밍) ]〉</ref>
 
== 특징 ==
 
== 특징 ==
 
복잡한 프로그램을 작성하기 위해서 필요한 모든 과정을 직접 만들어야 한다면 전체적인 모습에서부터 작은 기능 하나하나까지 모두 구상해서 만들고, 오류를 수정해서 한 곳에 모아두면 오류가 생기고, 또 다른 프로그래머는 자신과 비슷한 기능을 하는 프로그램을 만들면서 똑같은 시행착오가 생길 것이다.
 
복잡한 프로그램을 작성하기 위해서 필요한 모든 과정을 직접 만들어야 한다면 전체적인 모습에서부터 작은 기능 하나하나까지 모두 구상해서 만들고, 오류를 수정해서 한 곳에 모아두면 오류가 생기고, 또 다른 프로그래머는 자신과 비슷한 기능을 하는 프로그램을 만들면서 똑같은 시행착오가 생길 것이다.
 
그래서 이런 문제를 해결하기 위해 대부분의 프로그래밍 언어에서는 모듈이라는 개념을 사용한다. 모듈은 프로그램의 꾸러미라고 생각하면 된다.  
 
그래서 이런 문제를 해결하기 위해 대부분의 프로그래밍 언어에서는 모듈이라는 개념을 사용한다. 모듈은 프로그램의 꾸러미라고 생각하면 된다.  
 
이 꾸러미들을 조각으로 나누어 다루기 쉽도록 하는 과정을 모듈화(Modularization)라고 한다. 모듈은 한 가지 일만 수행해야 하며, 한 가지 일만 수행해야 하기 때문에 역할이 간단하고 명료해야 한다. 또한 다른 프로그램에서도 사용할 수 있도록 모듈은 단순해야 하고 여러 프로그램에서 붙여서 쓸 수 있도록 독립성을 유지해야 한다. 모듈화를 하게 되면 수행하는 일에 따라서 모듈이 나뉘어져 있어서 어느 부분을 수정해야 할지 찾기 쉽기 때문에 수정이 용이하고 통일성 있게 표준화해 놓기 때문에 다른 사람이 만든 모듈들을 유지보수하기 쉽다.<ref name='module_char'>Dominic, 〈[https://appleceo.github.io/2019/06/09/ModuleAndModularization/ 모듈과 모듈화 ]〉, 2019년 6월 9일</ref>
 
이 꾸러미들을 조각으로 나누어 다루기 쉽도록 하는 과정을 모듈화(Modularization)라고 한다. 모듈은 한 가지 일만 수행해야 하며, 한 가지 일만 수행해야 하기 때문에 역할이 간단하고 명료해야 한다. 또한 다른 프로그램에서도 사용할 수 있도록 모듈은 단순해야 하고 여러 프로그램에서 붙여서 쓸 수 있도록 독립성을 유지해야 한다. 모듈화를 하게 되면 수행하는 일에 따라서 모듈이 나뉘어져 있어서 어느 부분을 수정해야 할지 찾기 쉽기 때문에 수정이 용이하고 통일성 있게 표준화해 놓기 때문에 다른 사람이 만든 모듈들을 유지보수하기 쉽다.<ref name='module_char'>Dominic, 〈[https://appleceo.github.io/2019/06/09/ModuleAndModularization/ 모듈과 모듈화 ]〉, 2019년 6월 9일</ref>
 
 
== 활용 ==
 
== 활용 ==
 
=== 파이썬 ===
 
=== 파이썬 ===
52번째 줄: 52번째 줄:
 
이러한 경로들은 모두 취합되어 시스템 경로인 sys.path에 리스트 형태로 저장된다. 따라서, 모듈이 검색되는 검색 경로는 sys.path를 체크하면 쉽게 알 수 있다. 모듈을 import 하면 sys.path에 있는 경로 순서대로 모듈을 찾아 import하다가 만약 끝까지 찾지 못하면 에러가 발생된다.
 
이러한 경로들은 모두 취합되어 시스템 경로인 sys.path에 리스트 형태로 저장된다. 따라서, 모듈이 검색되는 검색 경로는 sys.path를 체크하면 쉽게 알 수 있다. 모듈을 import 하면 sys.path에 있는 경로 순서대로 모듈을 찾아 import하다가 만약 끝까지 찾지 못하면 에러가 발생된다.
 
sys.path를 사용하기 위해서는 sys라는 시스템 모듈을 import 해야 하며, sys.path는 임의로 수정할 수도 있다. 예를 들어, 기존 sys.path에 새 경로를 추가(append)하면, 추가된 경로도 이후 모듈 검색 경로에 포함된다<ref name='python_ex'></ref>
 
sys.path를 사용하기 위해서는 sys라는 시스템 모듈을 import 해야 하며, sys.path는 임의로 수정할 수도 있다. 예를 들어, 기존 sys.path에 새 경로를 추가(append)하면, 추가된 경로도 이후 모듈 검색 경로에 포함된다<ref name='python_ex'></ref>
 
 
==== 모듈의 작성 ====
 
==== 모듈의 작성 ====
 
우선 아래 두 개의 함수(add와 substract)를 mylib.py 라는 모듈에 저장한다.<ref name='python_ex'></ref>
 
우선 아래 두 개의 함수(add와 substract)를 mylib.py 라는 모듈에 저장한다.<ref name='python_ex'></ref>
96번째 줄: 95번째 줄:
 
=== Node.js ===
 
=== Node.js ===
 
==== NodeJS 모듈 시스템 ====
 
==== NodeJS 모듈 시스템 ====
NodeJS는 파일 형태로 모듈을 관리할 수 있는 Common JS로 구현하였다. 모듈은 복잡한 application을 구성하기 위한 블록 역할을 하기도 하지만, exports시키지 않은 내부적인 함수와 변수들은 비공개로 유지하여 정보를 숨기는 메커니즘이기도 하다.<ref name='nodejs_ex'>pa324, 〈[https://velog.io/@pa324/NodeJS-%EB%AA%A8%EB%93%88-%EC%8B%9C%EC%8A%A4%ED%85%9C NodeJS - 모듈 시스템 ]〉</ref>
+
NodeJS는 파일 형태로 모듈을 관리할 수 있는 Common JS로 구현하였다. 모듈은 복잡한 application을 구성하기 위한 블록 역할을 하기도 하지만, exports시키지 않은 내부적인 함수와 변수들은 비공개로 유지하여 정보를 숨기는 메커니즘이기도 하다.<ref name='nodejs_ex'>pa324, 〈[
 +
https://velog.io/@pa324/NodeJS-%EB%AA%A8%EB%93%88-%EC%8B%9C%EC%8A%A4%ED%85%9C NodeJS - 모듈 시스템 ]〉</ref>
 
===== 기본 모듈 사용 =====
 
===== 기본 모듈 사용 =====
 
   const http = require('http');
 
   const http = require('http');
108번째 줄: 108번째 줄:
 
   sum : sum
 
   sum : sum
 
   }<ref name='nodejs_ex'></ref>
 
   }<ref name='nodejs_ex'></ref>
 
 
===== 노출식 모듈 패턴 =====
 
===== 노출식 모듈 패턴 =====
 
자바스크립트의 문제점 중 하나가 네임스페이스가 없다는 것이다. 전역 범위에서 실행되는 프로그램은 내부 application과 종속된 라이브러리 코드의 데이터들로 인해 충돌이 발생할 수 있다. 이 문제를 해결하기 위해 노출식 모듈 패턴을 사용해야 한다.<ref name='nodejs_ex'></ref>
 
자바스크립트의 문제점 중 하나가 네임스페이스가 없다는 것이다. 전역 범위에서 실행되는 프로그램은 내부 application과 종속된 라이브러리 코드의 데이터들로 인해 충돌이 발생할 수 있다. 이 문제를 해결하기 위해 노출식 모듈 패턴을 사용해야 한다.<ref name='nodejs_ex'></ref>
131번째 줄: 130번째 줄:
  
 
== 참고자료 ==
 
== 참고자료 ==
* 텀즈, 〈[http://www.terms.co.kr/module.htm module 모듈 ]〉, 1999년 9월 13일
 
* 위키백과, 〈[https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%93%88_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D) 모듈(프로그래밍) ]〉
 
* Dominic, 〈[https://appleceo.github.io/2019/06/09/ModuleAndModularization/ 모듈과 모듈화 ]〉, 2019년 6월 9일
 
* 예제로 배우는 파이썬 프로그래밍, 〈[http://pythonstudy.xyz/python/article/17-%EB%AA%A8%EB%93%88-Module 모듈(Module) ]〉
 
* pa324, 〈[https://velog.io/@pa324/NodeJS-%EB%AA%A8%EB%93%88-%EC%8B%9C%EC%8A%A4%ED%85%9C NodeJS - 모듈 시스템 ]〉
 
  
 
== 같이 보기 ==
 
== 같이 보기 ==
* [[모듈화]]
+
* [[객체지향프로그래밍]]
* [[객체지향 프로그래밍]]
 
* [[파이썬]]
 
* [[Node.js]]
 
* [[모듈]]
 
  
{{프로그래밍 | 검토 필요}}
+
{{개발방법론|검토 필요}}

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)