본문 바로가기
Python/Python 고급

Python module, 파이썬 모듈 기초

by 베타코드 2022. 3. 23.
반응형

안녕하세요 독학코딩입니다. 오늘은 파이썬의 모듈에 대해서 배워보겠습니다. 모듈이라는 것은 클래스의 상위 개념으로 생각해주시면 됩니다. 함수, 변수, 클래스 등을 모아 놓은 파일을 뜻합니다. 남이 이미 만들어 놓은 모듈들을 사용하기도 하고 직접 모듈을 만들어서 클래스들을 관리하기도 합니다. 어느 방식이든 파이썬 프로그래밍은 모듈을 많이 사용하게 되니 모듈에 대해서 배워보겠습니다.

 

모듈 만들기

모듈을 만드는 특별한 방법은 없습니다.

class My_class(): 
    def add(self, numA, numB): 
        return numA + numB 

    def subtract(self, numA, numB): 
        return numA - numB

def devide(numA, numB):
    return numA / numB

위와 같이 작성한 코드를 예를 들어 my_module.py로 저장하면 이 my_module.py 파일 자체가 모듈이 됩니다. 실제로 파이썬의 모든 파일은 모듈이라고 생각해도 괜찮습니다.

 

모듈 불러오기

모듈을 만들는 방법을 배웠으니 만들어둔 모듈을 불러와서 사용하는 방법도 알아야겠죠? my_module.py이 저장된 폴더에 새로운 .py 파일을 만들어 봅시다. 새롭게 만든 파일에서 my_module.py를 불러오려면 어떻게 해야될까요? 아주 간단합니다.

 

import my_module
print(my_module.devide(12, 4))

위와 같이 저장한 모듈의 파일 이름을 그대로 import 파일이름하면 모듈을 불러와서 사용할 수 있습니다. 물론 파일 이름을 작성할 때 현재 파일과 같은 디렉토리에 없다면, 디렉토리도 같이 적어줘야 합니다. 예를 들면 import somedirectory.파일이름 이런 으로 해주셔야 합니다.

 

만약 모듈에서 특정 함수 혹은 클래스만 사용하고 싶다면 아래와 같이 하면 됩니다.

from my_module import My_class
from my_module import My_class, devide

이렇게 특정 함수 혹은 클래스만 지정하여 import 할 수도 있습니다. 같은 형식으로 모든 클래스를 import도 가능합니다.

 

from my_module import *

여기서 * 은 '모든 것'이라는 정규표현식의 표현인데 자세히 아실 필요는 없습니다.

 

if __name__ == "__main__": 의 의미

파이썬을 하다 보면 위와 같은 조건문을 많이 보게 될 것입니다. 직관적으로 보기엔 이해하기 어렵습니다. 어떤 의미일까요? 먼저 my_module.py에 아래의 코드를 추가해 봅시다.

 

print(devide(15,3))

my_module.py파일 안에 함수와 클래스 이외에도 실행문이 생기는 것입니다. 그럼 이 모듈을 다른 파일에서 import하면 어떻게 될까요?

 

import my_module
print(my_module.devide(12, 4))

다른 파일에서 위의 코드를 실행해봅시다. 그러면 이상하게 결괏값이 2개가 나오는 걸 확인하실 수 있으실 겁니다.

 

5.0
3.0

3.0print(my_module.devide(12, 4))에 의해서 나온 결과값인 것은 알겠는데, 5.0은 어디서 온 걸까요? 바로 my_module.py에서 실행된 결과값입니다. my_module.py 파일에 print(devide(15,3))을 추가했기 때문에 my_module.pyimport한 새로운 파일에서도 똑같이 실행이 된 것입니다.

 

당연히 이렇게 우리가 의도하지 않는 코드 실행이 되면 안 되겠죠? 그럴 때 사용하는 조건문이 if __name__ == "__main__":입니다. my_module.py를 아래와 같이 수정해보겠습니다.

 

class My_class():
    def add(self, numA, numB):
        return numA + numB


    def subtract(self, numA, numB):
        return numA - numB


def devide(numA, numB):
    return numA / numB

if __name__ == "__main__":
    print(devide(15,3))

이렇게 수정하고 다시 새로운 파일을 실행해보시겠어요? 그러면 결과값이 2개가 아닌 걸 확인하실 수 있으실 겁니다.
if __name__ == "__main__":은 쉽게 설명해서 현재 실행 중인 파일이 메인 파일이 아니라면 실행하지 않겠다는 의미입니다. 즉 위에선 새로운 파일을 실행했고 my_module.py를 실행하지 않았기 때문에 my_module.py의 안에 있는 if __name__ == "__main__":는 실행하지 않는 것입니다.

 

조금 자세히 설명하자면 파이썬의 __name__ 변수는 특별한 변수 이름입니다. 만약 my_module.py처럼 직접 my_module.py 파일을 실행할 경우 my_module.py의 __name__ 변수에는 __main__ 값이 저장됩니다. 하지만 모듈로서 import 되어 실행되는 경우 __name__ 변수에는 모듈 이름인 my_module이 저장됩니다.

반응형

댓글