웹/파이썬 강의를 수강하며 모듈에 대한 설명을 잠깐 언급하셨는데, 이 기회에 한번 확실하게 정리하고자 한다.
파이썬 프로젝트를 진행할 때, 각각의 기능들을 모듈(Modules)화하여 사용한다. 여기서 모듈이란 자주 사용하는 함수들을 별도의 파일(.py)로 저장하는 것을 의미한다. 모듈은 파이썬에 bulit-in 되어 있는 모듈과 개발자가 직접 만드는 사용자 정의 모듈로 구분된다.
복잡한 프로그램을 설계할 때 하나의 파일로 모든 기능을 구현하는 것은 코드 가독성 및 효율성에 굉장히 부합하지 않는 설계이다. (가능은 하지만.. 절대 바람직하지 않은 행동이다) 때문에 항상 프로젝트를 진행할 때는 모듈화를 통해 코드 가독성과 유지보수가 빠르게 이루어질 수 있도록 하는 것이 중요하다.
아래는 모듈화의 예시이다. 아래와 같이 모듈화는 복잡한 프로그램을 작은 단위로 나누어서 관리 및 개발하는 것을 의미한다.
모듈 생성하기
모듈을 만드는 것은 프로젝트 폴더에 새로운 파이썬 파일을 만드는 것과 동일한 행동이다. 파일 이름은 원하는 이름으로 만들면된다. 아래는 temperature.py로 만든 파이썬 모듈이다.
# temperature.py
def convert_to_celsius(fahrenheit):
'''
보통 사용자 정의 함수의 경우, 코드 전개 이전에 함수 설명을 함께 넣어주는 것이 좋다.
여기서는 생략하겠다.
'''
return (fahrenheit - 32) * 5 / 9
def convert_to_fahrenheit(celsius):
return celsius * 1.8 + 32
temperature.py 파일안에, convert_to_celsius 함수와 convert_to_fahrenheit 함수가 들어와 있는 것을 확인할 수 있다. 이제 우리는 정의한 모듈을 통해 해당 함수들을 자유롭게 불러와 쓸 수 있다.
⭐️ 모듈 불러오기 & 함수 호출하기
파이썬의 경우 두가지 경우로 모듈을 불러올 수 있다.
첫번째 경우는 import 모듈명 형식이다. 만든 모듈은 import 키워드(import 파일명)를 통해서 불러올 수 있다. 아래 코드는 방금 만든 모듈을 불러오는 코드다.
import temperature
이 경우, 모듈을 불러온 후에는 모듈 안에 있는 모든 함수를 사용할 수 있다. 이 때, 모듈 안에 있는 함수를 사용하기 위해서 모듈명.함수명() 형식을 이용하여 함수를 호출할 수 있다. 아래의 그 예시가 나와있다.
import temperature
result1 = temperatuee.convert_to_celsius(212)
result2 = temperature.convert_to_fahrenheit(100)
print(result1)
# 100.0
print(result2)
# 212.0
두번째 경우는 from 모듈명 import 사용하고 싶은 함수명 형식이다. 아래에 그 예시가 나와있다.
from temperature import convert_to_celsius
이 경우, 모듈안에 있는 함수를 모두 사용하는 것이 불가능하며, 내가 불러온 함수(이 경우엔 convert_to_celsius)만을 사용할 수 있다. 모듈안에 있는 함수를 사용하는 것도 모듈명.함수명() 형식이 아닌 함수명()만을 이용해 함수를 사용할 수 있다는 점에서 차이가 있다. 아래에 그 사용 예시가 있다.
result = convert_to_celsius(212)
print(result) # 100.0
외부 모듈 설치 및 사용방법
conda나 colab을 사용하여 프로젝트를 진행하며, 간혹 pip install ...을 사용하여 존재하지 않는 패키지를 다운받는 것을 확인할 수 있다. 이는 파이썬 표준 라이브러리에 포함되지 않은 외부 모듈을 설치하는 방법으로 대부분의 외부 모듈은 파이썬 패키지 관리자인 pip를 사용하여 설치할 수 있다.
예를 들어 자주 ML에 자주 사용되는 모듈인 numpy의 경우, 파이썬 자체에 내장되어 있지는 않은 모듈이기 때문에 conda를 사용할시에 따로 외부 모듈을 불러와야한다. 아래는 numpy 외부 모듈을 불러오는 그 예시이다.
pip install numpy
외부 모듈을 사용한 후, 기존에 내장되어 있는 파이썬 모듈과 같이 Import 하여 자유롭게 사용할 수 있다.
import numpy as np
ahram = np.array([1, 2, 3, 4])
⭐️ 모듈 패키지화
파이썬에서는 모듈을 구조적으로 관리하기 위해 모듈을 패키지화 할 수 있다. 패키지는 모듈을 논리적으로 그룹화한 것이며, 패키지를 통해 더욱 체계적으로 모듈을 관리할 수 있다.
모듈을 패키지화 하기 위해서는 패키지 디렉토리를 생성하고, 해당 디렉토리에 __init__.py 파일을 생성한다. __init__.py 파일은 패키지를 초기화하는 파일로, 해당 패키지 모듈을 import 하기 전에 실행이 된다. __Init__.py 파일은 빈 파일일 수 있고 패키지의 초기화 코드를 포함할 수 있다.
예를 들어 my_package라는 패키지를 생성하기 위해선 아래와 같은 디렉토리 구조를 가지게 된다.
my_package/
__init__.py
temperature.py
이렇게 패키지화 한 후에는 아래와 같이 패키지를 불러올 수 있다.
# 1
import my_package.temperature
# 2
from my_package import temperature
# 3
from my_package.temperature import convert_to_celsius
imp.reload()
만약 한번 임포트한 내용을 가지고 작업을 하다가 임포트한 모듈의 내용을 업데이트 하는 경우엔 그대로 사용하게 되면 모듈에 충돌이 발생할 수 있다. 때문에 임포트한 모듈의 내용을 업데이트 한 경우, imp.reload(모듈명) 함수를 사용하여 업데이트를 시켜준다.
import imp
imp.reload(temperature)
[주의] 파이썬의 경우, 모듈에서 불러오는 변수나 함수의 사용이전에 import를 호출해야한다. import 되어있지 않은 상태거나, 불러오는 함수 아래에 import를 적용할 경우 정상적으로 불러올 수 없다.
Reference
https://ctkim.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%AA%A8%EB%93%88-%EC%A0%95%EB%A6%AC
https://hyunsitstory.tistory.com/19
경희대학교 이성원 교수님 - 웹/파이썬 프로그래밍 강의
'Python' 카테고리의 다른 글
[Python] Class 정복하기 (1) (0) | 2024.06.07 |
---|---|
[Python] 이스케이프 시퀸스(Escape Sequence) (0) | 2024.04.26 |
[Python] join 함수 (1) | 2024.04.25 |
[Python] list 함수 (1) | 2024.04.25 |