ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 27. 모듈(module)과 패키지(package)
    Programming/Python 2021. 7. 26. 16:20

     

    [1] 모듈이란?

    # theater_module.py
    # 영화표 가격 모듈
    
    def price(people) : 
        print(f"{people}명 가격은 {people * 10000}원 입니다.")
    def price_morning(people) : 
        print(f"{people}명 조조할인 가격은 {people * 6000}원 입니다.")
    def price_soldier(people) : 
        print(f"{people}명 군인할인 가격은 {people * 4000}원 입니다.")

    - 모듈이란, 함수나 클래스 등을 모아 파일로 만들어 놓은 것이라 생각 가능하다.

    - 모듈파일은 사용하고자하는 py파일과 같은 폴더 내에 있거나, 모듈이 모아져있는 폴더에 있어야한다.

     

     

    [2] 모듈의 사용

     

    1) import

    # pracetice.py
    import theater_module
    theater_module.price(3)
    theater_module.price_soldier(4)
    3명 가격은 30000원 입니다.
    4명 군인할인 가격은 16000원 입니다.

    - import문을 통해 사전에 정의한 모듈을 사용한다.

    - 사용 시, 모듈 파일의 이름을 통해 접근해야한다.

      (예 : theater_module.price(3)을 통해, theater_module에 있는 함수 price를 사용한다.)

     

    # pracetice.py
    import theater_module as mv
    mv.price(3)
    mv.price_soldier(4)
    3명 가격은 30000원 입니다.
    4명 군인할인 가격은 16000원 입니다.

    - import를 사용하여 모듈을 사용할 때, 모듈의 별명을 설정할 수 있다.

    - 위 코드에선, theater_module에 mv라는 별명을 설정한 것이다. 

      (예 : theater_module의 별명인 mv를 사용해 mv.price(3)으로 함수를 사용한다.)

     

     

    2) from import

    # pracetice.py
    from theater_module import *
    price(3)
    price_morning(5)
    3명 가격은 30000원 입니다.
    5명 조조할인 가격은 30000원 입니다.

    - 위 처럼, from import를 통해 모듈을 사용할 수도 있다.

    - 이 경우, 모듈 이름을 통해 함수에 접근하지 않아도 된다.

     

    # pracetice.py
    from theater_module import price, price_morning
    price(3)
    price_morning(5)
    3명 가격은 30000원 입니다.
    5명 조조할인 가격은 30000원 입니다.

    - from import문을 사용하여, 사용하고자 하는 함수만 불러올 수도 있다. 

     

    # pracetice.py
    from theater_module import price_morning as price
    price(3)
    3명 조조할인 가격은 18000원 입니다.

    - from import를 통해 함수를 사용할 때, 해당 함수에 대한 별명을 붙여줄 수 있다. 

    - 위 코드에선, price(3)을 통해 price_morning(3)을 사용한 것이다.

     

     

    [3] 패키지란?

    - 패키지란, 모듈을 모아놓은 폴더라고 생각할 수 있다. 

    - 위 사진처럼 travel 폴더에 3개의 py파일을 생성하였다. travel폴더가 패키지이며, 각각의 py파일이 모듈이 될 것이다.

     

     

    [4] 패키지의 사용

     

    1) thailand.py

    class Thailand :
        def __init__(self, people) : 
            self.people = people
        def show(self) :
            print(f"[태국 여행] {self.people}인 {self.people * 50}만원.")

     

    2) vietnam.py

    class Vietnam :
        def __init__(self, people) : 
            self.people = people
        def show(self) :
            print(f"[베트남 여행] {self.people}인 {self.people * 40}만원.")

     

    3) practice.py

    import travel.thailand
    import travel.vietnam
    trip1 = travel.thailand.Thailand(3)
    trip2 = travel.vietnam.Vietnam(4)
    
    trip1.show()
    trip2.show()
    [태국 여행] 3인 150만원.
    [베트남 여행] 4인 160만원.

    - 각 모듈에 클래스 Thailand, Vietnam을 정의한 후, import하였다.

    - 주의할 것은, import문에선 함수와 클래스를 바로 갖오는 것이 불가능하다. 하지만, from import는 가능하다

     

    4) from import

    from travel.thailand import Thailand
    from travel import vietnam
    trip1 = Thailand(3)
    trip2 = vietnam.Vietnam(4)
    
    trip1.show()
    trip2.show()
    [태국 여행] 3인 150만원.
    [베트남 여행] 4인 160만원.

    - 위 처럼 from import를 사용할 수 있다.

    - trip1은 travel 패키지 안에 있는 thailand 모듈의 클래스 Thailand를 직접 import하였다. 따라서, trip1 정의 시 클래스명을 바로 사용한다.

    - trip2는 travel 패키지 안에 있는 thailand 모듈을 import 하였다. 따라서, trip2 정의 시 모듈명과 클래스명을 통해 접근한다.

     

    5) from travel import *

    from travel import *
    trip = vietnam.Vietnam(3)
    trip.show()
    NameError: name 'vietnam' is not defined

    - 위 코드는 에러가 발생한다. 

    - from travel import *은 travel 패키지 안에 있는 모든 모듈을 가져오겠다는 의미인데, 이처럼 사용하기 위해선 아래와 같은 작업이 필요하다.

     

    # __init__.py
    __all__ = ["vietnam"]

    - travel 패키지 내에 있는 __init__.py에 위와 같은 구문을 입력하면 오류가 발생하지 않는다. 

    - 위 코드 추가 후, 실행 시 결과가 정상적으로 도출되는 것을 아래에서 확인할 수 있다.

     

    [베트남 여행] 3인 120만원.

     

     

     

     

    *본 글은 코딩 유튜버 '나도코딩'님의 무료강의를 바탕으로 내용을 정리 및 추가한 글입니다.

    https://www.youtube.com/watch?v=kWiCuklohdY&t=5934s

     

    'Programming > Python' 카테고리의 다른 글

    [Python] 26. 예외 처리  (0) 2021.07.26
    [Python] 25. pass와 super, isinstance()  (0) 2021.07.25
    [Python] 24. 상속  (0) 2021.07.25
    [Python] 23. 클래스(class)  (0) 2021.07.25
    [Python] 22. with  (0) 2021.07.20
Designed by Tistory.