3. 모듈 Last updated: 2023-10-17 10:30:05

모듈은 코드들의 집합을 의미한다. 다른 프로그래밍 언어에서 사용하는 라이브러리와 비슷한 개념이다. 모듈 내에는 여러 개의 함수와 클래스들이 존재할 수 있다. 파이썬에서는 .py라는 확장자로 저장된 파이썬 파일을 모듈이라고 부른다.

3.1 모듈 생성

모듈을 생성하려면 작성한 코드를 .py 확장자를 갖는 파일로 저장한다. 다음은 간략한 모듈을 작성한 것이다.


A. *.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


3.2 모듈 이용


A. 모듈 함수 사용

.py로 작성된 파일을 사용하려면 import를 통해 모듈을 현재의 소스 코드 사용 목록에 추가시켜야 한다. import 문의 형식은 다음과 같다.

형식

import 모듈명
import 상위모듈명.하위모듈명

설명

모듈을 import 하려면 모듈명을 지정해야 한다. 파이썬에서 모듈명은 파이썬 파일의 .py를 제외한 나머지 이름이다. my_module.py 파일이 있다면 모듈명은 my_module이다.

예제

import my_module
import my.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 모듈의 함수를 호출한다. 호출하는 방법은 ‘모듈 이름.함수명( )’ 이다.


B. 모듈 변수 사용

.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를 바로 사용하였다.



C. 패키지의 모듈 import

만일 모듈이 폴더 아래 존재한다면 이 경로를 알려줘야 한다. 폴더에는 여러 개의 모듈이 존재할 수 있다. 이러한 경우 파이썬에서 폴더를 패키지라고 부른다.

다음 예제는 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 모듈경로 import 모듈명

설명

모듈은 폴더 구조에 따라 상위 모듈과 하위 모듈로 구성된다. from 절 뒤에 상위 모듈이나 모듈이 위치하는 경로를 지정한다.

예제

from util import my_module
from ../utility 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 모듈의 함수를 호출한다. 호출하는 방법은 ‘모듈 이름.함수명( )’ 이다.


D. 모듈 별칭 만들기

모듈 이름이 긴 경우에는 모듈을 짧고 간단한 별칭(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 모듈의 함수를 호출한다. 호출하는 방법은 ‘모듈 별칭.함수명( )’ 이다.


E. 표준 라이브러리(Standard Library) import

파이썬에서 기본 제공하는 내장 모듈은 경로와 상관 없이 바로 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( ) 함수를 호출해 현재 파일의 경로를 얻어와서 출력한다.


F. 모듈, 패키지, 라이브러리

파이썬에는 자주 사용되는 함수와 변수 등을 묶어 모듈을 만들고, 이 모듈들을 모아서 패키지 혹은 라이브러리라고 부른다. 모듈은 .py 확장자를 갖는 한 개의 파이썬 파일이라고 앞에서 이야기했다. 이렇게 생성한 모듈 여러 개를 묶어 폴더에 모아 놓은 것이 패키지이다. 또한 패키지 여러 개를 묶어 설치하여 사용할 수 있도록 제공하는 것이 라이브러리이다. 다음 그림을 보면 보다 쉽게 이해할 수 있다. 맨 아래 파이썬 파일(.py 확장자)들 각각을 모듈이라고 부르며, 이 모듈들을 포함하는 폴더를 패키지, 여러 패키지들을 모아 놓은 라이브러리라 부른다. 패키지나 라이브러리는 pypi 라고 하는 파이썬 패키지 배포 사이트에 등록을 할 수 있다. 이렇게 등록된 파이썬 패키지는 pip 명령을 통해 누구든 설치해 사용할 수 있다. 다음 그림은 모듈, 패키지, 라이브러리의 구조를 나타낸다. 모듈은 파이썬 파일이고, 이를 저장하고 있는 디렉토리를 패키지라고 부른다. 패키지는 여러 단계로 구성될 수 있다.

image

[그림 5-3-1] 파이썬의 라이브러리, 패키지, 모듈 구조