프로그래밍 언어/Python

Python_모듈 정의

OHSAYU 2022. 8. 24. 17:47

    파이썬에서 필수적으로 알아야 할 개념들이 있다. 라이브러리, 패키지, 모듈, 클래스, 함수 등이 파이썬을 다루기 위해서는 한 번쯤은 개념 정리를 하고 넘어가야 하는 용어다. 용어 순서대로 하위 항목들을 포함하고 있다.

라이브러리 패키지 모듈 > 클래스 > 함수

    이번 포스팅에서는 모듈의 개념 및 활용을 알아보자. 파이썬 공식 문서에서 작성된 개념은 입문자들에게 어려움이 존재하니 국내에서 잘 작성된 페이지에서 정리하였다. 출처는 포스팅 제일 하단에 적어두었다.

모듈(module)

    모듈이란 함수나 변수 또는 클래스를 모아 놓은 스크립트 파일이다.

모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일(.py or .ipynb)이다. 또한 패키지(package)란 이러한 모듈들이 여러 개 모여있는 것을 가리킨다. 여러 개의 파이썬 파일을 모아 둔 하나의 큰 폴더를 생각하면 이해하기 쉽다.

    파이썬이 지금처럼 많은 사용자들을 보유할 수 있었던 이유가 바로 모듈과 패키지 때문이다. 다른 사람들이 만든 코드를 간단하게 사용할 수 있으며, 우리가 직접 만들어서 사용할 수도 있다. 배포 또한 손쉽기 때문에 단시간에 크게 성장할 수 있었다. 우리는 파이썬으로 프로그래밍을 할 때 굉장히 많은 모듈을 사용한다. 여기에서는 모듈을 어떻게 만들고 사용할 수 있는지 알아보겠다.

모듈(module)의 구조

모듈(module) 만들기

모듈에 대해 자세히 살펴보기 전에 간단한 모듈을 한 번 만들어 보자.

# mod1.ipynb
def add(*args):
    result = 0
    for i in args:
        result += i
    return result
        
def sub(*args):
    result = 0
    for i in args:
        result -= i
    return result

def mul(*args):
    result = 1
    for i in args:
        result *= i
    return result

위와 같이 add, sub, mul 함수가 있는 파일 mod1.ipynb를 만들고 저장하자. 이 파일이 바로 모듈이다. 

※ 모듈 이름에 띄어쓰기가 포함되면 볼러올 수 없으니 언더바(_) or 대소문자로 구분하여 모듈명을 작성하자

모듈(module) 불러오기

우리가 만든 mod1.ipynb파일, 즉 모듈을 파이썬에서 불러와 사용하려면 다음과 같이 작성하자.

import import_ipynb # ipynb 파일을 불러오기 위해 작성, .py파일은 생략
import mod1 # mod1.ipynb 불러오기, 확장자는 제외하고 파일의 이름만 작성
mod1.add(1,2,3,4,5,6,7,8,9,10)
>>> 55

먼저 .ipynb 파일을 불러오기 위해선 'import import_ipynb' 코드를 작성해야 한다(.py파일 모듈을 불러오기 위해선 작성할 필요가 없지만 .ipynb 파일의 모듈을 불러오기 위해선 필수로 작성해야 한다). 그다음, mod1 모듈을 import 하고 마지막으로 mod1 모듈의 add 함수를 적용하기 위해선 mod1.을 add함수 앞에 적고 인자에 값을 넣으면 실행 결과가 출력된다.

※ import는 현재 디렉터리에 있는 파일이나 파이썬 라이브러리가 저장된 디렉터리에 있는 모듈만 불러올 수 있다. 파이썬 라이브러리는 파이썬을 설치할 때 자동으로 설치되는 파이썬 모듈을 말한다.

 

하위 폴더에 있는 파일 접근법

다음과 같이 한 경로 안에 모듈이 많을 경우 다른 파일과 구분이 어려워질 수 있다.

설명하기 편하게 이름을 비슷하게 지었지만 실제 파일명은 모듈의 성격과 맞게 작성하자.

모듈만 모아놓은 경로를 만들고 파일들을 옮기는 작업을 해보자.

위와 같이 Module 폴더를 생성하고 모듈 파일을 전부 옮겨주면 훨씬 깔끔하고 관리하기가 쉬워진다. 

