45. 모듈과 패키지 만들기

Joy·2020년 4월 8일
0

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

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

모듈

모듈 만들기, 사용하기

새 파일로 저장. 저장한 이름이 모듈이름
import 모듈
모듈.변수
모듈.함수()

이렇게 하면 모듈이름 안붙이고 바로 사용
from 모듈 import 변수, 함수

모듈에 클래스

# 파일이름은 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))
import person    # import로 person 모듈을 가져옴
 
# 모듈.클래스()로 person 모듈의 클래스 사용
maria = person.Person('마리아', 20, '서울시 서초구 반포동')
maria.greeting()

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

from import

모듈에서 from import로 클래스를 가져온 뒤 모듈 이름을 붙이지 않고 사용

모듈과 시작점

파이썬은 최초로 시작하는 스크립트 파일과 모듈의 차이가 없습니다. 어떤 스크립트 파일이든 시작점도 될 수 있고, 모듈도 될 수 있습니다. 그래서 name 변수를 통해 현재 스크립트 파일이 시작점인지 모듈인지 판단
if name == 'main':처럼 name 변수의 값이 'main'인지 확인하는 코드는 현재 스크립트 파일이 프로그램의 시작점이 맞는지 판단하는 작업

패키지


폴더(디렉터리) 안에 init.py 파일이 있으면 해당 폴더는 패키지로 인식 (파이썬 3.3 이상부터는 init.py 파일이 없어도 패키지로 인식됩니다. 하지만 하위 버전에도 호환되도록 init.py 파일을 작성하는 것을 권장)

패키지 안에 모듈 만들기
operation
geometry

  • 패키지 사용
    import 패키지.모듈
    패키지.모듈.변수
    패키지.모듈.함수()
    패키지.모듈.클래스()

패키지에서 from import

import 패키지 형식으로 패키지만 가져와서 모듈을 사용하려면 calcpkg 패키지의 init.py 파일 수정 필요

  • from . import 모듈
# calcpkg/__init__.py
from . import operation    # 현재 패키지에서 operation 모듈을 가져옴
from . import geometry     # 현재 패키지에서 geometry 모듈을 가져옴

패키지에 속한 모든 변수, 함수, 클래스 가져오기

  • from 패키지 import *

init.py에서 모듈만 가져왔을 뿐 모듈 안의 함수는 가져오지 않았기 때문에 에러 발생.
이때는 init.py에서 모듈 안의 함수를 가져오게

  • from .모듈 import 변수, 함수, 클래스
calcpkg/__init__.py
# 현재 패키지의 operation, geometry 모듈에서 각 함수를 가져옴
from .operation import add, mul
from .geometry import triangle_area, rectangle_area

all로 필요한 것만 공개

/*로 모든 변수, 함수, 클래스를 가져오면 패키지 외부에 공개하고 싶지 않은 것까지 공개 all에 공개할 모듈, 변수, 함수, 클래스를 리스트 형태로 지정

하위패키지

import 패키지.하위패키지.모듈

문제: 패키지 사용하기

표준 입력으로 정수가 입력됩니다. 주어진 calcpkg 패키지를 활용하여 입력된 정수의 제곱근과 입력된 정수를 반지름으로 하는 원의 넓이가 출력되게 만드세요. 제곱근은 calcpkg 패키지에서 operation 모듈의 squareroot 함수를 사용하고, 원의 넓이는 calcpkg 패키지에서 geometry 모듈의 circle_area 함수를 사용하세요(calcpkg 패키지를 사용하지 않고 계산하면 결과가 맞더라도 틀린 것으로 처리됩니다. 반드시 calcpkg 패키지를 사용하세요).

파일: calcpkg/__init__.py
# 내용이 비어 있음
파일: calcpkg/operation.py
import math
 
def squareroot(n):
    return math.sqrt(n)
파일: calcpkg/geometry.py
import math
 
def circle_area(radius):
    return radius * radius * math.p

답:

파일: judge_package.py

import calcpkg.operation
import calcpkg.geometry
n = int(input())
print(calcpkg.operation.squareroot(n))
print(calcpkg.geometry.circle_area(n))
  1. 패키지 불러오기
  2. 입력으로 정수 받기
  3. 제곱근 - 모듈함수
  4. 원 넓이 모듈 함수
  5. 프린트
profile
roundy

0개의 댓글