Dev/Python

[Python 기초] Module & Package 이해하기 1

sincerely10 2020. 6. 26. 21:41
반응형

<Module & Package 이해하기 Series>
[Python 기초] Module & Package 이해하기 1(Module)
[Python 기초] Module & Package 이해하기 2(Package)
[Python 기초] Module & Package 이해하기 3(import 순서)
[Python 기초] Module & Package 이해하기 4(실습)

안녕하세요. 이번 포스트에는 Python의 Module과 Package를 다뤄보겠습니다.

포스트 항목은 다음과 같습니다.
1. Module 이해하기
2. Module 만들기
3. Module 사용하기
4. 다른 방법으로 Module import 하기
5. import as 사용하기

1. Module 이해하기

먼저 Module에 대한 정의 입니다. Module은 Function(함수), Variable(변수), Class 등을 모아놓은 파일입니다.
Module을 따로 모아놓은 이유는 무엇일까요?

  • 다른 파일에서 재사용이 가능

  • 전체 코드가 한 파일에 넣기에 너무 큰 경우 -> 여러 파일로 나눠서 정리할 수 있다.

예를 들어, List의 element 개수를 확인하고 싶을 때, len 함수를 사용해 확인할 수 있었습니다.

my_list = [1, 2, 3, 4, 5]
my_list_length = len(my_list)

print(my_list_length)

그런데 len 함수는 import 하지 않고 사용이 가능했습니다.
이유는 아래 내용에서 확인 해보겠습니다.

2. Module 만들기

2-1. Module을 만들려면 먼저 파일을 만들어야 합니다.
my_moudule.py라는 파일을 만들고 아래처럼 변수, 함수, 클래스를 만들어 보겠습니다.

## my_module.py
my_module_var = 7

def my_module_func():
    return "Hello!"

class MyModuleClass:
    pass

생각보다 간단하게 만들어졌습니다!

2-2. 이제 새로운 파일에서 모듈을 불러오는 일만 남았습니다.

import my_module

만든 모듈을 불러오려면, import('수입하다' 라는 뜻)를 사용하면 됩니다.
파일명인 my_module.py에서 .py를 빼고 입력하면 됩니다.

정형화된 표현으로 나타내자면, 다음과 같습니다.

import <모듈 이름>

 

3. Module 사용하기

Module을 import 하고 나서 사용하려면 아래와 같이 사용할 수 있습니다.

<모듈 이름>.<모듈에서 사용하길 원하는 변수/함수/클래스 이름>

 

조금 전 만든 my_module을 사용 해보겠습니다.

# main.py
import my_module

my_module.my_module_func()

my_module을 붙이지 않으면 어떻게 될까요?
Python은 동일한 파일인 main.py라는 파일에서만 my_module_func라는 함수를 찾을 것 입니다.
그리고 my_module_func 함수를 찾을 수 없기 때문에 에러가 발생할 것 입니다.
.(dot) 앞에 있는 import 하는 영역을 만드는 이 구조를 'name space'라고 합니다.

4. 다른 방법으로 Module import 하기

3번에서의 방법 말고 다른 방법으로도 Module을 import 할 수 있습니다.

from <모듈 이름> import <함수/변수/클래스1>, <함수/변수/클래스2>, ..., <함수/변수/클래스N>

 

조금 전 만든 my_module을 위 방법으로 import 한다면, 다음과 같습니다.

# main.py
from my_module import my_module, my_module_var

print(my_module_var)
my_module_func()

3번의 방법과의 차이점은

- import 대상인 파일에서 원하는 항목만 import 할 수 있다는 것입니다.
- 또한, name space 없이 바로 사용할 수 있습니다.

불러오는 항목을 사용하는 것이 명확할 때, from ~ import를 사용하면 편리하게 사용할 수 있습니다.

5. import as 사용하기

간단한 프로그램에서는 문제가 없겠지만, 복잡한 프로그램의 경우 import에 의해 충돌이 발생할 수 있습니다.
동일한 이름의 함수가 다른 module에서 같이 사용되는 경우가 입니다.

이를 방지하기 위한 방법으로 import ~ as라는 방법이 있습니다.

from <모듈 이름> import <함수/변수/클래스1> as <변경할 이름>

사용 경우는 다음과 같습니다.

from my_module  import my_func as f1
from my_module2 import my_func as f2
from my_module3 import function_with_name_too_long as f3

f1()
f2()
f3()

module에 있는 함수나 변수, 클래스를 원하는 이름으로 만들어 사용할 수 있습니다.

mport my_module as m1

m1.my_module_func()

 

여기까지가 module의 기본적인 내용을 학습한 Module & Package 이해하기 1이 었습니다.

반응형