모듈과 패키지의 중요성
안녕하세요, 여러분! 이번에는 파이썬 코딩에 있어서 매우 중요한 부분인 '모듈과 패키지'에 대해 알아보도록 하겠습니다. 모듈과 패키지가 무엇이고, 왜 중요할까요?
우선 파이썬은 모듈 단위로 코드를 작성하고, 이 작은 모듈들을 조합하여 프로그램을 만듭니다. 하나의 모듈은 여러 개의 함수, 클래스, 변수들로 이루어진 독립적인 코드 단위입니다.
모듈 방식은 프로그램의 코드 재사용성과 유지보수성을 크게 높여줍니다. 예를 들어 어떤 함수를 자주 사용한다면, 그 함수를 별도의 모듈로 만들어두고 필요할 때마다 가져다 쓰면 되죠. 이렇게 하면 중복 코드를 줄일 수 있습니다.
한편 패키지는 모듈들을 계층적으로 구조화한 것입니다. 패키지에는 모듈뿐 아니라 하위 패키지까지 포함될 수 있죠. 패키지 구조를 활용하면 더욱 큰 프로젝트도 체계적으로 관리할 수 있습니다.
파이썬의 대부분의 라이브러리들도 패키지 형태로 되어 있습니다. NumPy, SciPy, Pandas 등 유명한 라이브러리들을 활용하려면 해당 패키지를 import해야 합니다.
이렇게 모듈과 패키지는 코드의 모듈화와 재사용성을 높여 생산성을 크게 향상시켜 줍니다. 또한 외부 라이브러리 활용을 용이하게 해주죠. 따라서 모듈과 패키지에 대한 이해는 파이썬 프로그래밍의 기초 중 기초라고 할 수 있습니다. 그럼 구체적으로 어떻게 모듈과 패키지를 만들고, 가져오고, 활용하는지 차근차근 알아보겠습니다.
모듈 만들기와 import 하기
먼저 모듈 만들기에 대해 알아보겠습니다. 모듈을 만드는 방법은 아주 간단합니다. 텍스트 에디터나 IDE를 열고 확장자가 .py인 새 파일을 생성하기만 하면 됩니다.
여기에 원하는 함수, 클래스, 변수 등을 정의하고 저장하면 모듈이 만들어지는 것입니다. 예를 들어 다음과 같은 math_functions.py 모듈을 만들었다고 가정해 보겠습니다.
# math_functions.py 모듈
def add(a, b):
return a + b
def multiply(a, b):
return a * b
이런 식으로 하나의 파이썬 파일이 곧 하나의 모듈이 되는 것이죠.
그렇다면 이렇게 만든 모듈을 어떻게 활용할까요? 바로 import 구문을 통해 모듈을 가져와 사용할 수 있습니다. import 구문의 기본 문법은 다음과 같습니다.
import 모듈이름
만약 같은 디렉토리에 위에서 만든 math_functions.py 모듈이 있다면, 이렇게 import할 수 있습니다.
import math_functions
result = math_functions.add(3, 4)
print(result) # 7 출력
이처럼 import한 뒤에는 '모듈이름.함수이름'과 같은 형식으로 해당 모듈의 함수를 호출할 수 있습니다.
또한 다음과 같이 특정 함수만 따로 import할 수도 있습니다.
from math_functions import add
result = add(3, 4)
print(result) # 7 출력
이렇게 하면 모듈 이름 없이 바로 함수를 호출할 수 있죠.
from math_functions import add, multiply
result1 = add(3, 4)
result2 = multiply(2, 3)
print(result1, result2) # 7 6 출력
import할 때 주의해야 할 점은 하위 디렉토리의 모듈을 import할 때는 경로를 모두 포함해야 한다는 것입니다. 예를 들면 다음과 같습니다.
import foo.bar.math_functions
이처럼 파이썬의 모듈 import는 매우 간단하지만, 중요한 개념이므로 잘 이해하시기 바랍니다.
init.py와 패키지 만들기
지금까지 단일 모듈에 대해서 알아보았습니다. 그렇다면 패키지는 어떻게 만들까요?
파이썬에서 패키지를 만들려면 디렉토리를 생성하고, 그 안에 init.py 파일을 만들어야 합니다. 이 init.py 파일은 해당 디렉토리가 패키지의 일부임을 알려주는 역할을 합니다.
예를 들어 다음과 같은 구조로 패키지를 만들었다고 가정해 보겠습니다.
mypackage/
__init__.py
module1.py
module2.py
subpackage/
__init__.py
module3.py
여기서 mypackage가 최상위 패키지이고, subpackage가 하위 패키지입니다. init.py 파일은 최상위와 하위 패키지 모두에 존재해야 합니다.
패키지 안의 모듈들은 다음과 같이 import할 수 있습니다.
import mypackage.module1
import mypackage.subpackage.module3
# 또는
from mypackage import module1
from mypackage.subpackage import module3
하위 패키지의 모듈을 import할 때는 패키지 경로를 모두 포함해야 합니다.
그리고 패키지 자체에서도 초기화 코드를 실행할 수 있습니다. init.py 파일 안에 코드를 작성하면 패키지를 import할 때마다 그 코드가 실행됩니다.
이번에는 실제 예제를 통해 패키지 사용 방법을 알아보겠습니다. 다음과 같은 구조의 mypackage라는 패키지가 있다고 가정해 보죠.
mypackage/
__init__.py
math.py
utils.py
subpackage/
__init__.py
nlp.py
먼저 mypackage/init.py 파일에는 다음과 같은 코드가 작성되어 있습니다.
# mypackage/__init__.py
from .math import add, multiply
from .utils import say_hello
여기서는 math.py와 utils.py 모듈에서 각각 add, multiply, say_hello 함수를 import하고 있습니다.
그리고 math.py 파일에는 다음과 같은 코드가 있습니다.
# mypackage/math.py
def add(a, b):
return a + b
def multiply(a, b):
return a * b
utils.py 파일도 보겠습니다.
# mypackage/utils.py
def say_hello():
print("Hello!")
마지막으로 subpackage/nlp.py 파일입니다.
# mypackage/subpackage/nlp.py
def tokenize(text):
return text.split()
이렇게 패키지와 모듈들을 준비했다면, 다음과 같이 사용할 수 있습니다.
import mypackage
result = mypackage.add(3, 4)
print(result) # 7 출력
mypackage.say_hello() # Hello! 출력
from mypackage.subpackage import nlp
tokens = nlp.tokenize("Hello World!")
print(tokens) # ['Hello', 'World!'] 출력
이처럼 패키지 구조를 활용하면 모듈들을 체계적으로 관리할 수 있고, 재사용성도 높아집니다.
또한 init.py에서 원하는 모듈과 함수를 미리 import해두면, 상위 레벨에서 그대로 접근할 수 있어 코딩이 편리해집니다.
패키지 개념이 조금 복잡할 수 있지만, 실제로는 이렇게 디렉토리 구조만 잘 잡고 init.py 파일의 역할을 이해하면 어렵지 않습니다. 앞으로 프로젝트의 규모가 점점 커질수록 패키지 구조의 중요성은 더욱 커질 것입니다.
패키지와 모듈의 이점
이번에는 파이썬의 모듈과 패키지를 사용하는 이점에 대해 좀 더 자세히 살펴보겠습니다.
코드 재사용성 증대
모듈과 패키지의 가장 큰 장점은 바로 코드의 재사용성을 높인다는 점입니다. 예를 들어 utils.py 모듈에 각종 유틸리티 함수들을 작성해두면, 다른 모듈이나 프로젝트에서도 계속해서 재사용할 수 있습니다.
이렇게 하면 반복된 코드 작성을 피할 수 있고, 유지보수가 쉬워지며 생산성도 크게 향상됩니다. 현대 프로그래밍에서 코드 재사용은 필수적인 요소라고 할 수 있죠.
프로그램의 모듈화
프로그램을 모듈화하면 체계적이고 조직화된 코드 관리가 가능해집니다. 예를 들어 어떤 모듈은 수학 연산만 담당하고, 다른 모듈은 파일 입출력만 담당하고, 또 다른 모듈은 GUI 기능만 처리하도록 할 수 있습니다.
이렇게 관심사를 분리해서 코드를 작성하면 가독성과 확장성이 높아집니다. 또한 디버깅할 때도 특정 모듈에 문제가 있는지 쉽게 추적할 수 있습니다.
작업 분할과 코드 공유 용이
모듈과 패키지 구조를 활용하면 협업 프로젝트에서 작업 분할이 쉬워집니다. 각자 맡은 모듈만 개발하면 되므로 업무가 명확하게 구분되죠.
또한 모듈이나 패키지 단위로 코드를 배포하거나 공유하는 것도 편리해집니다. 이를 통해 다른 사람들이 작성한 고품질 모듈을 가져와 재사용할 수도 있습니다. 파이썬 표준 라이브러리는 물론이고 pypi.org와 같은 패키지 저장소를 통해 다양한 외부 라이브러리를 손쉽게 활용할 수 있습니다.
버전 관리와 호환성 보장
모듈과 패키지를 적극 활용하면 버전 관리와 호환성 보장에도 유리합니다. 어떤 모듈이나 패키지는 호환성이 깨지더라도 다른 모듈에는 영향을 미치지 않습니다. 또한 라이브러리의 업데이트 시 포함된 README 파일을 통해 버전 및 사용법 변경사항을 쉽게 확인하고 대응할 수 있습니다.
테스트와 디버깅이 용이
프로그램을 모듈화하면 테스트와 디버깅이 보다 수월해집니다. 모듈 단위로 테스트 케이스를 만들고 실행할 수 있기 때문이죠. 만약 문제가 있다면 해당 모듈에만 국한되므로 원인을 찾기 쉬워집니다.
또한 표준 라이브러리나 잘 알려진 외부 모듈들은 이미 철저한 테스트를 거쳤기 때문에 안정성이 높습니다. 그래서 신뢰할 수 있는 모듈을적극 활용한다면 더욱 견고한 프로그램을 만들 수 있습니다.
이렇게 파이썬의 모듈과 패키지 구조는 많은 장점을 제공합니다. 코드의 재사용성, 모듈화, 작업 분할, 버전 관리, 테스트와 디버깅의 용이성 등이 그것입니다. 때문에 프로그래밍의 기본 원칙인 DRY(Don't Repeat Yourself) 원칙을 실천하고, 대규모 프로젝트에서도 체계적인 개발이 가능해집니다.
모듈과 패키지의 개념을 잘 익혀두고 활용할 수 있다면, 여러분은 더욱 생산적이고 효율적인 코딩이 가능해질 것입니다. 앞으로 배울 내용에서도 이 부분이 계속 활용되니 지금부터라도 모듈과 패키지에 대한 중요성을 인식하고 숙지하는 것이 좋겠습니다.
외부 모듈과 패키지 import 하기
지금까지는 직접 만든 모듈과 패키지에 대해 살펴보았습니다. 하지만 파이썬에서 가장 큰 강점 중 하나는 바로 풍부한 외부 라이브러리를 활용할 수 있다는 점입니다.
NumPy, Pandas, Matplotlib, Scikit-learn, TensorFlow 등 수많은 라이브러리가 이미 만들어져 있습니다. 이러한 라이브러리들은 대부분 모듈과 패키지 형태로 되어 있고, 상대적으로 내장 모듈이나 직접 만든 모듈보다 import 방식이 조금 다릅니다.
대표적인 과학 계산 라이브러리인 NumPy를 예시로 들어 보겠습니다. NumPy를 사용하려면 다음과 같이 import합니다.
import numpy as np
여기서 numpy라는 패키지를 가져온 뒤, as 키워드로 np라는 별칭을 붙였습니다. 이렇게 하면 NumPy의 다양한 기능을 np.함수명 형식으로 호출할 수 있습니다.
import numpy as np
a = np.array([1, 2, 3])
print(a) # [1 2 3] 출력
b = np.array([[1, 2], [3, 4]])
print(b) # [[1 2]
# [3 4]] 출력
만약 np라는 별칭 없이 NumPy의 모든 기능을 바로 import하고 싶다면 다음과 같이 하면 됩니다.
from numpy import *
a = array([1, 2, 3])
print(a) # [1 2 3] 출력
하지만 이렇게 전체를 import하면 네임스페이스가 지저분해질 수 있으므로, 대부분의 경우 별칭을 사용합니다.
NumPy뿐만 아니라 다른 라이브러리도 마찬가지로 import합니다.
import pandas as pd
import matplotlib.pyplot as plt
여기서 주의해야 할 점은 패키지를 가져올 때는 패키지 경로 전체를 포함해야 한다는 것입니다. 예를 들어 matplotlib 패키지의 pyplot 하위 모듈을 가져오고 싶다면 다음과 같이 import해야 합니다.
import matplotlib.pyplot as plt
만약 모든 하위 모듈을 다 가져오고 싶다면 다음과 같이 *을 활용할 수 있습니다.
from matplotlib import *
또한 상대 경로도 지정 가능합니다. 만약 현재 디렉토리에 mymodule.py 파일이 있다면 다음과 같이 import할 수 있습니다.
import mymodule
# 또는
from . import mymodule
이처럼 외부 라이브러리들을 import하는 방식은 대부분 비슷합니다. 모듈이나 패키지 이름을 알고 있다면 어렵지 않게 import할 수 있습니다. 그리고 라이브러리 설명서를 참고하면 어떤 기능이 어느 모듈에 있는지 확인할 수 있습니다.
앞으로 여러분이 프로젝트를 진행하면서 수많은 외부 라이브러리를 사용하게 될 것입니다. 이때 모듈과 패키지에 대한 기본 지식이 있다면 훨씬 수월하게 라이브러리를 활용할 수 있을 것입니다. 모듈과 패키지의 개념은 정말 중요하니 꼭 잘 익혀두시기 바랍니다.
요약
- 파이썬에서 모듈은 독립된 코드 단위이며, 패키지는 모듈을 계층적으로 구조화한 것입니다.
- 모듈과 패키지를 사용하면 코드 재사용성과 모듈화를 통해 생산성이 높아집니다.
- import 구문으로 모듈과 패키지를 불러와 사용할 수 있습니다.
- init.py 파일이 있으면 그 디렉토리가 패키지가 됩니다.
- 외부 라이브러리도 대부분 패키지 형태로 되어 있어 import하여 활용할 수 있습니다.
참고 자료
[1] Lutz, M. (2013). Learning Python: Powerful Object-Oriented Programming (5th ed.). O'Reilly Media.
[2] Matthes, E. (2019). Python Crash Course: A Hands-On, Project-Based Introduction to Programming (2nd ed.). No Starch Press.
[3] Guttag, J. V. (2016). Introduction to Computation and Programming Using Python (2nd ed.). MIT Press.
[4] Downey, A. B. (2015). Think Python: How to Think Like a Computer Scientist (2nd ed.). O'Reilly Media.
[5] Python 공식 문서 - 모듈: https://docs.python.org/3/tutorial/modules.html
[6] Python 공식 문서 - 패키지: https://docs.python.org/3/tutorial/modules.html#packages
한 고대 문서 이야기
여기 한 고대 문서가 있습니다. 이 문서는 B.C. 1,500년 부터 A.D 100년까지 약 1,600 여 년 동안 기록되었습니다. 이 문서의 저자는 약 40 명입니다. 이 문서의 고대 사본은 25,000 개가 넘으나, 사본간 오
gospel79.tistory.com
유튜브 프리미엄 월 1만원 할인받고 월 4000원에 이용하는 방법
올해 5월부터 월 8000원 정도이던 유튜브 프리미엄 요금이 15000원 정도로 인상됩니다. 각종 OTT 서비스, ChatGPT 같은 서비스들이 늘어나다보니 이런 거 몇 개만 이용하더라도 월 이용요금이 5만원을
stock79.tistory.com
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'IT > 파이썬 기초 완전 정복' 카테고리의 다른 글
파이썬 예외 처리(try, except) 방법 (9) (1) | 2024.04.20 |
---|---|
파이썬 파일 입출력 다루기 (8) (1) | 2024.04.20 |
파이썬 함수 정의와 호출 방법 (6) (1) | 2024.04.20 |
파이썬 반복문(for, while) 기초 (5) (0) | 2024.04.20 |
파이썬 조건문(if, elif, else) 활용하기 (4) (0) | 2024.04.20 |
댓글