Python-07.Module

안녕하세요 묵호입니다.
이번 글에서는 모듈에 대해 알아보도록 하겠습니다.

모듈

소프트웨어를 개발해 온 사람들은 누군가 만들어 둔 프로그램과 자신이 만들어 둔 프로그램들을 다시 활용해왔습니다. 검증된 프로그램의 재사용은 안정적이고 효율적인 소프트웨어를 개발할 수 있게 해줍니다.
파이썬에서는 많은, 유용한 기능들을 제공해줍니다. 개발자에게 필수적으로 필요한 기능들 말입니다. 하지만 특정 분야에 꼭 필요한 것들은 내장시키기 어렵습니다. 이런 상황 속에서 사람들은 자신의 분야에 꼭 필요한 것들을 직접 함수 등으로 만들어 공유하게 됩니다. 이것을 우리는 모듈이라고 합니다.
math 모듈을 예로 들겠습니다. math 모듈은 수학 계산에 필요한 다양한 기능을 제공하는 파이썬 내장 모듈로, 별도의 설치 필요없이 사용 가능합니다. math 모듈에 대한 설명은 이곳에서 확인해보세요.
모듈을 사용하기 위해서는 import로 프로그램에 모듈을 포함하는 절차를 거쳐야 합니다. 여기에 더해 함수나 모듈 등에 대한 안내를 확인할 수 있는 help 함수를 통해 math 모듈에 어떤 함수가 존재하는지 확인 해보겠습니다.

import math
help(math)
'''
Help on built-in module math:

NAME
    math

DESCRIPTION
    This module provides access to the mathematical functions
    defined by the C standard.

FUNCTIONS
    acos(x, /)
        Return the arc cosine (measured in radians) of x.
    
    acosh(x, /)
        Return the inverse hyperbolic cosine of x.
    
    asin(x, /)
        Return the arc sine (measured in radians) of x.
    
    asinh(x, /)
        Return the inverse hyperbolic sine of x.
    
    atan(x, /)
        Return the arc tangent (measured in radians) of x.
    
...
'''

오우 너무 길어서 줄였습니다. 이처럼 math 모듈에는 엄청 많은 함수들이 제공됩니다. 모듈 안에 포함된 함수를 호출하는 경우, 모듈명.함수명()과 같이 사용해야 합니다.

math.factorial(3)
# 6

만약 매번 모듈의 이름을 앞에 쓰는 과정이 귀찮다면, from 모듈명 import 함수명 처럼 ‘해당 모듈에서 사용하고 싶은 함수만 불러오는’ 방법을 택할 수 있습니다.

from math import factorial
factorial(5)
# 120


사용자 지정 모듈

함수에 사용자 지정 함수가 있듯이, 모듈도 사용자 지정 모듈이 있습니다. 사용자 지정 모듈의 생성 과정은 다음과 같습니다.

  1. 사용하고자 하는 module 이름으로 file을 만들고 확장자를 .py로 한다.
  2. module 안에 넣고자 하는 함수를 1.에서 만든 file에 포함한다.
  3. 앞서 math 모듈과 factorial 함수를 사용했던 것처럼 사용자 지정 모듈을 사용한다.

유용한 모듈

random: 파이썬으로 난수(Random Number)를 만들기 위해 사용합니다.
turtle: 파이썬으로 간단한 그림을 그려볼 수 있는 용도로 사용합니다.
다음은 turtle 모듈을 이용한 그림 그리기 예제입니다. 이해 못해도 괜찮으니 한번 실행해보세요. 여기서 ‘from turtle import *‘의 의미는 ‘turtle 모듈의 모든 함수를 가져와 모듈명 없이 호출하겠다’라는 의미입니다.

from turtle import *
color('red', 'yellow')
begin_fill()
while True:
    forward(200)
    left(170)
    if abs(pos()) < 1:
        break
end_fill()
done()


다음 시간에는 메소드와 클래스에 대해 알아보겠습니다.
그럼.. 바위^^