STUDY_SEONMIN
DAY7 - Module, Package 본문
Module
- 변수, 함수, 클래스를 한 데 모아놓은 개념이다.
- .py 확장자를 가진 파일
- 모듈을 호출해서 사용할 때는 import 명령어를 이용한다.
math 라고 하는 모듈을 호출해보면 그 모듈 안에 pi라고 하는 변수, exp()라고 하는 함수가 모두 들어있는 것을 확인할 수 있습니다.
어떠한 프로그램을 위한 특정 기능을 모듈로 만들고 그 기능을 구현하기 위해 필요한 변수,함수,클래스 등을 모듈 안에 담아서 보관하면 유지/보수/관리 가 용이하다는 장점이 있습니다.
모듈의 변수, 함수, 클래스를 사용할 때는 항상 앞에 모듈명. 을 붙여줘야 합니다.
하지만 매번 모듈명.을 붙여주는 것은 불편함이 있습니다.
모듈에 담긴 변수,함수,클래스를 각각의 식별자 자체만을 이용해 사용하고 싶을 때는 from 모듈명 import *(asterisk)를 통해 호출해주면 됩니다.
Package
- 모듈의 기능을 디렉토리별로 정리해 놓은 개념
- 모듈을 디렉토리 구조로 관리할 수 있게 해준다.
이러한 디렉터리 구조가 있을 때 .py가 붙은 파일들은 모듈이고 game, sound, graphic, play는 디렉토리입니다.
그리고 game 을 이 패키지의 루트 디렉토리, sound, graphic, play를 이 패키지의 서브 디렉토리라고 합니다.
__init__.py 파일은 파이썬에서 해당 디렉토리가 패키지라는 것을 인식하게 해줍니다.
python3.3 버전부터는 없어도 패키지로 인식하지만 하위 버전 호환을 위해서 __init__.py 파일을 생성하는 것이 안전합니다.
* 직접 위와 같은 구조로 패키지를 만들어보자.
여기까지 작업을 마치면 각각의 디렉토리가 패키지로 인식되게끔 하기 위한 준비는 모두 마쳤습니다.
그렇다면 다음으로는 sound, graphic, play 패키지에 기능별로 모듈을 만들어보겠습니다.
*모듈은 테스트용도로 모두 print 기능이 있는 함수로만 구현했습니다.
이렇게 하면 가장 처음 보여준 가장 패키지 예시와 같이 패키지가 만들어졌습니다.
모듈을 불러올 때는 <패키지.모듈>과 같은 형태로 사용할 수 있습니다. 만약 모듈이 서브 디렉토리에 위치하고 있다면 <루트디렉토리.서브디렉토리.모듈명> 과 같은 방식으로 호출해서 사용할 수 있습니다.
호출은 import 명령어를 활용합니다.
test 모듈의 test() 함수를 사용하면 위에서 작성한 대로 결과가 잘 나오는 것을 확인할 수 있습니다.
하지만 매번 모듈을 사용할 때마다 <패키지명.모듈명>으로 이용하기에는 불편함이 있습니다. 모듈명만 통해 모듈을 사용하고 싶을 때는 from 패키지 import 모듈 과 같이 호출해주면 됩니다.
만약 특정한 패키지에 있는 모든 모듈을 불러오고 싶을 때는 *(asterisk)를 이용합니다.
하지만 *를 이용해서 모든 모듈을 호출할 때 이렇게 에러가 발생하는 경우가 있습니다.
이 때는 모듈이 담겨있는 패키지의 __init__.py 파일을 수정해주면 됩니다.
현재는 __init__.py 파일을 생성만 해놓은 상태이기 때문에 안에 아무 내용도 들어 있지 않습니다.
이렇게 __init__.py 파일에 __all__ = ["모듈명","모듈명",..] 코드를 작성해주면 *(asterisk)로 모듈 호출시 __all__ 에 담겨있는 모듈들이 전부 호출됩니다.
'EDUCATION > DSS Online 6기' 카테고리의 다른 글
DAY8 - numpy basic (0) | 2021.01.18 |
---|---|
DAY7 - 예외처리 (0) | 2021.01.18 |
DAY6 - Special method (0) | 2021.01.16 |
DAY6 - is a 와 has a (0) | 2021.01.16 |
DAY6 - getter, setter, non public (0) | 2021.01.16 |