2. 해외선물/2-1. 해외선물 자동매매 연구

(키움증권 해외선물 자동매매 파이썬) 7. 클래스의 변수화(인스턴스)

봄이오네 2023. 9. 15. 08:03
반응형
목 차
1. 들어가며
2. 클래스 개념 및 변수화 필요성
   1) 클래스 개념
   2) 클래스 변수화(인스턴스) 정의 및 필요성
3. 클래스 변수화(인스턴스) 설명
   1) 클래스 변수화 형태
   2) 클래스 인스턴스 형태로 활용하지 않은 경우
4. 전체 코드
5. 마치며

 

1. 들어가며

지난 글에서는 파이썬에서 self.kiwoom을 통해 전역변수로의 기능을 알아보았다. 파이썬에서 self의 여러기능이 있겠지만, 해외선물 자동매매 시스템 구축을 생각한다면, 전역변수로서의 기능만 알면 될 것 같다.

 

이번 글에서는 파이썬에서 클래스의 변수화(인스턴스)에 대해 알아보자.


2. 클래스 개념 및 변수화 필요성

1) 클래스 개념

클래스란? 쉽게 생각하자. 클래스는 함수들의 모음이라고 말해도 될 것 같다. 절대 어렵게 생각하지 말자.

클래스가 필요한 이유는? 여러 함수를 실행하기 위해서이다.

 

앞의 2가지 설명이 정말 성의없게 느껴질 수 있지만, 기억하자. 우린 시스템만 구축/실행하기만 하면 된다.

자동차를 운전하기 위해 자동차 엔진 동작 원리를 알 필요 없다. 핸들/엑셀/브레이크 등을 잘 조작하면 될 것으로 생각된다.

 

클래스를 선언하는 형태는 아래와 같이 class를 먼저 써주고, 클래스명을 써주고나서 괄호()를 쳐주고, 콜론(:)으로 마지막에 써주면 클래스가 선언된다.

  • 선언 형태 : class 클래스명():

 

2) 클래스 변수화(인스턴스) 정의 및 필요성

클래스의 변수화는 무엇일까? 여러함수의 모음인 클래스를 임의로 선언된 변수에 담는다.

클래스 변수화의 필요성은? 클래스 안에서 함수를 실행하거나 클래스 밖에 실행하기 위함이다. 즉 클래스 내/외 가리지 않고 사용하기 위해서이다. (뭔가 설명해놓고 보니, 추상적으로 설명한것 같다. ㅠㅠ)


3. 클래스 변수화(인스턴스) 설명

1) 클래스 변수화 형태

이전에 설명했던 사례로 다시 알아보자. 여기서 클래스의 인스턴스화는 아래 코드처럼 11줄에서 이루어진다.

class btl_system():
    def __init__(self):          # 함수1
        self.open_price = 15000
        self.close_price = 15004

    def bong_check(self):     # 함수2
        self.bong_body_length = self.close_price-self.open_price
        print(self.bong_body_length)

if __name__ == "__main__":
    btl = btl_system()

    btl.bong_check()            # 실행1

    # self.bong_check()         # 실행2

 

1줄 : 임의의 클래스를 선언한다.

2줄 : 코드가 실행되고 최초로 실행되는 코드(__init__)를 정의해준다.

3줄~4줄 : 설명의 편의성을 위해 시가(15000)와 종가(15004)를 각각 변수에 넣어준다.

 

6줄 : 임의의 함수2를 선언해준다.

7줄 : 6줄의 함수 내용을 기재해준다. (여기에서는 종가-시가의 결과를 self.bong_body_length에 넣어달라는 뜻이다)

8줄 : 7줄의 변수 결과를 출력하라.

 

10줄 : 10줄의 있는 한줄은 외우자. 현재 실행되는 내용이 어쩌고 저쩌고 인데, 복잡하다. 10줄 아래의 내용을 실행하라는 뜻이다.

11줄 : 이 글의 첫번째 핵심이다. 1줄에서 정의한 btl_system()을 btl 변수에 인스턴스화 시켰다.

12줄 : 이 글의 두번째 핵심이다. 11줄에서 인스턴스한 내용을 활용하는 사례이다. btl.bong_check()는 클래스 btl_system 안에 있는 6줄의 함수(bong_check)를 실행하는 의미이다. 즉 1줄~8줄까지의 내용을 btl이라는 변수에 담아서 간략한 형태로 사용할 수 있다는 것이다.

 

2) 클래스 인스턴스 형태로 활용하지 않은 경우

클래스 인스턴스 형태로 활용하지 않은 경우, 15줄(실행2)의 self를 10줄~15줄에서 정의(define)하지 않아 오류가 발생한다.

 

즉, 10줄(if __name__ == "__main__":) 이후에서 위치에서, 1줄의 클래스를 활용해 주려면 클래스를 변수화(인스턴스)시킨 후에야 비로소 1줄~8줄의 함수를 활용할 수 있다.

그림. 클래스 인스턴스 형태로 활용하지 않은 경우

 

4. 전체 코드

전체 코드는 아래와 같다.

 

더보기
class btl_system():
    def __init__(self):          # 함수1
        self.open_price = 15000
        self.close_price = 15004

    def bong_check(self):     # 함수2
        self.bong_body_length = self.close_price-self.open_price
        print(self.bong_body_length)

if __name__ == "__main__":
    btl = btl_system()

    btl.bong_check()        # 실행1

    # self.bong_check()     # 실행2

 


5. 마치며

클래스의 변수화(인스턴스)에 대해 알아보았다. 나중에 설명하겠지만, 클래스의 변수화 형태 및 필요성을 이해하게 된다면, 코드의 어느 위치에나 클래스 내 함수를 실행할 수 있다.

 

지금까지 1부에 해당하는 자동매매 시스템의 < 개요 >에 해당하는 자동매매 및 알고리즘, 라이브거리 개념, 모투/실투 로그인, self 의미, 클래스의 변수화 등을 알아보았다.

 

다음 글부터는 tr을 통해 키움증권 서버에 데이터 요청-수신받는 방법에 대해 알아보자.

 

반응형