그렇다면 Module 경로 안에 있는 모듈 파일 접근은 어떻게 해야 할까? 다음과 같이 작성해보자.

import import_ipynb
import Module.mod1 # Module경로에 존재하는 해당 파일 불러오기

Module.mod1.add(1,2,3,4,5,6,7,8,9,10) # 함수 앞에 경로도 표기해줘야 함
>>> 55

위와 같이 mod1 모듈을 불러오기 위해서는 앞에 'Module.'이라는 경로를 작성해줘야 한다. 이전에는 한 경로 안에 모듈 파일과 스크립트 파일이 같이 있어서 작성을 안 해도 됐지만 다른 경로에 모듈이 존재할 경우 경로도 작성해야 불러올 수 있다. 하지만 위와 같이 작성할 경우 함수를 작성할 때 'Module.mod1'와 같이 코드가 길어지는 문제가 있다. 이는 다음과 같이 해결할 수 있다.

import import_ipynb
import Module.mod1 as m1 # alias(별칭) 추가

m1.add(1,2,3,4,5,6,7,8,9,10) # 작성한 별칭으로 작성
>>> 55

위와 같이 모듈을 불러올 때 as를 적고(alias, '에일리어스'라고 읽고 파일 인터넷 주소 등에 쓰이는 가명) 원하는 별칭을 적으면 된다. 코드가 훨씬 간결해졌다. 자주 쓰이는 구조를 살펴보자.

import 모듈명
# 해당 모듈을 사용하겠다는 의미
# 모듈명.함수명으로 호출

import 모듈1, 모듈2,...
# 여러 모듈 불러오기
# 콤마(,)로 구분

import 모듈명 as 모듈별칭
# 해당 모듈을 주어진 모듈별칭으로 사용하겠다는 의미
# 모듈별칭.함수명으로 호출

from 모듈명 import 함수명[, ..., *]
# 해당 모듈 안의 해당 함수를 사용하겠다는 의미
# 모듈명 없이 함수명만으로 호출
# 함수명 자리에 *를 사용할 경우 전체 함수 불러옴
# * : 별표(에스테리스크) 연산자. 프로그래밍에서 보통 모든 것(everything)을 의미한다.
"""
밑줄(_)로 시작하는 것들을 제외한 모든 이름을 불러온다. 대부분 파이썬 프로그래머들은
이 기능을 사용하지 않는데, 인터프리터로 알려지지 않은 이름들의 집합을 도입하게 되어
이미 정의한 것들을 가리게 될 수 있기 때문이다.
하지만 대화형 세션에서 입력을 줄이고자 하는 경우는 상관없다.
"""

from 모듈명 import 함수명 as 함수별칭
# 해당 모듈 안의 해당 함수를 주어진 함수별칭으로 사용하겠다는 의미
# 함수를 호출할 때 주어진 함수별칭으로 호출


"""
__init__.py 파일을 어떤 디렉토리 안에 넣으면 해당 디렉토리는 패키지가 된다.
패키지는 하나 이상의 모듈을 포함하며, 또 다른 패키지를 포함할 수 있다.
"""

'''
fruits/
  __init__.py
  apple.py
  banana.py
  orange.py
'''

import fruits
from fruits import apple

위 코드 구조 모음의 3, 4번째 코드를 보면 별칭 말고도 더 간단하게 작성할 수 있다. 모듈 안의 특정 함수만 불러오는 방법이다. 모듈 그 자체만 불러오게 되면 그 안의 함수를 출력하려면 '모듈.해당함수' 구조로 적어야 했지만 3, 4번째 코드는 해당 함수만 적어주면 된다. 상황에 맞게 유용하게 사용해보자.

모듈 사용 전 vs 후 비교

자판기 프로그램을 예로 들어 모듈을 사용했을 경우를 비교해보자.

Coke = 700
Sprite = 800

while True:
    drink = input("음료의 종류를 선택하시오 : ")
    if drink == "Coke":
        print("음료 : ", drink)
        break;
        
    elif drink == "Sprite":
        print("음료 : ", drink)
        break;
        
    else:
        print("다시 입력하세요")
        
            
number = int(input("개수 : "))
money = int(input("금액 : "))

