티스토리 뷰

누군가와 함께 여행을 갈 때는 서로 여행 스타일이 비슷해야 더 즐거운 시간을 보낼 수 있습니다.

아래 표의 각 항목에 대해서 여러분이 선호하시는 여행 방법을 체크해두시면 친구와 함께 여행을 갈 때 서로를 더 배려할 수 있을 텐데요.

구분 선택 1 선택 2
경비 N분의 1 각자
계획 철저 즉흥
숙박 호텔 게스트 하우스
교통 택시 대중교통
식사 맛집 아무집
성향 부지런 여유

 

어쩌면 여행을 하는 시간보다 여행을 준비하는 과정이 더 오래 걸릴 수도 있습니다. 특히 해외 여행을 떠나게 되는 경우 항공사 선택에서부터 여행 일정, 숙소, 차량 렌트, 시간표 작성 등 많은 부분을 신경써야 하는데, 이 때 여행사에서 제공하는 패키지 상품을 이용하면 훨씬 수월하게 여행을 할 수 있습니다. 비행기에서부터 현지 도착 후 이동, 숙소, 식당도 모두 다 예약이 되어 있으며 시간별로 어느 곳을 방문할지에 대한 계획은 물론 여행 경비 또한 미리 알 수 있지요. 단, 다른 여행객들과 함께 여행을 하게 되므로 자유로운 여행을 원하는 분들에게는 맞지 않을 수도 있습니다.

 

파이썬에도 패키지가 있는데요.

마치 여행사 패키지 상품을 통해 항공, 숙소, 차량을 한꺼번에 예약할 수 있는 것처럼 파이썬에서는 여러 모듈들을 모아 놓은 집합을 패키지라고 하며, 패키지는 보통 하나의 폴더 안에 여러 모듈 파일들로 구성됩니다.

 

이해를 돕기 위해 여러분이 신규 여행사 관련 프로젝트를 담당하게 되었다고 가정하겠습니다. 이 여행사는 태국과 베트남 패키지 여행 상품을 제공합니다.

 

Visual Studio Code 에서 새로운 폴더를 하나 만들고 이름은 travel 로 하여 새로운 패키지를 생성합니다. 그리고 travel 폴더 밑에 태국 패키지 상품을 위한 모듈인 thailand.py 파일, 그리고 베트남 패키지 상품을 위한 모듈인 vietnam.py 파일을 만들겠습니다. 마지막으로 __init__.py 라는 파일도 함께 만들겠습니다.

travel
 ├  __init__.py
 ├  thailand.py
 └  vietnam.py

 

먼저 태국 여행 패키지 상품을 위한 thailand.py 파일에 내용을 채워보겠습니다.

ThailandPackage 란 이름의 클래스를 만들고 detail() 이라는 메소드를 하나 정의하는데 이 메소드가 호출되면 태국 패키지 상품에 대한 요약 정보가 출력되도록 합니다.

class ThailandPackage:
    def detail(self):
        print("[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원")

 

비슷한 형태로 vietnam.py 파일에 VietnamPackage 란 이름으로 베트남 여행 패키지 클래스도 정의하겠습니다.

class VietnamPackage:
    def detail(self):
        print("[베트남 패키지 3박 5일] 다낭 효도 여행 60만원")

 

__init__.py 는 일단은 그대로 두고, 기존에 연습하던 practice.py 파일에서 travel 패키지를 사용해보도록 하겠습니다. 이 때 앞에서 작성한 2개 파일은 반드시 저장을 해주셔야 합니다.

 

practice.py 에서는 travel 패키지의 thailand 모듈을 import 하고, 모듈에 정의된 ThailandPackage 객체를 만들고 detail() 메소드를 호출해보겠습니다.

import travel.thailand
trip_to = travel.thailand.ThailandPackage()
trip_to.detail()

실행해보면 다음과 같이 태국 여행 패키지 상품에 대한 정보가 올바르게 출력됩니다.

[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원

 

단, import 구문을 사용할 때는 그 대상이 모듈이나 패키지여야 하며, 클래스나 함수는 import 를 할 수 없습니다.

import travel.thailand.ThailandPackage # 클래스 직접 import 불가
trip_to = travel.thailand.ThailandPackage()
trip_to.detail()

import 구문을 위처럼 변경하면 다음과 같은 에러가 발생합니다.

ModuleNotFoundError: No module named 'travel.thailand.ThailandPackage'; 'travel.thailand' is not a package

 

반면에 from ~ import 구문을 사용하면 모듈, 패키지, 클래스, 함수 모두 import 를 할 수 있습니다. 다음과 같이 travel.thailand 모듈에서 ThailandPackage 클래스를 import 하도록 코드를 수정하면 되는데요. 이 때는 import 한 클래스 객체를 생성할 때 앞에서 했던 것과는 다르게 travel.thailand 부분은 생략하고 클래스 이름인 ThailandPackage 를 통해 접근 가능합니다.

from travel.thailand import ThailandPackage # travel.thailand 모듈에서 ThailandPackage 클래스 가져오기
trip_to = ThailandPackage() # travel.thailand. 는 생략
trip_to.detail()

 

실행해보면 정상적으로 태국 패키지 상품 정보가 출력됩니다.

[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원

 

베트남 정보도 확인해볼까요?

이번에는 조금 다르게 travel 패키지에서 vietnam 모듈을 import 해오도록 하겠습니다. 이 경우 모듈명인 vietnam. 을 통해 모듈 내 VietnamPackage 클래스에 접근이 가능합니다.

from travel import vietnam # travel 패키지에서 vietnam 모듈 가져오기
trip_to = vietnam.VietnamPackage() # travel. 은 생략
trip_to.detail()

 

실행해보면 베트남 패키지 상품이 올바르게 출력됩니다.

[베트남 패키지 3박 5일] 다낭 효도 여행 60만원

 

어떤 대상을 import 하느냐에 따라서 대상 내에 접근하기 위한 코드도 달라져야 한다는 점을 주의 부탁드립니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함