Python 모듈(Module) 소개: 코드 파일을 재사용하는 방법

Ad Placeholder

파이썬으로 프로그램을 작성하다 보면 코드가 점점 길어지고 기능도 많아지게 됩니다.

처음에는 하나의 .py 파일에 모든 코드를 작성해도 크게 문제가 없지만, 프로그램의 규모가 커지면 함수와 클래스가 뒤섞이면서 코드를 관리하기 어려워집니다.

이때 사용할 수 있는 것이 모듈(Module)입니다.

모듈은 어렵게 생각할 필요 없이 파이썬 코드를 담아 놓은 하나의 .py 파일이라고 생각하면 됩니다.

이번 글에서는 파이썬 모듈이 무엇인지 알아보고, 모듈을 만드는 방법과 다른 파일에서 사용하는 방법까지 기본적인 내용을 살펴보겠습니다.


모듈(Module)이란?

파이썬에서 모듈은 함수, 클래스, 변수, 실행 코드 등을 하나의 파일에 모아 놓은 것입니다.

일반적으로 .py 파일 하나가 하나의 모듈이 됩니다.

예를 들어 다음과 같은 파일이 있다고 해보겠습니다.

calculator.py

이 파일 안에 계산과 관련된 함수를 작성할 수 있습니다.

def add(a, b):
    return a + b


def subtract(a, b):
    return a - b

그러면 calculator.py 자체가 하나의 모듈이 됩니다.

다른 파이썬 파일에서는 이 모듈을 가져와서 사용할 수 있습니다.

import calculator

print(calculator.add(10, 20))
print(calculator.subtract(20, 5))

실행 결과:

30
15

이처럼 모듈을 사용하면 한 파일에 작성한 코드를 다른 파일에서도 재사용할 수 있습니다.


왜 모듈을 사용할까?

모듈을 사용하는 가장 큰 이유는 코드를 나누고 재사용하기 위해서입니다.

예를 들어 프로그램 하나에 다음과 같은 기능이 모두 들어 있다고 생각해보겠습니다.

회원 관리
상품 관리
결제
로그
데이터 분석
파일 처리

모든 코드를 하나의 파일에 작성하면 파일이 매우 커지고 원하는 코드를 찾기도 어려워집니다.

대신 기능별로 파일을 나눌 수 있습니다.

project/
├── main.py
├── user.py
├── product.py
├── payment.py
├── logger.py
└── analysis.py

각 파일을 하나의 모듈로 사용할 수 있습니다.

예를 들어 user.py에는 사용자와 관련된 코드를 작성하고,

class User:
    def __init__(self, name):
        self.name = name

    def introduce(self):
        return f"안녕하세요. {self.name}입니다."

main.py에서는 이 모듈을 가져와 사용할 수 있습니다.

from user import User

user = User("홍길동")

print(user.introduce())

이렇게 기능별로 코드를 분리하면 프로그램을 관리하기가 훨씬 편해집니다.


모듈 만들기

모듈을 만드는 방법은 특별하지 않습니다.

그냥 .py 파일을 만들고 필요한 함수나 클래스를 작성하면 됩니다.

예를 들어 다음과 같은 파일을 만들어보겠습니다.

math_utils.py

그리고 다음 코드를 작성합니다.

PI = 3.141592


def add(a, b):
    return a + b


def multiply(a, b):
    return a * b

이제 math_utils.py는 하나의 모듈입니다.

다른 파일에서 가져와 사용할 수 있습니다.

import math_utils

print(math_utils.PI)
print(math_utils.add(10, 20))
print(math_utils.multiply(3, 4))

실행 결과:

3.141592
30
12

여기서 중요한 부분은 다음과 같습니다.

math_utils.add(10, 20)

.을 기준으로 앞쪽의 math_utils는 모듈이고, 뒤쪽의 add는 모듈 안에 정의된 함수입니다.

즉,

모듈.이름

형태로 모듈에 들어 있는 함수나 변수, 클래스 등을 사용할 수 있습니다.


import

모듈을 사용하기 위해 가장 기본적으로 사용하는 것이 import입니다.

