3. 모듈 Last updated: 2023-10-17 10:30:05
모듈은 코드들의 집합을 의미한다. 다른 프로그래밍 언어에서 사용하는 라이브러리와 비슷한 개념이다. 모듈 내에는 여러 개의 함수와 클래스들이 존재할 수 있다. 파이썬에서는 .py라는 확장자로 저장된 파이썬 파일을 모듈이라고 부른다.
모듈은 코드들의 집합을 의미한다. 다른 프로그래밍 언어에서 사용하는 라이브러리와 비슷한 개념이다. 모듈 내에는 여러 개의 함수와 클래스들이 존재할 수 있다. 파이썬에서는 .py라는 확장자로 저장된 파이썬 파일을 모듈이라고 부른다.
모듈을 생성하려면 작성한 코드를 .py 확장자를 갖는 파일로 저장한다. 다음은 간략한 모듈을 작성한 것이다.
아래 코드를 fruit.py 파일에 작성하고 저장하였다.
[파일 3] fruit.py
# [1] 과일 단위 가격 확인 함수
def get_unit_price(name):
# [2] 과일 가격 정보 dictionary
dict_unit_price = {'apple':1200, 'banana':800, 'orange':1500}
# [3] 과일 이름이 dict에 존재하는지 검사
if name in dict_unit_price:
# [4] 과일 가격 반환
return dict_unit_price[name]
# [5] 과일 이름이 없는 경우
else:
# [6] 가격을 0으로 반환
return 0
.py로 작성된 파일을 사용하려면 import를 통해 모듈을 현재의 소스 코드 사용 목록에 추가시켜야 한다. import 문의 형식은 다음과 같다.
형식 | import 모듈명 |
---|---|
설명 | 모듈을 import 하려면 모듈명을 지정해야 한다. 파이썬에서 모듈명은 파이썬 파일의 .py를 제외한 나머지 이름이다. my_module.py 파일이 있다면 모듈명은 my_module이다. |
예제 | import my_module |
위에서 작성한 fruit.py 파일을 import 하고 사용해 본다. 아래 소스 코드는 fruit.py 파일의 위치와 동일한 경로여야 한다.
[예제 5- 32] import 문 사용하기
# [1] 모듈 import
import fruit
fruit_name = 'apple'
fruit_num = 10
# [2] 모듈의 함수 호출
fruit_unit_price = fruit.get_unit_price(fruit_name)
print(f"{fruit_name}의 1개당 가격은 {fruit_unit_price:,}원 이다.")
print(f"{fruit_name}의 {fruit_num} 가격은 {fruit_num*fruit_unit_price:,}원 이다.")
[결과]
apple의 1개당 가격은 1,200원 이다.
apple의 10 가격은 12,000원 이다.
위 예제에 대해 설명한다.
[1]에서 모듈인 fruit.py 파일을 import 한다. 모듈을 import 할 때는 파일의 확장자 .py를 제외하고 적어준다. 만일 현재의 파일과 .py의 파일이 같은 경로라면 따로 경로를 적어줄 필요는 없다.
[2]에서 import 한 fruit 모듈의 함수를 호출한다. 호출하는 방법은 ‘모듈 이름.함수명( )’ 이다.
.py로 작성된 모듈을 import 하면 해당 모듈에 정의된 변수도 사용할 수 있다.
[예제 5- 33] import한 모듈의 변수 사용하기
# [1] 모듈 import
import fruit
fruit_name = 'apple'
fruit_num = fruit.fruit_num[fruit_name]
# [2] 모듈의 함수 호출
fruit_unit_price = fruit.get_unit_price(fruit_name)
print(f"{fruit_name}의 1개당 가격은 {fruit_unit_price:,}원 이다.")
print(f"{fruit_name}의 {fruit_num} 가격은 {fruit_num*fruit_unit_price:,}원 이다.")
[결과]
apple의 1개당 가격은 1,200원 이다.
apple의 9 가격은 10,800원 이다.
위 예제에서 fruit 모듈을 import하고 fruit 모듈에 정의된 변수 fruit.fruit_num를 바로 사용하였다.
만일 모듈이 폴더 아래 존재한다면 이 경로를 알려줘야 한다. 폴더에는 여러 개의 모듈이 존재할 수 있다. 이러한 경우 파이썬에서 폴더를 패키지라고 부른다.
다음 예제는 fruit.py 파일이 module 폴더 아래에 있을 때 import 하는 예제이다.
[예제 5- 34] 폴더에 포함된 모듈 import 사용하기
# [1] 모듈 import
import basket.fruit
fruit_name = 'apple'
fruit_num = 10
# [2] 모듈의 함수 호출
fruit_unit_price = fruit.get_unit_price(fruit_name)
print(f"{fruit_name}의 1개당 가격은 {fruit_unit_price:,}원 이다.")
print(f"{fruit_name}의 {fruit_num} 가격은 {fruit_num*fruit_unit_price:,}원 이다.")
[결과]
apple의 1개당 가격은 1,200원 이다.
apple의 10 가격은 12,000원 이다.
위 예제에 대해 설명한다.
[1]에서 fruit 모듈을 import 한다. fruit.py 파일은 현재 소스 코드를 기준으로 module이라는 폴더 아래 존재한다. 파이썬에서는 폴더도 하나의 모듈로 인식하므로 module 아래 있는 fruit.py를 import 하기위해 module.fruit를 import 하였다.
[2]에서 import 한 fruit 모듈의 함수를 호출한다. 호출하는 방법은 ‘모듈 이름.함수명( )’ 이다.
모듈이 여러 단계로 구성되어 있다면 다음과 같이 from 키워드로 경로를 알려줄 수도 있다.
형식 | from 상위모듈명 import 모듈명 |
---|---|
설명 | 모듈은 폴더 구조에 따라 상위 모듈과 하위 모듈로 구성된다. from 절 뒤에 상위 모듈이나 모듈이 위치하는 경로를 지정한다. |
예제 | from util import my_module |
위 예제를 다음과 같이 from을 이용해 import 할 수 있다.
[예제 5- 35] from 이용해 모듈 import 하기
# [1] 모듈 import
from basket import fruit
fruit_name = 'apple'
fruit_num = 10
# [2] 모듈의 함수 호출
fruit_unit_price = fruit.get_unit_price(fruit_name)
print(f"{fruit_name}의 1개당 가격은 {fruit_unit_price:,}원 이다.")
print(f"{fruit_name}의 {fruit_num} 가격은 {fruit_num*fruit_unit_price:,}원 이다.")
[결과]
apple의 1개당 가격은 1,200원 이다.
apple의 10 가격은 12,000원 이다.
위 예제에 대해 설명한다.
[1]에서 fruit 모듈을 import 한다. fruit.py 파일은 현재 소스 코드를 기준으로 module이라는 폴더 아래 존재한다. 따라서 from 뒤에 모듈이 위치하는 경로를 적어준다. 그리고 import 문 뒤에 실제 모듈명을 적어준다.
[2]에서 import 한 fruit 모듈의 함수를 호출한다. 호출하는 방법은 ‘모듈 이름.함수명( )’ 이다.
모듈 이름이 긴 경우에는 모듈을 짧고 간단한 별칭(alias)을 만들어 사용할 수 있다. 별칭은 import 할 때 지정해 지정해줘야 하고, 지정한 별칭은 현재 파일 내에서만 사용이 가능하다. 모듈 이름에 별칭을 만드는 형식은 다음과 같다.
형식 | import 모듈명 as 모듈약칭 |
---|---|
설명 | 임포트한 모듈을 더 짧은 약칭으로 변경하려면 as 키워드를 사용한다. |
예제 | import my.my_module as my |
다음은 모듈의 별칭을 지정해 사용하는 예제이다.
[예제 5- 36] as로 모델 별칭 만들기
# [1] 모듈 import
import fruit as fr
fruit_name = 'apple'
fruit_num = 10
# [2] 모듈의 함수 호출
fruit_unit_price = fr.get_unit_price(fruit_name)
print(f"{fruit_name}의 1개당 가격은 {fruit_unit_price:,}원 이다.")
print(f"{fruit_name}의 {fruit_num} 가격은 {fruit_num*fruit_unit_price:,}원 이다.")
[결과]
apple의 1개당 가격은 1,200원 이다.
apple의 10 가격은 12,000원 이다.
위 예제에 대해 설명한다.
[1]에서 fruit 모듈을 import 한다. fruit 라는 모듈을 as 키워드를 이용해 fr 이라고 별칭을 만들어 주었다. 이제 소스 코드 내에서는 fruit 혹은 fr 이라는 이름으로 모듈에 접근할 수 있다.
[2]에서 import 한 fruit 모듈의 함수를 호출한다. 호출하는 방법은 ‘모듈 별칭.함수명( )’ 이다.
파이썬에서 기본 제공하는 내장 모듈은 경로와 상관 없이 바로 import 하여 사용할 수 있다. 아래 홈페이지로 이동하면 파이썬 3.11에서 제공하는 표준 라이브러리 목록을 확인할 수 있다.
다음은 os 패키지를 import 하고 사용하는 예제이다.
[예제 5- 37] 표준 모듈 import 하기
# [1] os 모듈 import
import os
# [2] os 모듈의 함수 사용
print(os.getcwd())
[결과]
D:devall_about_python
위 예제에 대해 설명한다.
[1]에서 os 모듈을 import 했다. 실재 현재 소스 코드에 os.py 파일이 있는 것은 아니지만 os 모듈은 빌트인 모듈이므로 경로 지정 없이 바로 import 하여 사용한다.
[2]에서 os 모듈의 getcwd( ) 함수를 호출해 현재 파일의 경로를 얻어와서 출력한다.
파이썬에는 자주 사용되는 함수와 변수 등을 묶어 모듈을 만들고, 이 모듈들을 모아서 패키지 혹은 라이브러리라고 부른다. 모듈은 .py 확장자를 갖는 한 개의 파이썬 파일이라고 앞에서 이야기했다. 이렇게 생성한 모듈 여러 개를 묶어 폴더에 모아 놓은 것이 패키지이다. 또한 패키지 여러 개를 묶어 설치하여 사용할 수 있도록 제공하는 것이 라이브러리이다. 다음 그림을 보면 보다 쉽게 이해할 수 있다. 맨 아래 파이썬 파일(.py 확장자)들 각각을 모듈이라고 부르며, 이 모듈들을 포함하는 폴더를 패키지, 여러 패키지들을 모아 놓은 라이브러리라 부른다. 패키지나 라이브러리는 pypi 라고 하는 파이썬 패키지 배포 사이트에 등록을 할 수 있다. 이렇게 등록된 파이썬 패키지는 pip 명령을 통해 누구든 설치해 사용할 수 있다. 다음 그림은 모듈, 패키지, 라이브러리의 구조를 나타낸다. 모듈은 파이썬 파일이고, 이를 저장하고 있는 디렉토리를 패키지라고 부른다. 패키지는 여러 단계로 구성될 수 있다.
[그림 5-3-1] 파이썬의 라이브러리, 패키지, 모듈 구조