"모듈"이란 간단히 말하면 다른 프로그램을 만들 때 가져와서 쓰기 위해 여러 가지 클래스, 함수, 변수 등을 모아 미리 만들어 놓은 파이썬 파일이다. 가령, 직접 모듈을 만들어서 사용할 수도 있지만 다른 사람이 만들어 놓은 굉장히 효율적인 모듈이 있다면 굳이 우리가 끙끙 앓지 않아도 된다는 말이다. 그렇다면 모듈을 어떻게 끌어와 사용하는지에 대해 알아보자. 먼저, 아래와 같이 작업 중인 디렉터리에 mod1 파이썬 파일을 만들어 보자.
#mod1.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
이제 만든 모듈 파이썬 파일 mod1을 hello라는 파이썬 파일에 끌어다가 사용하고 싶다면 " import "를 입력하고 옆에 끌어다 쓸 모듈 이름을 적어 넣으면 끝이다. 그 후 원래 쓰던 함수처럼 사용하면 된다. 아래의 코드를 간단히 살펴보고 넘어가자.
그리고 만약에 끌어다 사용하고 싶은 모듈에서 단지 몇 개의 기능만 사용하고 싶은데 함수가 너무 많이 있거나 복잡할 때 굳이 다 가져올 필요는 없지 않을까? 아무래도 속도도 느려지고 좋진 않을 것이다. 이럴 때 특정 함수만 가지고 올 수 있는 방법이 있다. 위의 예시 코드에서 더하는 함수 add()만 가져와서 쓰고 싶다면 아래와 같이 표현하면 된다.
from mod1 import add #mod1 모듈에서 add() 함수만 가져와줘.
print(add(1, 2)) #함수에 모듈 이름을 붙이지 않고 그냥 사용할 수 있다.
함수에 모듈 이름을 붙이지 않고 모듈의 모든 함수를 불러와서 사용하는 방법도 있다. 그 방법은 " from mod1 import * " 과 같이 " import 옆에 별표(*) "를 붙여주면 된다.
이번에는 만약 mod1 모듈 파일을 아래와 같이 수정해보자.
#mod1.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
print(add(1, 2))
print(sub(3, 2))
이 파일을 실행해보면 결괏값이 3과 1로 정상적으로 출력되지만, 이 모듈을 hello 파이썬 파일에 끌어다 사용하면...
난 분명히 6 + 9 만 하고 싶었는데 아까 mod1 모듈 자체의 결과도 딸려 나온다는 것을 확인할 수 있다. 이런 경우를 방지하기 위해 mod1 모듈의 코드를 아래와 같이 수정한다.
#mod1.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
if __name__ == "__main__":
print(add(1, 2))
print(sub(3, 2))
if __name__ == "__main__": 구문을 살펴보자. 여기서 main은 내가 실행 버튼을 누르면 그 파일이 main 파일이 되는 것이다. 이 mod1 파일 자체를 실행하면 mod1 파일이 main 파일이니 if 조건문이 "참" 이므로 당연히 아래 print 문도 실행된다. 하지만, mod1 모듈 파일을 hello 파이썬 파일에 가져다가 hello 파일을 실행하면 hello 파일이 main 파일이 된다. 그렇다면 mod1 모듈 파일의 if 조건문은 "거짓" 이 되므로 hello 파일에서는 print 문이 실행되지 않는다.
모듈에 클래스 혹은 변수도 포함된 경우도 살펴보자. 아래는 원의 면적을 구하는 코드이다.
#mod2.py
PI = 3.14
class Cal: #계산 클래스
def area(self, r): #원의 면적구하는 함수
return PI * (r**2)
def add(a, b): #더하기 함수
return a + b
지금까지 모듈을 끌어올 수 있었던 것은 같은 디렉터리에 있었기 때문에 가능했다. 그렇다면 이번에는 가져오고 싶은 모듈이 다른 디렉터리에 있다면, 다시 말해, 아예 다른 폴더에 있다면 어떻게 할 것인가? sys.path.append 를 사용하면 된다.
파이썬에 설치되어 있는 이 모듈로 가져오고 싶은 모듈이 "다른 어떤 경로에 있는지" 알려주는 것이다. 이제 subfolder라는 폴더를 만들고 그곳에 mod3 모듈 파일을 만들어 보고 다른 디렉터리에 있는 hello 파이썬 파일에 가져다가 사용해보자.
#mod3
def mul(a, b):
return a * b
def div(a, b):
return a / b
sys.path.append() 에서 괄호 안에 subfolder까지의 경로를 입력해주면 세팅이 끝난 것이다. 그 후 지금까지 했던 것과 같이 mod3 모듈에서 원하는 함수를 호출하면 된다. 다음 시간에는 이런 모듈을 여러 개 모아 놓은 "패키지" 에 대해 알아보겠다. 패키지는 활용도가 그리 높지는 않으니 편하게 보고 넘어가도록 하자.
파이썬 프로그래밍에 관한 글은 "이지스퍼블리싱"의 "Do it!, 점프 투 파이썬"이라는 책을 학습하고 정리한 것입니다.
'Programming Language > Python' 카테고리의 다른 글
파이썬 - (패키지) (0) | 2023.07.18 |
---|---|
파이썬 - (★클래스★) (0) | 2023.07.13 |
파이썬 - (사용자 입출력 ~ 파일 읽고 쓰기) (0) | 2023.07.11 |
파이썬 - (함수) (0) | 2023.07.10 |
파이썬 - (반복문 中 for 문) (0) | 2023.07.10 |