모듈
모듈이란 함수나 변수, 또는 클래스를 모아놓은 파일이다. 다른 파이썬 프로그램에서 불러올 수 있게 만들어진 파이썬 파일을 모듈이라 칭한다.
파이썬으로 프로그래밍을 할 때에는 굉장히 많은 모듈을 사용한다. 물론 이미 다른 프로그래머가 만든 라이브러리들이 대표적이겠지만
우리가 직접 만들어서 사용해야 하는 경우도 생긴다.
모듈 만들고 불러오기
우선 위와 같이 간단한 모듈을 만든다. 저장은 mod.py로 한다. 현재 mod.py가 저장된 경로는 C:\Python_Study\mod.py 이다. 이제 cmd 명령으로
도스창을 열고 위의 경로로 이동 한 후 대화형 인터프리터를 실행한다. 그리고 아래와 같이 따라한다. 반드시 mod.py가 있는 곳에서 실행해야 한다.
그리고 모듈을 불러올 때는 import 라는 명령어를 사용한다. import는 현재 디렉토리에 있는 파일이나 파이썬 라이브러리가 저장되어진 디렉토리에 있는
파이썬 모듈만을 불러올 수 있다.
위처럼 mod.py 파일이 있는 경로로 가서 'python' 명령어로 대화형 shell을 실행한다. 그 후 import mod를 이용하여 mod.py 파일이 불러온다.
그리고 mod.py 파일에 있는 sum 함수를 이용하기 위해 mod.sum 처럼 모듈 뒤에 '.' (점)을 붙이고 함수 이름을 써서 사용한다.
이번에는 mod.py를 다음과 같이 약간 수정한다.
위에서 추가한 safe_sum 함수가 하는 기능은 서로 다른 타입의 객체끼리 더하는 것을 방지해준다. 만약 서로 다른 형태의 객체가 입력으로 들어오면
더할 수 없다라는 메시지를 출력하고 return 문만 단독으로 사용하여 None 값을 돌려준다.
실행을 위해 위와 비슷한 과정을 거친다.
import mod로 mod.py 파일을 불러온다. 다음에 mod.safe_sum(3, 4)로 safe_sum 함수를 호출하고, 함수는 7를 반환한다.
그러나 safe_sum(3, 'a') 처럼 서로 다른 형태의 객체를 입력으로 주고 호출하면 에러 메시지를 출력하고 단독으로 쓰인 print에 의해 None을 반환한다.
때로는 mod.sum, mod.safe_sum 처럼 쓰기 보다는 sum, safe_sum 처럼 함수를 쓰고 싶은 사람도 있을 것이다.
이럴 때는 "from 모듈이름 import 모듈함수"를 사용하면 된다.
위와 같이 from 파일명 import 함수명1, 함수명2 이런 식으로 할 수도 있고 혹은
from mod import *
위와 같은 방법으로도 할 수 있다. '*' 문자는 All이라는 뜻으로 mod.py안에 존재하는 모든 함수를 부르겠다는 것이다.
if __name__ == "__main__" 의 사용
우선 mod.py를 다음과 같이 수정한다. 소스 아래 쪽에 수행할 것을 미리 적는다.
실행 화면은 다음과 같다. 딱히 문제될 것이 없어보이나 문제는 이 mod.py 라는 파일을 import 하여 사용하려 할 때 발생한다.
아래와 같이 import를 해보자.
위와 같은 결과를 볼 수 있다. 단순이 mod.py 파일의 sum과 safe_sum 함수만을 쓰려고 하였는데 import mod를 하는 순간 mod.py 자체가 실행되어
결과값을 출력한다. 이러한 것을 방지하기 위한 방법는 다음과 같이 소스를 수정하면 된다.
16 라인이 뜻하는 것은 도스창에서 C:\Python_Study > python mod.py 처럼 이 파일을 직접 실행시키면 __name__ == "__main__"이 참이 되어
if 문 이하의 라인(17~9)이 실행되고 대화형 인터프리터나 다른 파일에서 이 모듈을 import 하여 쓸 때는 __name__ == "__main__"이 거짓이 되어
if문 이하의 라인 (17~9)가 실행되지 않는다. 결과는 아래에서 볼 수 있다.
클래스/변수를 포함하는 모듈
위에서 알아본 모듈은 함수만을 포함하지만, 모듈은 클래스나 변수를 포함할 수도 있다. 다음과 같이 mod2.py를 작성해보자.
클래스와 함수, 변수등을 모두 포함하고 있는 모듈 파일이다. 실행은 다음과 같이 할 수 있다.
이번에는 대화형 인터프리터를 열고 다음과 같이 해보자.
__name__ == "__main__"이 거짓이 되기 때문에 아무런 값도 출력하지 않는다.
mod2.PI 처럼 mod2.py 안에 있는 PI라는 변수 값을 사용할 수 있다.
위의 예제는 mod2.py에 있는 클래스 math()를 쓰는 방법을 보여준다. 위에서 보듯이 모듈내에 있는 클래스를 이용하기 위해서는 '.' (점)을 이용하여
클래스 이름 앞에 모듈 이름을 먼저 써 주어야 한다.
mod2.py에 있는 sum 함수 역시 사용할 수 있다.
다른 프로그램에서 만든 모듈 불러오기
만들어 놓은 모듈 파일을 사용하기 위해 지금까지 인터프리터만을 이용했지만 이번에는 새롭게 만들 파이썬 파일 내에서 이전에 만들어 놓았던 모듈을 불러
쓰는 방법에 대해 알아보자. 바로 이전에 만든 모듈인 mod2.py 라는 파일을 새롭게 만들 modtest.py 라는 파일에서 불러본다.
우선 다음과 같은 modtest.py 파일을 만든다.
위에서 보듯이 파일에서도 대화형 인터프리터에서 한 것과 마찬가지 방법으로 import mod2로 mod2모듈을 불러와서 쓰면 된다. 여기서 중요한 것은
modtest.py 라는 파일과 mod2.py 라는 파일이 동일한 디렉토리에 있어야만 한다는 점이다.
모듈을 불러오는 제 2의 방법
지금껏 만든 모듈을 불러오기 위해서는 도스창을 열고 해당 디렉토리로 이동한 다음에 사용할 수 있었다. 하지만 항상 이렇게 해야 하는 불편함을
해소할 수 있는 방법이 있다.
만약 자신이 만든 파이썬 모듈을 항상 같은 디렉토리(여기서는 C:\Python_Study)에 저장했다면 그 디렉토리로 이동할 필요없이 모듈을 불러서 쓸 수
있는 방법에 대해 알아보자.
우선 위에서 만든 mod2.py 모듈을 C:\Python_Study라는 디렉토리에 저장하고 다음을 따라하자.
먼저 sys 모듈을 불러온다. sys 모듈은 파이썬을 설치할 때 함께 오는 라이브러리 모듈이다. sys에 대한 것은 나중에 보도록 하자. 일단 sys 모듈을
이용하면 파이썬 라이브러리가 설치되어 잇는 디렉토리를 확인할 수 있다. 바로 path 함수이다.
sys.path는 파이썬 라이브러리들이 설치되어 있는 디렉토리를 보여준다. 또한 파이썬 모듈이 위의 디렉토리에 들어있는 경우에는 해당 디렉토리로 이동할
필요 없이 바로 불러서 쓸 수 있다. 즉, sys.path에 C:\Python_Study 라는 디렉토리를 추가하면 아무데서나 불러 사용할 수 있다.
위에서 보듯이 sys.path의 결과값이 리스트이기 때문에 다음과 같이 디렉토리를 추가할 수 있다.
테스트를 해보면 다음과 같이 아무데서나 불러 올 수 있다.
reload
reload는 이미 불렀던(import) 모듈에 변경 사항이 생겼을 때 다시 그 모듈을 불러서 새로운 사항을 적용시키는 것이다. 파이썬을 배울 때는
별로 사용할 일이 없지만, 모듈을 바꾸어가며 인터프리터에서 테스트할 때는 매우 유용하게 사용된다.
우선 인터프리터창에서 위와같이 현재 mod2.py 모듈의 PI 변수 값을 확인한다.
인터프리터 창을 닫지 말고 기타 에디터(에디터 플러스, 이클립스 등)을 이용하여 위와 같이 mod2.py의 PI 변수 값을 바꾼다.
다시 인터프리터에서 위와 같이 reload를 한 후 수정된 PI 변수 값을 확인해보자.
바뀐 변수값으로 출력되었음을 볼 수 있다. reload 대신에 import를 하면 아쉽게도 이전의 값이 유지된다.
하지만 위에서 mod2.py 파일을 수정 후 인터프리터를 닫고 다시 실행 후 import를 하면 변경된 사항이 적용된다
'Developing > Python_배우기' 카테고리의 다른 글
Python 12 - 라이브러리 (내장 함수) (0) | 2014.02.15 |
---|---|
Python 11 - 예외처리 (0) | 2014.02.15 |
Python 09 - 클래스 (0) | 2014.01.26 |
Python 08 - 입/출력 (I/O) (0) | 2014.01.25 |
Python 07 - 함수 (0) | 2014.01.12 |