if drink == "Coke":
    change = money - (Coke * number)
else:
    change = money - (Sprite * number)
    
a = change // 50000            # 5만원 개수
b = (change % 50000) // 10000 # 1만원 개수
c = (change % 10000) // 5000 # 5천원 개수
d = (change % 5000) // 1000 # 1천원 개수
e = (change % 1000) // 500 # 500원 개수
f = (change % 500) // 100 # 100원 개수

if change < 0:
    print("금액이 모자랍니다")
else:
    change = f'5만원 : {a}장, 1만원 : {b}장, 5천원 : {c}장, 1천원 : {d}장, 500원 : {e}개, 100원 : {f}개'
    print("")
    print(f'{drink}를 {number}개를 선택하셨습니다.\n\n투입금액 {money}원, 거스름돈 ({change})을 반환합니다.')
    
>>> 음료의 종류를 선택하시오 : Sprite
>>> 음료 :  Sprite
>>> 개수 : 3
>>> 금액 : 2000
>>> 금액이 모자랍니다
import import_ipynb
import Vending_Machine_Program

>>> importing Jupyter notebook from Vending Machine Program.ipynb
>>> 음료의 종류를 선택하시오 : Sprite
>>> 음료 :  Sprite
>>> 개수 : 2
>>> 금액 : 4400
>>> Sprite를 2개를 선택하셨습니다.
>>> 투입금액 4400원, 거스름돈 (5만원 : 0장, 1만원 : 0장, 5천원 : 0장, 1천원 : 2장, 500원 : 1개, 100원 : 3개)을 반환합니다.

위 아래 코드를 비교해보면 코드가 극단적으로 간단해졌다. 따라서 모듈을 필요할때 상황에 맞게 사용하면 굉장히 유용할것이다.

 

 

출처 : https://wikidocs.net/29

 

05-2 모듈

모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일이다. 모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일이라고도 할 수 있다. 우리는 파이썬으로 ...

wikidocs.net

출처 : http://www.tcpschool.com/python/OOP_module

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

출처 : https://chan-lab.tistory.com/3

 

[jupyter notebook] py 파일 import 하기

딥러닝을 공부하다 보면, 외부파일들로부터 함수를 불러와야 하는 경우가 많습니다. 이러한 작업은 pycharm에서는 비교적 간단하게 할 수 있으나, jupyter notebook을 사용하시는 분들은 조금 힘드실

chan-lab.tistory.com

출처 : https://www.codeit.kr/community/threads/8825

 

.py 대신 .ipynb 그대로 모듈 import 하기 | 코드잇

주피터 노트북 사용하시는 분들 많으실텐데, .py 로 save as 하기도 귀찮아서 찾아보니까 ipynb 그대로 모듈 임포트 하는 방법이 있어서 공유 드려요 1) 모듈 설치 pip install import_ipynb 2) 모듈 임포트 im

www.codeit.kr

출처 : https://sksstar.tistory.com/158

 

파이썬 모듈의 이해(from, import, as)

import 모듈명 # 해당 모듈을 사용하겠다는 의미. # 모듈명.함수명 으로 호출. import 모듈명 as 모듈별칭 # 해당 모듈을 주어진 모듈별칭으로 사용하겠다는 의미. # 모듈별칭.함수명으로 호출. from 모

sksstar.tistory.com

출처 : https://dojang.io/mod/page/view.php?id=2447 

 

파이썬 코딩 도장: 45.1 모듈 만들기

Unit 45. 모듈과 패키지 만들기 파이썬 스크립트를 작성할 때마다 매번 비슷한 클래스와 함수를 작성한다면 코드도 길어지고 중복되는 부분이 생깁니다. 이런 경우에는 공통되는 부분을 빼내서

dojang.io

출처 : http://pythonstudy.xyz/python/article/17-%EB%AA%A8%EB%93%88-Module

 

예제로 배우는 파이썬 프로그래밍 - 모듈 (Module)

1. 모듈 모듈(Module)은 파이썬 코드를 논리적으로 묶어서 관리하고 사용할 수 있도록 하는 것으로, 보통 하나의 파이썬 .py 파일이 하나의 모듈이 된다. 모듈 안에는 함수, 클래스, 혹은 변수들이

pythonstudy.xyz