STUDY_SEONMIN

DAY7 - Module, Package 본문

EDUCATION/DSS Online 6기

DAY7 - Module, Package

Kululu_ 2021. 1. 16. 14:28

 

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 파일을 생성하는 것이 안전합니다.

 

* 직접 위와 같은 구조로 패키지를 만들어보자.

현재 디렉토리 위치에 game이라는 폴더(디렉토리)를 생성합니다.
game 디렉토리에 __init__.py라는 파일을 생성합니다.
game 디렉토리 하위에 sound, graphic, play 디렉토리를 생성합니다.
sound, graphic,play 디렉토리에 각각 __init__.py 파일을 생성합니다.

 

여기까지 작업을 마치면 각각의 디렉토리가 패키지로 인식되게끔 하기 위한 준비는 모두 마쳤습니다.

그렇다면 다음으로는 sound, graphic, play 패키지에 기능별로 모듈을 만들어보겠습니다.

*모듈은 테스트용도로 모두 print 기능이 있는 함수로만 구현했습니다.

 

이렇게 하면 가장 처음 보여준 가장 패키지 예시와 같이 패키지가 만들어졌습니다.

 

모듈을 불러올 때는 <패키지.모듈>과 같은 형태로 사용할 수 있습니다. 만약 모듈이 서브 디렉토리에 위치하고 있다면 <루트디렉토리.서브디렉토리.모듈명> 과 같은 방식으로 호출해서 사용할 수 있습니다.

호출은 import 명령어를 활용합니다.

game : 루트 디렉토리, play : 서브 디렉토리, test : 모듈

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
Comments