import math_utils

이 코드는 math_utils 모듈을 가져오겠다는 의미입니다.

가져온 모듈은 모듈 이름을 통해 접근합니다.

math_utils.add(10, 20)
math_utils.PI
math_utils.SomeClass()

이처럼 하나의 모듈 안에 있는 여러 기능을 사용할 수 있습니다.


from import

모듈 전체를 가져오는 대신 특정 이름만 가져올 수도 있습니다.

from math_utils import add

그러면 add()를 바로 사용할 수 있습니다.

result = add(10, 20)

print(result)

실행 결과:

30

import math_utils를 사용했을 때와 비교하면 차이가 있습니다.

import

import math_utils

math_utils.add(10, 20)

from import

from math_utils import add

add(10, 20)

from import를 사용하면 모듈 이름을 앞에 붙이지 않아도 됩니다.


여러 개 가져오기

여러 개의 이름을 한 번에 가져오는 것도 가능합니다.

from math_utils import add, multiply

이제 두 함수를 바로 사용할 수 있습니다.

print(add(10, 20))
print(multiply(3, 4))

클래스도 같은 방식으로 가져올 수 있습니다.

from user import User

그리고 바로 사용할 수 있습니다.

user = User("홍길동")

import에 별칭 사용하기

모듈 이름이 길거나 다른 이름으로 사용하고 싶다면 as를 사용할 수 있습니다.

import math_utils as mu

그러면 다음과 같이 사용할 수 있습니다.

print(mu.add(10, 20))
print(mu.multiply(3, 4))

math_utils 대신 mu라는 별칭을 사용한 것입니다.

이 방식은 특히 이름이 긴 모듈을 사용할 때 편리합니다.


파이썬의 기본 모듈

직접 모듈을 만들지 않아도 파이썬에는 다양한 모듈이 기본적으로 제공됩니다.

대표적인 것이 math입니다.

import math

print(math.sqrt(16))
print(math.pi)

실행 결과:

4.0
3.141592653589793

math 모듈에는 수학 계산에 필요한 다양한 기능이 들어 있습니다.

또 다른 예로 random 모듈도 있습니다.

import random

number = random.randint(1, 10)

print(number)

randint()는 지정된 범위에서 임의의 정수를 반환합니다.

이처럼 이미 만들어져 있는 모듈을 가져와 사용하는 것만으로도 많은 기능을 쉽게 활용할 수 있습니다.


모듈의 이름을 확인하는 __name__

파이썬 모듈에는 특별한 변수인 __name__이 존재합니다.

모듈 파일에서 다음 코드를 작성해보겠습니다.

print(__name__)

이 파일을 직접 실행하면 일반적으로 다음과 같이 출력됩니다.

__main__

반대로 다른 파일에서 이 모듈을 import하면 모듈의 이름이 출력됩니다.

예를 들어 test_module.py가 다음과 같다고 해보겠습니다.

print(__name__)

그리고 main.py에서 다음과 같이 작성합니다.

import test_module

실행하면 다음과 같이 나옵니다.

test_module

즉, 현재 파일이 직접 실행된 것인지 다른 곳에서 모듈로 가져온 것인지에 따라 __name__의 값이 달라집니다.

이 특성을 이용해서 다음과 같은 코드를 자주 작성합니다.

def main():
    print("프로그램 실행")


if __name__ == "__main__":
    main()

이렇게 하면 해당 파일을 직접 실행했을 때만 main()이 실행됩니다.

다른 파일에서 모듈로 가져왔을 때는 main()이 자동으로 실행되지 않습니다.

이 패턴은 파이썬에서 매우 자주 사용됩니다.


모듈과 변수의 관계

모듈에는 함수뿐만 아니라 변수도 정의할 수 있습니다.

예를 들어 config.py가 다음과 같다고 해보겠습니다.

DEBUG = True
MAX_RETRY = 3
APP_NAME = "MyApp"

다른 파일에서는 다음과 같이 사용할 수 있습니다.

import config

print(config.DEBUG)
print(config.MAX_RETRY)
print(config.APP_NAME)

