모듈(Module)은 함수나 변수 또는 클래스를 모아 놓은 파일이다. 모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 '파이썬 파일'이라고도 할 수 있다. 앞서 배운 클래스는 상속을 통해 다양한 속성과 메서드를 사용할 수 있었다. 그러나 클래스의 상속은 유사한 성격을 가진 클래스에서만 유용하며, 여러 가지 상황에 사용할 수 있는 범용성은 떨어지는 편이다. 그래서 자주 사용하는 함수들을 따로 관리하다가 필요한 곳에 재사용할 수 있는 방법에 모듈을 사용하면 편리해진다.
앞으로 파이썬 프로그래밍에서 우리는 굉장히 많은 모듈을 사용하게 될 것이다. 다른 사람들이 이미 만들어 놓은 모듈을 사용할 수도 있고, 우리가 직접 만들어서 사용할 수도 있다. 이제부터 모듈을 어떻게 만들고 사용할 수 있는지에 대해 알아보자.
모듈의 생성은 의외로 간단하다. 원하는 코드를 작성한 후 파일을 .py 확장자로 저장하면 된다. 아래와 같이 간단한 모듈을 만들고 mod1.py라는 이름의 파일을 저장하자. 지금까지 에디터로 만들어 온 파이썬 파일과 저장 방식이 다르지 않다.
Anaconda Prompt를 열고, 모듈이 저장된 디렉터리(해당 예시에서는 C:\Python)로 이동한 다음 대화형 인터프리터를 실행하면 모듈을 불러올 수 있다.
아래와 같이 명령어를 작성하며 모듈을 불러와서 사용해 보는 실습을 진행하자.
>>> import mod1 # 만들어 놓은 mod1 모듈을 사용할 수 있도록 import 명령어 사용
>>> print(mod1.add(3, 4)) # 도트 연산자(.)를 사용하여 mod1 모듈 내부의 add 함수 사용
7
>>> print(mod1.sub(4, 2)) # 도트 연산자(.)를 사용하여 mod1 모듈 내부의 sub 함수 사용
2
mod1.py 파일을 불러오기 위해 import 명령어를 사용했다. import는 만들어진 파이썬 모듈을 사용할 수 있게 해 주는 명령어로, 아래와 같이 사용하면 된다.
import module_name
이때, 모듈 이름은 mod1.py에서 확장자 .py를 제거한 mod1만 쓰면 된다.
모듈 함수를 도트 연산자(.)를 사용하여 mod1.sum(a, b)처럼 쓰지 않고 함수 이름만 사용하여 add(a, b)와 같이 사용할 수 있는 방법이 존재한다. 아래와 같은 방법을 사용하면 된다.
from module_name import module_function
아래의 예시 코드를 사용하여 더 자세히 살펴보자.
# 하나의 함수만 사용하는 경우
>>> from mod1 import add # mod1 모듈의 add 함수 사용
>>> add(3, 4)
7
# 함수를 여러 개 사용하고 싶은 경우: 사용할 함수 이름 전부를 쓰면 됨
>>> from mod1 import add, sub # mod1 모듈의 add, sub 함수 사용
>>> sub(4, 2)
2
>>> add(2, 6)
8
# 모듈에 있는 함수 전부를 사용하고 싶을 때
>>> from mod1 import * # mod1 모듈의 모든 함수 사용
>>> add(5, 4)
9
>>> sub(9, 2)
7
사용한 예시 모듈에서는 함수가 2개밖에 없었기 때문에 두 번째와 세 번째 방법은 동일하게 적용된다. 세 번째 방법의 경우 모듈에 포함된 모든 함수를 가지고 오는데, 이는 사용하고자 하는 모듈이 엄청 클 때 메모리나 시간적으로 부담이 될 수 있다. 따라서 이런 경우는 모듈에서 사용할 특정 함수만 가져옴으로써 해결할 수 있다.
만약 사용하고자 하는 모듈의 이름이 길거나 다르게 부르고 싶을 때는 아래의 방법을 사용하면 된다.
>>> import mod1 as md # mod1 모듈을 불러오고, 해당 모듈의 이름을 당분간 md로 부르겠다는 뜻
>>> print(md.add(3, 4))
7
바로 위와 같이 as를 사용하면 된다. 쉽게 설명하자면 위의 코드에서는 mod1 모듈을 불러오고, 해당 모듈을 프로그램 내에서 md로 당분간 부르겠다는 의미다.
def add(a, b):
return a + b
def sub(a, b):
return a - b
print(add(3, 4))
print(sub(4, 2))
위와 같이 모듈의 끝에 print 문을 추가한 후, 해당 모듈을 import 하면 자동으로 결괏값이 출력된다.
>>> import mod1
7 # add(3, 4)의 결괏값 출력
2 # sub(4, 2)의 결괏값 출력
모듈을 불러왔을 때 결괏값이 출력되지 않게 하기 위한 방법으로 if __name__ == "__main__"을 사용할 수 있다.
def add(a, b):
return a + b
def sub(a, b):
return a - b
if __name__ == "__main__":
print(add(3, 4))
print(sub(4, 2))
# 일반 에디터 실행 시 출력 화면
7
2
해당 프로그램을 일반 에디터로 실행하면 __name__ == "__main__" 조건문이 참이 되어 if문 내부의 문장이 실행된다. 그러나 대화형 인터프리터에서나 다른 파일에서 해당 모듈을 불러서 사용할 때는 __name__ == "__main__" 조건문이 거짓이 되어 if문 내부의 문장이 실행되지 않는다. 따라서 아래와 같이 대화형 인터프리터에서 모듈을 불러 오면 아무런 결괏값이 출력되지 않음을 확인할 수 있다.
>>> import mod1
>>>
__name__ 변수는 파이썬이 내부적으로 사용하는 특별한 변수명이다. 만약 mod1.py 파일을 직접 실행할 경우에는 mod1.py의 __name__ 변수에는 __main__의 값이 저장된다. 그러나 파이썬 셸이나 다른 파이썬 모듈에서 mod1을 import 할 경우에는 mod1.py의 __name__ 변수에는 mod1.py의 모듈 값인 mod1이 저장된다.
지금까지 설명에서는 모듈에 함수만 포함했지만 아래와 같이 클래스나 변수 역시 포함할 수 있다.
위와 같이 mod2.py 파일을 생성하고 대화형 인터프리터를 열어 기존의 방식과 같이 모듈을 실행하면 아무런 결괏값이 출력되지 않는다. 이렇게 import된 모듈에 포함된 변수, 클래스, 함수는 아래와 같이 사용할 수 있다.
>>> import mod2 # mod2 모듈 불러옴.
>>> print(mod2.PI) # mod2 모듈에 있는 변수 값 PI 출력
3.141592
>>> a=mod2.Math() # mod2 모듈에 있는 Math 클래스 사용
>>> print(a.sol(2))
12.566368
>>> print(mod2.add(mod2.PI, 4.4))
7.5415920000000005
새로 만들 파이썬 파일에 이전에 이미 만들어 놨던 모듈을 불러와서 사용할 수 있다. 단, 실행 파일과 모듈 파일은 같은 디렉터리(경로)에 있어야 한다.
# C:\Python\modtest.py
import mod2
result = mod2.add(3, 4)
print(result)
# 출력 화면
7
파이썬에 내장된 모듈을 import 해서 사용할 수도 있다.
import platform
print(platform.system())
platform.system()을 사용하면 사용자의 컴퓨터 플랫폼을 알려준다. 해당 사이트에는 파이썬 라이브러리에 내장된 모듈에 대해 나온다. (사이트: https://docs.python.org/3.4/library/index.html)
dir 함수를 사용하면 선택한 모듈 안에 있는 함수들과 변수들을 리스트 형태로 출력해준다.
[ Python 기초 문법 ] - 패키지 (0) | 2023.09.25 |
---|---|
[ Python 기초 문법 ] - 클래스(2) (0) | 2023.08.28 |
[ Python 기초 문법 ] - 클래스(1) (0) | 2023.08.25 |
[ Python 기초 문법 ] - 프로그램 입출력(3) - 파일 읽고 쓰기 (0) | 2023.08.21 |
[ Python 기초 문법 ] - 프로그램 입출력(2) - 사용자 입출력 (0) | 2023.08.21 |
댓글 영역