1. 모듈(module)
- 프로그램을 개발하다보면 프로그램의 크기가 커짐에 따라 개발이나 유지보수를 위해 소스 파일을 여러 개로 나눠야 할 수도 있습니다.
- 또한, 한 번 정의해서 사용한 편리한 함수를 다른 프로그램에서 또다시 정의하지 않고 곧바로 사용하고 싶어질 수도 있습니다.
- 이를 위해 파이썬에서는 한 번 정의했던 변수나 함수, 클래스 등을 다른 파이썬 프로그램에서도 손쉽게 불러와 사용할 수 있도록 하나의 파일로 모아놓는 방법을 제공하며, 이것을 모듈(module)이라고 부릅니다.
- 모듈은 파이썬 프로그램에서 사용할 수 있는 여러 정의들과 실행 가능한 구문들을 담고 있는 하나의 파이썬 파일(.py)로써, 파이썬에서 기본적으로 제공하는 모듈뿐만 아니라 다른 사람이 만든 모듈을 사용하거나 자신이 직접 새로운 모듈을 작성하여 사용할 수도 있습니다.
2. 모듈 불러오기
- 파이썬에서는 import 문을 사용하여 다음과 같이 세 가지 방식으로 모듈을 불러올 수 있습니다.
1. import 모듈명
2. from 모듈명 import *
3. from 모듈명 import 함수명 또는 클래스명
- 이러한 import 문은 코드의 어느 위치에서라도 사용할 수 있지만, 통상적으로 코드의 맨 앞에 위치하는 것이 가장 좋습니다.
- 첫 번째와 두 번째 방법은 모두 해당 모듈 전체를 불러옵니다.
- 첫 번째 방법은 모듈에 포함된 변수나 함수를 사용할 때마다 매번 모듈명과 함께 닷(.) 연산자를 사용해야 하지만, 두 번째 방법은 변수명이나 함수명만으로도 간편하게 사용할 수 있습니다.
import math
print(math.pi)
print(math.pow(2, 2))
from math import *
print(pi)
print(pow(2, 2))
결과
3.141592653589793
4.0
3.141592653589793
4.0
- 위의 예제에서는 파이썬에서 기본적으로 제공하는 수학 관련 모듈인 math 모듈을 임포트해서 사용하고 있습니다.
- 이때 프로그램 내에서 math 모듈을 사용하려면 언제나 모듈명인 math와 닷(.) 연산자까지 함께 사용해야만 합니다.
- 만약 모듈명을 함께 사용하지 않으면, 파이썬은 해당 변수나 함수가 정의되어 있지 않다고 판단하여 NameError를 발생시킬 것입니다.
- 하지만 다음 예제처럼 두 번째 방법을 사용하여 모듈을 임포트하면 모듈명을 사용하지 않고 변수명이나 함수명만으로 간단하게 사용할 수 있습니다.
e = "내가 정의한 변수 e"
print(e)
from math import *
print(e)
결과
내가 정의한 변수 e
2.718281828459045
- 마지막으로 세 번째 방법은 모듈 전체가 아닌 해당 모듈 내에서 특정 변수나 함수, 클래스만을 불러오고자 할 때 사용합니다.
- 얼핏 생각하기에 두 번째 방법을 사용하면 굳이 세 번째 방법은 사용할 필요가 없다고 느껴질 수도 있습니다.
- 하지만 두 번째 방법은 프로그램에서 정의한 변수명과 불러온 모듈에 포함된 변수명이 겹치는 경우에 다음과 같이 의도치 않은 결과를 가져올 수 있습니다.
e = "내가 정의한 변수 e"
print(e)
from math import *
print(e)
print(pi)
결과
내가 정의한 변수 e
2.718281828459045
3.141592653589793
- 위의 예제는 수학에서 자주 사용하는 원주율(pi, 3.141592...) 값을 사용하기 위해 math 모듈을 전부 불러온 예제입니다.
- 그리고 1번 라인에서는 문자열 변수 e를 선언하고 있습니다.
- 하지만 math 모듈을 임포트한 다음인 5번 라인부터는 1번 라인에서 정의한 변수 e에는 접근할 수 없게 됩니다.
- 그 이유는 불러온 math 모듈에 이미 수학에서 자주 사용되는 오일러의 수(e, 2.71828...)가 같은 이름의 변수 e로 포함되어 있기 때문입니다.
- 그 결과 5번 라인에서 변수 e의 값을 출력하면, 직접 선언한 문자열이 아닌 오일러의 수가 출력됨을 확인할 수 있습니다.
- 이처럼 두 번째 방법은 불러온 모듈을 매우 손쉽게 사용할 수 있도록 해주지만, 사용자가 직접 정의한 변수나 함수와 이름이 겹칠 가능성이 언제나 존재합니다.
- 따라서 이와 같은 상황을 피하기 위해 import 문을 언제나 코드의 맨 앞에 위치시키거나, 다음 예제와 같이 필요한 변수나 함수만을 불러와 사용하는 것이 좋습니다.
e = "내가 정의한 변수 e"
print(e)
from math import pi
print(e)
print(pi)
결과
내가 정의한 변수 e
내가 정의한 변수 e
3.141592653589793
- 이처럼 모듈을 불러와 사용할 때에는 상황에 맞는 적절한 방법을 선택할 필요가 있습니다.