끝나지 않는 프로그래밍 일기

1. 모듈(Module)

 

이번에는 모듈(Module)에 대해서 알아보도록 하겠습니다. 파이썬에서의 모듈이란 변수, 클래스, 함수 등과 같은 여러 코드를 한곳에 모아놓은 코드의 모음이라고 할 수 있습니다. 이런 모듈이라는 것을 만들어 놓으면 계속 사용할 수 있으므로 코드의 재사용성을 극대화 시킬 수 있으며, 연관성이 있는 것들을 모듈 단위로 분리하여 효율성을 높일 수 있습니다. 모듈의 장점에 대해서는 차차 알아가보도록 하고, 먼저 모듈을 불러오는 방법부터 알아보도록 하겠습니다. 이 모듈이라는 것을 가져오려면 'import'라는 키워드를 통해 모듈을 불러올 수 있습니다. 아래와 같이 말입니다.

import 모듈명

우리가 직접 모듈을 만들어 보기 전에, 파이썬에 기본으로 내장된 모듈을 불러와, 그 모듈의 기능을 한번 이용해보도록 합시다. 한번, math라는 내장 모듈을 불러와서 dir 함수를 아래와 같이 사용해보세요.

>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

위와 같이 math라는 내장 모듈을 불러오고 나서, dir 함수를 사용하면 그 모듈 내에있는 여러가지 데이터라던지 함수를 알아낼 수 있습니다. 우선은 눈에 보이는 함수 이름들 중 몇가지만 한번 사용해보도록 합시다. 모듈 내에 있는 함수를 사용하려면 '모듈명.함수명'과 같이 사용합니다. 아래를 한번 보시죠.

>>> math.sin(90)
0.8939966636005579
>>> math.pow(2, 10)
1024.0
>>> math.pi
3.141592653589793
>>> 

위를 보시면 알겠지만, 우리가 함수를 직접 정의하지 않아도 math라는 모듈을 불러와 그 모듈에 있는 함수들을 그대로 사용할 수 있다는 사실을 알 수 있습니다. 모듈이란 녀석이 상당히 편리하지 않습니까? 파이썬에서는 이런 수학과 관련된 모듈만이 존재하는게 아니라, 시간, 파일 등과 관련된 다양한 모듈이 존재합니다. 위와 같이 내장되어 있는 모듈도 있지만, 당연하게도 우리가 직접 모듈을 만들어서 불러와 사용할 수 있습니다. 이제는 직접 여러 개의 모듈을 만들어 보도록 하는 경험을 가져보도록 할 것 입니다.

 

2. 모듈의 정의

 

우리가 직접 모듈을 정의하여 불러내어 봅시다. 파이썬의 모듈은 사실 파일(.py)로 저장되어 있으며 우리가 위에서 사용한 내장 모듈도 파이썬이 설치되어 있는 디렉터리 내의 lib이라는 디렉터리에서 찾으실 수 있습니다. 간단하게 말하면, 파이썬에서 모듈을 정의한다는 것은 파일을 만든다는 의미입니다. 우선은 간단하게 사칙연산을 지원하는 모듈을 만들어 보도록 합시다. 이 모듈의 이름은 arithmetic로 하도록 합시다. 우선은 윈도우에 기본으로 내장되어 있는 메모장이나 워드패드 등과 같은 텍스트 편집기를 이용해서 모듈을 만들어 보도록 합시다. 모듈의 확장자는 아까 방금 말했듯이 .py니 전체적인 파일의 이름은 arithmetic.py가 됩니다.

def plus(a, b):
	return a + b
def minus(a, b):
	return a - b
def div(a, b):
	return a / b
def mul(a, b):
	return a * b

이렇게 만드셨으면, 이 파일을 파이썬이 설치된 디렉터리 내에 있는 라이브러리 디렉터리에 옮겨보도록 합시다. 저 같은 경우는 C:\Python33\Lib가 파이썬 라이브러리 디렉터리 경로입니다. 이제 IDLE를 실행시켜서 만든 모듈을 불러와 보도록 합시다.

>>> import arithmetic
>>> dir(arithmetic)
['__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', 'div', 'minus', 'mul', 'plus']
>>> arithmetic.plus(1, 2)
3
>>> arithmetic.mul(300, 400)
120000

위 예제처럼 import라는 키워드를 이용하여 우리가 만든 arithmetic이란 모듈을 불러올 수 있습니다. 기능이 모두 정상적으로 동작하고 있음을 확인하실 수 있습니다. 파이썬에서 모듈을 찾는 순서는 모듈이 이미 로딩되었는지 확인한 뒤에, 로딩되어 있지 않다면 파이썬 경로를 탐색하며 여기에도 존재하지 않으면 PYTHONPATH 환경변수에 등록된 경로에 들어가 탐색을 시작합니다. 만약 위처럼 모듈명을 같이 적지 않고도 바로 참조를 하려면 아래와 같이 import 구문을 사용하시면 됩니다.

>>> from arithmetic import plus
>>> plus(100, 200)
300
>>> plus(30, 400000)
400030

위 예제에서는 'from 모듈명 import 어트리뷰트'와 같은 형식으로 불러오면 해당 어트리뷰트는 모듈명을 적지 않고도 직접 함수를 참조할 수 있습니다. 여기서 어트리뷰트란 함수나 간단히 변수 등의 이름이라고 생각하시면 됩니다. 만약 모듈에 있는 모든 어트리뷰트를 불러오려면 아래와 같은 방식으로 사용하시면 됩니다.

>>> from arithmetic import *
>>> plus(100, 200)
300
>>> minus(40, 20)
20
>>> mul(40, 10002)
400080
>>> div(500, 2)
250.0

위 예제에서 'from 모듈명 import *'와 같은 식으로 쓰이면 arithmetic 모듈에 있는 모든 어트리뷰트를 불러옵니다. 이 경우에도 따로 모듈명을 적지 않고도 직접 참조가 가능하다는 사실을 알 수 있습니다. 유용하죠? 모듈에 대해 대충 알겠다시는 분들은 한번 이 외에도 직접 여러가지 모듈을 만들어서 불러와 모듈을 이용해보세요. 모두 수고하셨습니다.