모듈의 이용

일반적으로 소프트웨어에서의 모듈은 기능적으로 구분 또는 분리되어 있는 코드와 데이터의 집합체입니다. 이렇게 모듈로 나누는 것은 거대한 프로그램을 작성할 때 재사용성을 높이고 코드의 가독성을 높이기 위함입니다.

예시나 예제로 제시한 내용과는 달리 실제 상용 프로그램의 경우 그 내용이 방대하여, 수백 또는 수천개의 파일로 구성되는 경우가 많습니다. 이런 경우 모든 프로그램의 내용을 하나의 파일에 담을 수는 없습니다. 이 경우 모듈을 사용방법을 안다면 코드 이용을 편하게 할 수 있습니다.

아래는 기본적인 모듈의 사용법입니다.

#fibonacci.py
# Fibonacci numbers module

def fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

def fib2(n):   # return Fibonacci series up to n
    result = []
    a, b = 0, 1
    while a < n:
        result.append(a)
        a, b = b, a+b
    return result

위의 소스는 fibonacci.py로 저장된 Python 소스 파일입니다. fib() 함수는 피보나치 수열에 대하여 계산하여 출력해주며, fib2()는 피보나치 수열을 계산하여 리스트로 반환해 줍니다.

#TestModule1.py
import fibonacci

fibonacci.fib(100)
print(fibonacci.fib2(200))

다음은 TestModule1.py라는 파일을 생성하여 여기서 앞에서 생성한 fibonacci.py를 import하는 내용입니다. 2행에 보여준 것처럼 import라는 예약어를 사용하여 fibonacchi를 모듈로 쓰게 됩니다. 외부에서 모듈 형태로 함수를 가져왔기 때문에 코드는 매우 간결해 집니다.

다만 해당 내용이 다른 모듈에서 가져왔음을 보여주듯이 "fibonacci."라는 모듈명 사용이 보입니다. 이러한 표시에 대해서 기억해 두시기 바랍니다.

from fibonacci import fib, fib2

fib(100)
print(fib2(200))

이번에는 모듈을 가져오는 방식이 약간 다릅니다. 앞의 예제는 import를 사용해서 fibonacci 모듈을 가져왔는데 이 예제는 from 예약어와 import 예약어를 통시에 사용하고 있습니다. 이 형식으로 가져오는 방식은 아래와 같습니다.

from 모듈명 import 함수명1, 함수명2,..., 함수명n

또는

from 모듈명 import *
# *의 경우는 거의 대부분의 소프트웨어 분야에서 '모든 것'을 의미합니다.
# 따라서 위의 경우는 가져오는 외부모듈에 포함된 모든 것을 가져온다는 의미입니다. 

이러한 방법을 사용하면 좋은 점은 첫 번째 예제와는 달리 "fibonacci."와 같은 모듈명 사용이 생략된다는 것입니다. 이것은 불필요한 타이핑 수고를 없애줍니다. 한편으로는 모듈명이 생략되기 때문에 외부 모듈에서 가져온 함수를 사용할 때 이것이 어떤 모듈에서 가져왔는지 헤갈리게 만들 수도 있습니다. 또한 동일한 함수를 가지고 있는 여러 모듈을 가져올 때는 의도치 않은 함수를 사용하게 될 수도 있습니다.(사실 이경우에는 가장 나중에 import한 모듈의 함수를 가져오게 됩니다.)

예제

  1. 숫자의 입력을 받아서 입력한 1부터 입력한 숫자까지의 합을 구해서 반환하는 함수, 입력받은 수까지의 팩토리얼을 반환하는 함수, 입력받은 수까지의 피보나치 수열을 반환하는 함수가 포함된 모듈을 작성하십시오.

  2. 1의 예제에서 숫자가 아닌 경우 에러를 알려주는 내용을 추가하십시오.

  3. 1의 모듈에 팩토리얼은 입력된 자연수 n에 대해서, 1에서 n까지의 모든 자연수의 곱을 의미합니다. 따라서 모듈 작성시 이 조건 이외의 것에 대한 모든 예외조건을 포함하십시오.

  4. '수강생리스트( Dic 참고)' 내용을 참조하여, 해당 Dictionary 내용을 가지고 자료를 출력하는 모듈을 작성하십시오. 모듈은 여러 함수를 가지고 있습니다. 주어진 자료를 최대한 활용하여 여러 방법으로 내용을 출력할 수 있게 하십시오. (지역 입력, 나이, 선호하는 것 등을 반환하는 별도의 함수들을 만들고, 이것을 하나의 모듈로 엮으십시오.)

Last updated