본문 바로가기

Programing/Python

[Python 입문] 15. 파이썬 모듈

목차

  • 모듈(Module)이란?
  • 모듈 생성 및 불러오기
  • 모듈 함수를 사용하는 다른 방법
  • 모듈 이름 재명명(Re-naming )하기
  • if __name__ == "__main__":의 의미
  • 클래스나 변수를 포함한 모듈
  • 새 파일에 만들어둔 모듈 불러오기
  • 내장된 모듈
  • dir() 함수 사용하기

파이썬 모듈

1. 모듈(Module)이란?

 모듈(Module)이란 함수나 변수 또는 클래스를 모아 놓은 파일을 말한다. 또한 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 '파이썬 파일'이라고도 할 수 있다. 예를 들어 앞서 배웠던 클래스는 상속을 통해 다양한 속성과 함수를 사용할 수 있었다. 하지만 클래스의 상속은 유사한 성격을 가진 클래스들에게만 유용한 방법이고, 여러 가지 상황에 사용할 수 있는 범용성은 떨어지는 편이다. 그래서 자주 사용하는 함수들을 따로 관리하다가 필요한 곳에 재사용할 수 있는 방법이 있으면 편리한데 이런 방법에 모듈을 사용하면 편리하다.

 앞으로 파이썬으로 다양한 프로그래밍 작업을 할 때 굉장히 많은 모듈을 사용하게 될 것이다. 당연히 다른 사람들이 이미 만들어둔 모듈을 사용할 수 있고, 직접 만들어서 사용할 수도 있다.

 

 

2. 모듈 생성 및 불러오기

 모듈의 생성은 의외로 간단하다. 원하는 코드를 작성한 후 확장명을 .py로 저장하면 된다. 일단 간단한 모듈을 먼저 만들고 mod1.py라는 이름의 파일을 저장하자. (필자의 경우 Mac OS기준 Documents에 저장)

# mod1.py
def sum(a, b):   
    return a + b   <---- 기본 더하기 연산자
    
def safe_sum(a, b):
    if type(a) != type(b):   <---- 객체 a와 b의 자료형이 다르면
        print("더할 수 있는 것이 아닙니다.")   <---- 메시지 출력
        return
    else:   <---- 객체 a와 b의 자료형이 같다면
        result = sum(a, b)   <---- a와 b를 더해라
    return result

  그리고 아래와 같이 터미널 창을 열고 모듈로 사용할 파일이 저장된 위치로 이동한 후 해당 위치에서 python을 실행한다.

Documents HenryKim$ python3
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

 이제 mod1.py 파일을 풀러오기 위해 import를 사용해 mod1을 불러오고 모듈에 저장된 sum(a, b)함수를 사용해 특정 숫자를 더해보자. 그리고 safe_sum(a, b)함수 역시 사용해 보자. 아래와 같은 결과를 얻을 수 있을 것이다.

이때 사용한 import는 만들어진 파이썬 모듈을 사용할 수 있게 해주는 명령어로 사용 방법은 'import 모듈이름'을 입력하면 된다.

>>> import mod1
>>> mod1.sum(3, 4)
7
>>> mod1.safe_sum(3, 'b')
더할 수 있는 것이 아닙니다.
>>> mod1.safe_sum(5, 10)
15
>>> 

 이제는 위와 같이 간단한 소스코드는 어떻게 해서 저런 결과값이 나왔는지 이해할 수 있을 것이다. 위 방법은 가장 기본적으로 모듈을 저장하고 사용하는 방법이다.

 

 

3. 모듈 함수를 사용하는 다른 방법

 이때 모듈 함수를 사용하는 다른 방법이 있다. 위에서 사용한 방법과 같이 mod1.safe_sum(a, b)처럼 쓰지 않고 그냥 sum(a, b), safe_sum(a, b)와 같이 함수를 쓸 수 있는 방법이 있다. 바로 아래와 같이 'from 모듈이름 import 모듈함수'를 사용하면 된다.

# sum 함수모듈 한 가지만 가지고 올 때
>>> from mod1 import sum
>>> sum(3, 4)
7

# sum과 safe_sum 함수모듈 두 가지를 가지고 올 때
>>> from mod1 import sum, safe_sum
>>> safe_sum(3, 5)
8

# mod1 모듈에 포함된 모든 함수를 가지고 올 때
>>> from mod1 import *
>>> sum(3, 4)
7
>>> safe_sum(5, 1)
6

 첫 번째와 두 번째와 같이 특정 모듈이 이름을 알거나 가지고 올 때 위와 같은 방법을 사용하면 되고, 함수 모듈의 이름을 모르거나 모듈에 포함된 모든 함수 모듈을 가지고 올 때 import뒤에 별(*)문자를 사용하면 된다. 이 방법은 사용하고자 하는 모듈이 엄청 클 때 전체를 가져오는데 필요한 메모리와 시간적으로 부담이 될 수 있는 부분을 특정 모듈만 가져옴으로써 어느 정도 줄여줄 수 있다.

 

 

4. 모듈 이름 재명명(Re-naming )하기

 만약 사용하고자 하는 모듈의 이름이 길거나 다르게 부르고 싶을 때 모듈의 이름을 잠시나마 짧고 간편하게 부를 수 있는 방법이 있다.

>>> import mod1 as md
>>> md.sum(3, 4)
7

 바로 위와 같이 as를 사용하는 방법이다. 쉽게 말하면 'mode1 이라는 이름을 가진 모듈을 불러오고, 이 모듈의 이름을 당분간 md로 부르겠다.'는 뜻이 된다.

 

 

5. if __name__ == "__main__":의 의미

 아래와 같이 모듈의 끝에 추가를 한다면 해당 모듈을 import 하면 자동으로 결과값(print)이 출력된다.

