시리즈 이전글입니다.
2021/02/03 - [파이썬/주식 자동매매] - Python 키움API 자동매매프로그램 개발-25.Python 기초편 클래스(4) 상속
프로그래밍을 하다보면 다른 개발자들이 미리 만든 코드나 자신이 만든 코드를 다시 사용하는 일이 많습니다.
이번 챕터에서는 이미 만들어진 코드를 불러 사용하는 방법에 대해서 알아볼 것입니다.
그 전에 생각해볼 것은 왜 이미 만들어진 코드를 사용해야하며 만든 사람은 다시 쓰일 수 있도록 고려해야할까요?
프로그래밍을 처음 배우면 하기 쉬운 실수(?)가 모든 코드를 하나의 파일(.py)에 몰아 넣는 것입니다. 이렇게 하는 것이 꼭 잘못됐다는 것은 아니지만 발생할 수 있는 문제를 비유를 들어 설명해보겠습니다.
예를 들어 냉동 피자를 만드는 공장에서는 다음과 같은 프로세스로 제품을 만든다고 해보겠습니다.
밀가루 반죽 > 피자 만들기 > 피자 용기 만들기 > 포장하기
이 생산라인을 분리하지 않고 하나로 묶는다면 과자 생산라인마다 다음과 같은 흐름대로 과자를 생산할 것입니다.
하지만 잘 생각해보면 피자를 만드는 것과 용기를 만드는 것은 피자마다 고유한 작업이지만 밀가루 반죽이나 포장같은 경우는 생산라인마다 분리하지 않고 하나로 묶어서 할 수 있는 작업입니다.
따라서 다음처럼 밀가루 반죽과 포장 단계를 재사용함으로써 생산라인을 간결하고 효율적으로 만들 수 있습니다.
프로그래밍을 하면서도 마찬가지입니다. 코드를 분리하고 다시 사용할 수 있는 부분은 재사용하면서 코드의 중복을 피하고 개발 시간을 단축할 수 있습니다.
프로그래밍을 하면서도 마찬가지입니다. 다시 사용할 수 있을 것 같은 코드는 분리하고 필요할 때 다시 재사용하면 코드를 간결하게 유지하면서 보다 빠른 시간에 개발할 수 있습니다.
01.import
그러면 코드를 재사용하는 방법은 무엇일까요?
예를 들어 pizza.py에 다음 코드를 만들어 보겠습니다.
pizza.py
def make_pizza(pizza_name):
print("{}피자를 생산합니다.".format(pizza_name))
여기서 make_pizza 함수를 사용할 수 있는 곳은 pizza.py입니다.
만약 factory.py에서 make_pizza를 호출하려고 한다면 호출이 불가합니다.
factory.py
make_pizza("A")
# NameError: name 'make_pizza' is not defined
호출이 불가한 이유는 factory.py와 pizza.py가 서로 다른 영역으로 분리되어 있기 때문에 서로의 존재를 인식하지 못하는 것입니다.
여기서 factory.py가 pizza.py를 인식할 수 있도록 하려면 import 라는 키워드를 사용해 포함시키려는 .py파일명을 추가해야합니다.
import .py파일명
factory.py에서 import pizza라는 코드를 추가하면 다음처럼 함수를 호출할 수 있습니다.
import pizza
pizza.make_pizza("A")
여기서 변수, 함수, 클래스 등을 담은 파이썬 파일(.py)을 모듈이라고 합니다.
모듈을 import 한 곳에서 모듈 안에 변수, 함수, 클래스를 이용하려면 다음처럼 모듈명 다음에 점(.)을 찍어 접근합니다.
모듈명.변수
모듈명.함수()
모듈명.클래스()
02.from import
그러면 이번에는 pizza.py 안에 또 다른 함수 make_pizza_box 함수를 만들어보겠습니다.
pizza.py
def make_pizza(pizza_name):
print("{}피자를 생산합니다.".format(pizza_name))
def make_pizza_box(pizza_name):
print("{}피자 용기를 생합니다.".format(pizza_name))
이렇게 pizza.py에서 또 다른 함수를 만들 경우 factory.py에서는 마찬가지로 추가된 함수를 사용할 수 있습니다.
factory.py
import pizza
pizza.make_pizza("A")
pizza.make_pizza_box("A")
하지만 pizza 모듈 안에서 특정 함수, 변수, 클래스만 import 하고 싶다면 from 키워드를 사용합니다.
from 모듈 import 함수, 변수, 클래스
위 예에서는 make_pizza_box 함수만 import 시켜보겠습니다.
factory.py
from pizza import make_pizza_box
make_pizza_box("A")
이렇게 pizza.py를 import한다면 factory.py 내에서는 pizza.py의 make_pizza_box라는 함수만 사용할 수 있습니다. 또 from import을 사용해 특정 리소스만 import했다면 해당 리소스를 접근하는데 더이상 모듈명 다음에 점(.)을 찍지 않고서도 바로 이용할 수 있습니다.
외부의 함수, 변수, 클래스를 사용하는데 import한 모듈명을 붙이지 않는 것이 편리할 수도 있지만 현재 모듈에서 만든 것은 아니기에 코드의 양이 많아질수록 원래 선언된 위치를 찾기 어려울 수 있습니다. 그럴 때는 어디서 선언됐는지 확인해보고 싶은 리소스 이름에 마우스를 올리고 키보드 Ctrl 키를 누른 상태에서 마우스 왼쪽 클릭을 하면 해당 리소스가 존재하는 위치로 이동하게 되니 참고하시기 바랍니다.
from import를 사용해 모듈 내에 존재하는 모든 리소스를 가져올 수도 있습니다.
from 모듈 import *
*은 와일드카드라고 불리며 전체, 모든 것을 의미합니다.
따라서 아래처럼 코드를 만들면 pizza 모듈 내에 존재하는 모든 리소스를 사용할 수 있으며
모듈명을 사용하지 않고 리소스에 접근할 수 있습니다.
from pizza import *
make_pizza("A")
make_pizza_box("A")
같이 보시면 좋을 글
2021/02/10 - [파이썬/주식 자동매매] - 주식매매프로그램 개발 노하우, 소스를 담은 전자책이 발간되었습니다.
2021/02/05 - [파이썬/주식 자동매매] - Python 키움API 자동매매프로그램 개발-27.Python 기초편 모듈(2) as, package
'파이썬 > 주식 자동매매' 카테고리의 다른 글
Python 키움API 자동매매프로그램 개발-28.Python 기초편 예외처리(1) (0) | 2021.02.07 |
---|---|
Python 키움API 자동매매프로그램 개발-27.Python 기초편 모듈(2) as, package (2) | 2021.02.05 |
Python 키움API 자동매매프로그램 개발-25.Python 기초편 클래스(4) 상속 (0) | 2021.02.03 |
Python 키움API 자동매매프로그램 개발-24.Python 기초편 클래스(3) 속성, 인스턴스 확인 (0) | 2021.02.02 |
Python 키움API 자동매매프로그램 개발-23.Python 기초편 클래스(2) self, __init__ (0) | 2021.02.01 |
댓글