안녕하세요.
이번 포스팅에서는 파이썬에서 모듈과 패키지이 무엇인지, 그리고 어떻게 사용하는지 알아보도록 하겠습니다.
1. 모듈(Module)
모듈이란, 함수나 변수 또는 클래스 들을 모아놓은 파일을 말합니다.
즉, A.py 이라는 파일에 F1, F2 라는 함수와 C1, C2 라는 클래스를 만들었을때, B.py라는 파일에서 A.py를 모듈로써 사용하여 F1, F2 함수 또는 C1, C2 클래스를 사용할 수 있는 것입니다.
이러한 모듈을 통해 우리는 다른사람이 만들어 놓은 모듈을 사용하여 함수나 클래스를 사용할 수 있게됩니다.
그럼 간단한 모듈을 직접 만들어 보도록 하겠습니다.
위의 코드와 같은 파일을 module1.py 라고 저장하였습니다.
그리고 위의 파일을 모듈로써 사용하기 위해 우리는 import 를 사용합니다.
아래 코드에서 import를 통해 module1을 가져오고, module1에 있는 함수를 사용합니다.
위의 코드를 CMD에서 실행시키면 아래와 같이 올바른 결과가 출력됩니다.
import를 사용할때는,
import 파일이름
와 같은 식으로 사용하며 파일이름 뒤에 있는 .py 라는 확장자는 생략합니다.
2. 모듈 사용 응용하기
모듈을 사용할때, 몇 가지 추가적인 방법이 있습니다.
먼저,
from 모듈이름 import 모듈함수
와 같은 방법입니다.
우리는 위의 코드에서 module1의 sum 함수를 사용하기 위해 module1.sum() 이라는 식으로 호출을 하였습니다.
하지만, from module1 import sum 과 같이 사용하면 sum함수를 이름 그대로 호출할 수 있습니다.
또한 두번째로, import문 맨 뒤에 as를 통해 자신이 함수이름을 다르게 설정할 수도 있습니다.
예를 들어, sum함수를 불러오는데 plus라는 이름의 함수로 사용하고 싶다면,
from module1 import sum as plus
와 같은 식으로 사용하면 됩니다.
세번째로 알아볼 내용은
if __name__ == "__main__":
입니다.
이를 제대로 확인하기 위해 먼저 module1.py 의 코드를 아래와 같이 수정합니다.
위의 코드와 같이 수정하고 다시 CMD창에서 module1.py를 사용하는 파일을 실행하면 다음과 같이 출력이 됩니다.
그런데, 우리는 prac.py에서 단순히 module1.py 의 함수만 사용하고 싶은데, module1.py에 있는 print()문 까지 함께 실행이 되어버렸습니다.
이러한 경우 우리는 if __name__ == "__main__": 를 통해 모듈을 호출할때 해당 파일의 함수나 클래스, 변수만 가져오도록 할 수 있습니다.
module1.py의 코드를 아래와 같이 수정합니다.
위의 코드처럼 수정하고 다시 prac.py를 실행하면 module1.py의 print()문은 실행되지 않는 것을 볼 수 있습니다.
if __name__ == "__main__": 에 대해서 간단히 살펴보면
이는 직접 해당 파일을 실행시켰을 때는 if 문이 참이되어 그 이하 문장이 실행되지만, 단순히 모듈로써 불러서 사용하는 경우에는 if문이 거짓이 되어 이하 문장이 실행되지 않는 구조입니다.
위에서는 주로 함수를 예로 들어 모듈에 대해서 알아보았는데 클래스나 변수 또한 함수와 같은 방식으로 사용할 수 있습니다.
3. 패키지
패키지는 간단히 말해, 여러개의 모듈을 묶은 집합입니다.
예를 들어 아래의 파일구조와 같이 package 라는 폴더에 module1.py module2.py 를 만들고 package라는 폴더와 같은 위치에 prac.py 라는 파일이 있다고 합시다.
이때 우리는 package라는 폴더를 하나의 패키지라고 합니다.
이러한 패키지를 이용하는 방법은 모듈에서 사용한 방법과 매우 유사합니다.
prac.py 에서 package라는 패키지에 있는 moduel1.py를 이용하고 싶을땐,
from package.module1 import sum
과 같은 방식으로 사용하면 됩니다.
이렇게 해서 파이썬에서 모듈과 패키지에 대해서 알아보았습니다.
잘 진행이 되지 않거나 추가적으로 궁금한 사항은 언제든지 댓글을 이용해주세요.
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬(python) #18_ 내장함수와 외장함수 (0) | 2018.03.16 |
---|---|
파이썬(python) #17_예외처리(try, except) (0) | 2018.03.15 |
파이썬(python) #15_ 클래스의 상속(Inheritance) (0) | 2018.02.27 |
파이썬(python) #14_ 클래스(Class)란 무엇일까? (1) | 2018.02.23 |
파이썬(python) #13_ 사용자 입출력, 파일IO (0) | 2018.02.22 |