45.1 모듈 만들기

Unit 45. 모듈과 패키지 만들기

파이썬 스크립트를 작성할 때마다 매번 비슷한 클래스와 함수를 작성한다면 코드도 길어지고 중복되는 부분이 생깁니다. 이런 경우에는 공통되는 부분을 빼내서 모듈과 패키지로 만들면 됩니다. 이후에는 코드를 다시 만들지 않고 모듈과 패키지만 가져와서 사용하면 편리합니다.

모듈(module)은 변수, 함수, 클래스 등을 모아 놓은 스크립트 파일이고, 패키지(package)는 여러 모듈을 묶은 것입니다. 모듈은 간단한 기능을 담을 때 사용하며, 패키지는 코드가 많고 복잡할 때 사용합니다. 즉, 패키지는 기능들이 모듈 여러 개로 잘게 나누어져 있고, 관련된 모듈끼리 폴더에 모여 있는 형태입니다.

이번 유닛에서는 파이썬의 모듈과 패키지를 직접 만들어보겠습니다.

45.1 모듈 만들기

그럼 간단하게 2의 거듭제곱을 구하는 모듈을 만들어보겠습니다. 다음 내용을 프로젝트 폴더(C:\project) 안에 square2.py 파일로 저장합니다. IDLE에서 새 소스 파일을 만들고 저장하는 방법은 '3.2 IDLE에서 소스 파일 실행하기'를 참조하세요.

square2.py

base = 2          # 변수
 
def square(n):    # 함수
    return base ** n

이렇게 변수와 함수를 넣어서 square2.py 파일을 만들었습니다. 이렇게 모듈을 만들었을 때 모듈 이름은 square2입니다. 즉, 스크립트 파일에서 확장자 .py를 제외하면 모듈 이름이 됩니다.

45.1.1  모듈 사용하기

이제 square2 모듈을 사용해보겠습니다. 다음 내용을 프로젝트 폴더(C:\project) 안에 main.py 파일로 저장한 뒤 실행해보세요. 이때 square2.py 파일과 main.py 파일은 반드시 같은 폴더에 있어야 합니다.

  • import 모듈
    • 모듈.변수
    • 모듈.함수()

    main.py

    import square2               # import로 square2 모듈을 가져옴
     
    print(square2.base)          # 모듈.변수 형식으로 모듈의 변수 사용
    print(square2.square(10))    # 모듈.함수() 형식으로 모듈의 함수 사용
    

    실행 결과

    2
    1024
    

    실행을 해보면 square2 모듈에 만들었던 변수 base의 값이 출력되고, square 함수도 호출됩니다. 이처럼 모듈을 사용할 때는 import로 모듈을 가져온 뒤 모듈.변수, 모듈.함수() 형식으로 사용합니다.

    45.1.2  from import로 변수, 함수 가져오기

    물론 모듈에서 from import로 변수와 함수를 가져온 뒤 모듈 이름을 붙이지 않고 사용할 수도 있습니다.

    • from 모듈 import 변수, 함수
    >>> from square2 import base, square
    >>> print(base)
    2
    >>> square(10)
    1024
    

    45.1.3  모듈에 클래스 작성하기

    그럼 이번에는 모듈에 클래스를 작성하고 사용해보겠습니다. 다음 내용을 프로젝트 폴더(C:\project) 안에 person.py 파일로 저장하세요.

    person.py

    class Person:    # 클래스
        def __init__(self, name, age, address):
            self.name = name
            self.age = age
            self.address = address
     
        def greeting(self):
            print('안녕하세요. 저는 {0}입니다.'.format(self.name))
    

    이제 main.py 파일을 다음과 같이 고쳐서 실행해보세요.

  • import 모듈
    • 모듈.클래스()

    main.py

    import person    # import로 person 모듈을 가져옴
     
    # 모듈.클래스()로 person 모듈의 클래스 사용
    maria = person.Person('마리아', 20, '서울시 서초구 반포동')
    maria.greeting()
    

    실행 결과

    안녕하세요. 저는 마리아입니다.
    

    모듈의 클래스를 사용하는 방법도 변수, 함수와 같습니다. 즉, 모듈.클래스() 형식으로 모듈의 클래스를 사용하며, 클래스로 인스턴스를 만들 때는 person.Person('마리아', 20, '서울시 서초구 반포동')와 같이 사용하면 됩니다.

    45.1.4  from import로 클래스 가져오기

    물론 모듈에서 from import로 클래스를 가져온 뒤 모듈 이름을 붙이지 않고 사용할 수도 있습니다.

    • from 모듈 import 클래스
    >>> from person import Person
    >>> maria = Person('마리아', 20, '서울시 서초구 반포동')
    >>> maria.greeting()
    안녕하세요. 저는 마리아입니다.
    

    지금까지 만든 square2, person 모듈을 그림으로 나타내면 다음과 같은 모양이 됩니다.

    그림 45-1 모듈 사용하기