# mod1.py
def sum(a, b):
    return a + b
    
def safe_sum(a, b):
    if type(a) != type(b):
        print("더할 수 있는 것이 아닙니다.")
        return
    else:
        result = sum(a, b)
    return result

print(safe_sum('a', 1))
print(sum(10, 10))
>>> import mod1
더할 수 있는 것이 아닙니다.
None
20

 이러한 문제를 방지하기 위한 방법으로 if __name__ == "__main__":의 사용이 있다. 

 

# mod1.py
def sum(a, b):
    return a + b
    
def safe_sum(a, b):
    if type(a) != type(b):
        print("더할 수 있는 것이 아닙니다.")
        return
    else:
        result = sum(a, b)
    return result

if __name__ == "__main__":
    print(safe_sum('a', 1))
    print(sum(10, 10))
>>> import mod1
>>> 

 모듈의 마지막 부분에 if __name__ == "__main__":을 추가한 다음에는 모듈을 import해도 아무런 결과값 출력이 없는 것을 볼 수 있다. 단, if __name__ == "__main__": 입력 후 print의 들여쓰기를 기억하다.

 

6. 클래스나 변수를 포함한 모듈

 지금까지 설명에는 모듈에 함수만 포함했지만 아래와 같이 클래스나 변수 역시 포함할 수 있다.

# mod2.py
PI = 3.141592
class Math:
    def solv(self, r):
        return PI * (r ** 2)
def sum(a, b):
    return a + b

if __name__ == "__main__":
    print(PI)
    a = Math()
    print(a.solv(2))
    print(sum(PI, 4.4))

 

 아래와 같이 mod2.py 파일 자체를 실행할 때는 결과값이 자동으로 출력된다. 하지만 기존과 같이 파이썬(대화형 인터프리터)를 열고 기존의 방식과 같이 모듈을 실행하면 아무런 결과값이 출력되지 않는다.

Documents HenryKim$ python mod2.py
3.141592
12.566368
7.541592


Documents HenryKim$ python3
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import mod2
>>> 

 이렇게 import한 mod2 모듈에 포함된 변수, 클래스, 함수는 아래와 같이 사용할 수 있다.

>>> print(mod2.PI)   <---- mod2 모듈에 있는 변수값 PI 출력
3.141592
>>> a = mod2.Math()   <---- mod2 모듈에 있는 Math 클래스 사용
>>> print(a.solv(2))
12.566368
>>> print(mod2.sum(mod2.PI, 4.4))   <---- sum 함수 사용
7.5415920000000005

 

 

7. 새 파일에 만들어둔 모듈 불러오기

 이번에는 새로 만들 파이썬 파일에 이전에 이미 만들어 놨던 모듈을 불러와서 아래와 같이 사용해 보자.

# modtest.py
import mod2
result = mod2.sum(3, 4)
print(result)

 이렇게 새로 만드는 파이썬 파일에도 import를 사용해 mod2 모듈을 불러와 사용할 수 있다. 단, modtest.py와 mod2.py 파일이 동일한 디렉토리(경로)에 있어야 한다는 점을 주의하자.

 

 

8. 내장된 모듈

 파이썬에는 내장 여러개의 모듈이 있다. 원하는 걸 import를 통해 사용하면 된다. 

import platform
print(platform.system())

 위와 같이 platform.system()를 사용하면 사용하는 컴퓨터의 플랫폼을 알려준다. 파이썬 라이브러리에 내장된 모듈에 대해 나오니 찾아보는 재미가 있을 것 같다.

 

The Python Standard Library — Python 3.4.10 documentation

The Python Standard Library While The Python Language Reference describes the exact syntax and semantics of the Python language, this library reference manual describes the standard library that is distributed with Python. It also describes some of the opt

docs.python.org

 

9. dir() 함수 사용하기

 dir함수를 사용하면 선택한 모듈 안에 사용할 수 있는 함수들과 변수들의 리스트를 보여준다.

# 플랫폼에서 사용 가능한 함수 리스트
>>> dir(platform)
['DEV_NULL', '_UNIXCONFDIR', '_WIN32_CLIENT_RELEASES', '_WIN32_SERVER_RELEASES', 
'__builtins__', '__cached__', '__copyright__', '__doc__', '__file__', '__loader__', 
'__name__', '__package__', '__spec__', '__version__', '_default_architecture', 
'_dist_try_harder', '_follow_symlinks', '_ironpython26_sys_version_parser', 
'_ironpython_sys_version_parser', '_java_getprop', '_libc_search', 
'_linux_distribution', '_lsb_release_version', '_mac_ver_xml', '_node', 
'_norm_version', '_parse_release_file', '_platform', '_platform_cache', 
'_pypy_sys_version_parser', '_release_filename', '_release_version', 
'_supported_dists', '_sys_version', '_sys_version_cache', '_sys_version_parser', 
'_syscmd_file', '_syscmd_uname', '_syscmd_ver', '_uname_cache', '_ver_output', 
'architecture', 'collections', 'dist', 'java_ver', 'libc_ver', 'linux_distribution', 
'mac_ver', 'machine', 'node', 'os', 'platform', 'popen', 'processor', 'python_branch', 
'python_build', 'python_compiler', 'python_implementation', 'python_revision', 
'python_version', 'python_version_tuple', 're', 'release', 'subprocess', 'sys', 
'system', 'system_alias', 'uname', 'uname_result', 'version', 'warnings', 'win32_ver']


# 미리 저장해둔 mod1 모듈에서 사용할 수 있는 함수 리스트
>>> dir(mod1)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', 
'__package__', '__spec__', 'safe_sum', 'sum']

 

 

내용 출처: 책 '점프 투 파이썬'의 내용