본문 바로가기
프로그래밍 공부/파이썬 문법 공부

(Python Class 정리) 파이썬 Class 사용 이유, 구성 요소, 예제 모음 및 공부 소스 정리

by 세상만사 네상만사 2022. 1. 26.
반응형

0. 정리하게 된 동기

 

시스템 트레이딩을 위한 나만의 시스템을 만들기 위해서는 class를 활용하는 것이 필수라고 느껴졌다. 지금은 파이썬의 class를 잘 모르고 함수만 사용하여 코딩하다보니, 코드가 난잡해지고 나아가 큰 프로그램을 만들 수 없을 것 같다는 생각이 들었기 때문이다. 그래서 파이썬 class와 관련된 내용을 구글링 및 유튜브를 통해 찾아보며 공부하였고, 간단한 예제를 풀어보며 어떻게 작동하는지 확인하였다. 이렇게 내가 공부한 걸 곱씹어보고, 필요할때 다시 찾아보는 한편, 어떤 자료를 참고했는지 다른 사람들과 공유하기 위해 여기에 정리한다.

 


1. 클래스를 사용하는 이유 

 

1) 클래스: 속성 + 행위를 한번에 관리하고 사용하기 위한 틀이기 때문

 

- 클래스에 속성과 행위를 담고 있기 때문에, 하나의 클래스를 통해 동일한 속성을 갖는 여러 객체 생성 가능

- 이를 통해 코드의 중복 방지 가능

- 붕어빵 틀 (클래스)을 활용하여 붕어빵 (객체)을 많이 만들 수 있음

 

2) 유지보수가 쉽기 때문에 

 

- 클래스 메소드 하나만 변경함으로써 전체 객체에 영향을 줄 수 있음

 

* 결국 객체 중심의 프로그램을 만들기 위함! (객체지향 프로그래밍: https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

* 큰 단위의 프로그램을 만들때 반드시 클래스 사용!

 


예시 코드:

class Rectangle:
    count = 0  # 클래스 변수

    def __init__(self, width, height):  # 초기화자
        self.width = width
        self.height = height
        Rectangle.count += 1  # 클래스 변수값 변경

    # 인스턴스 메서드
    def calcArea(self):
        area = self.width * self.height
        return area

    #  정적 메서드: self 없음, 인스턴스 변수에 접근 불가 - 객체 필드와 독립적이지만 로직상 클래스내에 포함되는 메서드
    @staticmethod
    def isSquare(rectWidth, rectHeight):
        return rectWidth == rectHeight  # True or False 값 나타냄

    # 클래스 메서드: self 대신 cls라는 파라미터를 전달받음 - 이를 통해 클래스 변수에 접근 가능
    @classmethod
    def printCount(cls):
        print(cls.count)  # 클래스 변수에 접근

    # 매직 메서드 (스페셜 메서드)
    def __add__(self, other):
        obj = Rectangle(self.width + other.width, self.height + other.height)
        return obj

 

 

2. 클래스 관련 용어 및 구성요소

 

* 넓게 보면 클래스 내의 method 도 callable attribute 라고 해서 속성으로 분류할 수 있지만, 여기서는 간단하게 속성 vs 메서드로 분류해서 정리함. 

 

1) 속성 (attribute): 클래스에 저장된 속성

 

(1) 인스턴스 속성

 

- self. 가 붙어있는 애들

- 인스턴스 메서드를 통해 접근

- 예:

self.width = width
self.height = height

 

 

(2) 클래스 속성

 

- 클래스 메서드 밖에 있는 애들. self가 안붙어 있음

- 보통 클래스 메서드를 통해 접근 (인스턴스 메서드로도 접근 가능하지만 헷갈리기 때문에 - 참고: https://dojang.io/mod/page/view.php?id=2378)

- 예: 여기서 count값

class Rectangle:
    count = 0  # 클래스 변수

 

2) 메서드 (method): 클래스에 저장된 행위

 

(1) 인스턴스 메서드

- 인스턴스 속성에 접근하기 위한 메서드

- 여러 인자 받을 수 있지만, 항상 첫 인자로 self 를 받음

- 예:

# 인스턴스 메서드
def calcArea(self):
    area = self.width * self.height
    return area

 

(2) 클래스 메서드

- 클래스 속성에 접근하기 위한 메서드

- self 를 받지 않으며, cls를 받음

- 위에 @~~~~ 라는 decorator을 보통 작성해줘서 클래스 메서드임을 밝힘

- 예:

# 클래스 메서드: self 대신 cls라는 파라미터를 전달받음 - 이를 통해 클래스 변수에 접근 가능
@classmethod
def printCount(cls):
    print(cls.count)  # 클래스 변수에 접근

 

(3) 정적 메서드

- 인스턴스 변수에 접근 불가

- self를 받지도 않음

- 객체 필드와 독립적이지만 로직상 클래스에 포함되는 메서드 (흠.. 굳이 왜쓸까..)

- 예:

#  정적 메서드: self 없음, 인스턴스 변수에 접근 불가 - 객체 필드와 독립적이지만 로직상 클래스내에 포함되는 메서드
@staticmethod
def isSquare(rectWidth, rectHeight):
    return rectWidth == rectHeight  # True or False 값 나타냄

 

(4) 매직 메서드 (스페셜 메서드)

- 파이썬에 내장된 메서드

- __add__, __sub__, __cmp__, __str__ 등등

- 이걸 변경하여 내가 원하는 결과를 나올 수 있게 할 수 있음

- 예:

    # 매직 메서드 (스페셜 메서드)
    def __add__(self, other):
        obj = Rectangle(self.width + other.width, self.height + other.height)
        return obj

# 사용 예
r1 = Rectangle(10, 5)
r2 = Rectangle(20, 15)
r3 = r1 + r2  # __add__()가 호출됨

 

3. 클래스 예제들 모음 사이트 (내가 참고했던 사이트)

 

1) 혼공파 45~46강 유튜브

2) 초보코딩 " 이 영상은 무료로 클래스를 설명해 줍니다 (__init__, self, super) "

 

3) 성균관대학교 오하영 교수님 강의 (9주차 ~ 10주차) **

- 예제도 많고 설명도 잘해주시고, class design을 어떻게 해야 할지 생각하게 됨.

- 9주차 ~ 10주차 까지 들었음

 

 

4) ** 예제로 배우는 파이썬 "클래스" 부분 **

 

* 매우 자세히 나와있어서 좋고, 예제가 잘 나와있음


5. 참고자료

 

출처: 

https://galid1.tistory.com/305

https://leffept.tistory.com/225

반응형

댓글