Python에서는 import 문을 실행하는 것만으로 어떤 소스 파일이든 모듈로 활용할 수 있습니다. 다른 Python 파일 안에서 import 문을 작성하면 해당 파일에 정의된 함수, 클래스, 변수를 그대로 가져와 사용할 수 있습니다.
import 문 기본 문법
import 문은 다음과 같은 형식으로 작성합니다.
import module1[, module2[,... moduleN]]
인터프리터가 import 문을 만나면, 해당 모듈이 검색 경로(search path)에 존재하는 경우 모듈을 불러옵니다. 검색 경로란 인터프리터가 모듈을 임포트하기 전에 탐색하는 디렉터리 목록을 의미합니다.
예를 들어 support.py라는 모듈을 임포트하려면 스크립트 상단에 다음과 같이 작성합니다.
#!/usr/bin/python
# support 모듈 임포트
import support
# 이제 모듈에 정의된 함수를 호출할 수 있습니다.
support.print_func("Zara")위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Hello : Zara
모듈은 한 번만 로드됩니다
모듈은 임포트 횟수와 관계없이 단 한 번만 로드됩니다. 덕분에 여러 곳에서 동일한 모듈을 반복해서 임포트하더라도 모듈 내부 코드가 중복 실행되는 것을 방지할 수 있습니다. 이는 성능 최적화와 상태 일관성 유지 측면에서 중요한 특징입니다.
from...import 문
Python의 from 문을 사용하면 모듈 전체가 아닌, 필요한 속성(함수·클래스·변수)만 골라 현재 네임스페이스로 가져올 수 있습니다. 문법은 다음과 같습니다.
from modname import name1[, name2[, ... nameN]]
예를 들어 fib 모듈에서 fibonacci 함수만 임포트하려면 다음과 같이 작성합니다.
from fib import fibonacci
이 문장은 fib 모듈 전체를 현재 네임스페이스로 가져오지 않습니다. 오직 fibonacci 항목 하나만 임포트하는 모듈의 전역 심볼 테이블(global symbol table)에 추가합니다. 따라서 fib.fibonacci()처럼 모듈 이름을 붙이지 않고 fibonacci()처럼 바로 호출할 수 있습니다.
from...import * 문
다음과 같이 작성하면 모듈에 포함된 모든 이름(name)을 한 번에 현재 네임스페이스로 가져올 수 있습니다.
from modname import *
모듈의 모든 항목을 손쉽게 임포트할 수 있는 편리한 방법이지만, 남용하면 이름 충돌(name collision)이 발생하거나 코드 출처를 파악하기 어려워질 수 있으므로 가급적 절제해서 사용하는 것이 좋습니다. 실무에서는 필요한 항목만 명시적으로 임포트하는 from modname import name 방식을 권장합니다.