클래스도 마찬가지입니다.

class User:
    def __init__(self, name):
        self.name = name

그리고 다른 파일에서 가져올 수 있습니다.

from user import User

결국 모듈은 단순히 함수를 저장하는 파일이 아니라 변수, 함수, 클래스 등 여러 파이썬 이름을 하나의 파일 단위로 묶어 관리하는 공간이라고 이해하는 것이 좋습니다.


모듈을 사용할 때 주의할 점

모듈을 사용할 때는 이름 충돌에 주의해야 합니다.

예를 들어 다음과 같이 작성했다고 해보겠습니다.

from math import sqrt

def sqrt():
    return "내 함수"

이 경우 sqrt라는 이름이 충돌할 수 있습니다.

특히 여러 모듈에서 from ... import ... 형태로 많은 이름을 가져오면 어떤 이름이 어디에서 온 것인지 파악하기 어려워질 수 있습니다.

그래서 여러 기능을 사용하는 경우에는 다음처럼 모듈 자체를 가져오는 방식도 많이 사용합니다.

import math

print(math.sqrt(16))
print(math.pi)

모듈 이름이 함께 표시되기 때문에 코드의 출처를 파악하기 쉽다는 장점이 있습니다.


모듈의 장점

모듈을 사용하면 다음과 같은 장점이 있습니다.

1. 코드 재사용

한 번 작성한 함수나 클래스를 여러 파일에서 사용할 수 있습니다.

2. 코드 분리

관련된 기능을 별도의 파일로 분리할 수 있습니다.

3. 유지보수

프로그램이 커져도 기능별로 파일을 관리할 수 있습니다.

4. 이름 공간 분리

모듈마다 별도의 이름 공간을 가지기 때문에 같은 이름의 함수나 변수를 관리하기 쉬워집니다.

5. 협업

여러 개발자가 기능별로 코드를 나누어 작업하기도 편해집니다.


모듈과 패키지의 차이

모듈을 공부하다 보면 곧 패키지(Package)라는 개념도 만나게 됩니다.

간단하게 구분하면 다음과 같습니다.

구분의미
모듈(Module)일반적으로 하나의 .py 파일
패키지(Package)여러 모듈을 디렉터리 구조로 묶어 관리

예를 들어 다음과 같은 구조가 있다면,

myproject/
├── main.py
└── utils/
    ├── calculator.py
    ├── file.py
    └── logger.py

calculator.py, file.py, logger.py는 각각 모듈이고 utils는 여러 모듈을 묶어 관리하는 패키지 역할을 할 수 있습니다.

패키지는 이후 모듈과 함께 자세히 살펴보면 이해하기 쉽습니다.


정리

이번 글에서는 파이썬의 가장 기본적인 코드 구성 단위 중 하나인 모듈을 살펴봤습니다.

모듈은 일반적으로 하나의 .py 파일을 의미하며, 함수나 클래스, 변수 등을 하나의 파일에 모아 다른 코드에서 재사용할 수 있도록 합니다.

가장 기본적인 사용 방법은 다음과 같습니다.

import module_name

그리고 모듈 내부의 기능을 사용할 때는 다음과 같이 작성합니다.

module_name.function()

특정 이름만 가져오고 싶다면 다음과 같이 사용할 수 있습니다.

from module_name import function

또한 as를 사용해서 별칭을 지정할 수도 있습니다.

import module_name as mn

그리고 __name__을 이용하면 현재 파일이 직접 실행된 것인지 모듈로 가져와진 것인지 구분할 수 있습니다.

모듈을 제대로 이해하면 이후에 등장하는 패키지, 표준 라이브러리, 서드파티 라이브러리도 훨씬 쉽게 이해할 수 있습니다.

다음 글에서는 여기서 한 단계 더 들어가서 모듈 자체가 파이썬에서 하나의 객체로 어떻게 다뤄지는지 알아보겠습니다.

jiji

AI, Python, 생활정보와 정부 정책 정보를 쉽게 설명하는 정보 블로그입니다.

Ad Placeholder
Scroll to Top