오늘은 파이썬 공식 홈페이지 자료를 기반으로 공부해도 해도 헷갈리는 개념인 파이썬의 클래스를 , 정리해보려 해요!
클래스란?
특정 값을 가진 데이터 혹은 함수 기능을 묶어서 프로그래밍에 사용할 수 있는 종합패키지라고 보시면 되는데요
파이썬 공식문서 상의 내용을 그림으로 구현해봤는데요
클래스 내부에는 데이터나 기능을 구현하는 빨간박스 내부 -> 이름 공간이 있는데 그 내부에 있는 변수나 함수 재료들이 객체인 것이죠! 예를 들어, 큰 패키지 내부에 면도기와 면도 크림이 있다면 그 내용물이 객체라고 볼 수 있는데요
이 클래스의 기능은 크게 2가지가 있다고 합니다. 클래스를 사용하기 위한 1) 인스턴스 만들기 2) 클래스 내부 객체를 활용하기 위한 어트리뷰트 참조라고 합니다.
첫 번째 인스턴스 만들기의 경우, 클래스의 객체를 호출한다! 라고 생각하면 편한데요.
클래스의 객체를 호출한다는 것에는 '인스턴스 객체는 오직 어트리뷰트 참조'만 이해한다는 전제가 깔려 있는데요
def __init__(self):
self.data = []
Class와 관련된 문서를 보면 꼭 나오는 __init__(self) 메서드의 예시를 보면 왜 self.data = [ ] 이런식으로 self.data 이런 모습을 가지고 있을까 궁금했는데, 인스턴스가 어트리뷰트 참조형태만을 이해하기 때문에 저런 식으로 표현했던거였습니다!
공식 문서에서는 '__init__(self)는 특정한 초기 상태로 커스터마이즈된 인스턴스로 객체를 만드는 것'으로 설명했는데요. 즉, 클래스에서 활용하려고 하는 비어있는 객체(어트리뷰트 참조 형태로 표현된 인스턴스)를 만든다!고 생각하시면 됩니다. 게임을 처음 깔고 세팅할 때 나오는 기본템들을 모두 구비해둔다고 생각하면 좀 편할 것 같아요.
따라서, 위 예시처럼 __init__ 메서드를 정의함과 동시에, 클래스는 자동적으로 초기화된 인스턴스를 만들 수 있게 되는 것이죠. MyClass 클래스 정의 이후 x =MyClass()를 호출하면 바로 초기화된 인스턴스를 가질 수 있다는 겁니다.
>>> class Complex:
... def __init__(self, realpart, imagpart):
... self.r = realpart
... self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)
위 예시는 좀 더 유연한 적용을 위해서 인스턴스에 사용할 수 있는 다양한 변수들이 주어진 경우인데요.
다르게 번역하자면 def __init__()에서 self (클래스)가 realpart과 imagpart 변수를 기본적으로 가지고 있다. 그리고 Complex()에 realpart와 imagpart라는 객체를 인스턴스 생성 형태로 가져올 수 있다는 것입니다.
어트리뷰트 참조는 인스턴스보다 이해하기가 쉬웠는데요. '클래스에서 어떤 객체를 참조해라'는 걸 알려주는 가이드 같은 역할을 합니다. 공식 문서상의 예시를 보면, MyClass.i와 MyClass.f 둘 다 i와 f()라는 객체를 어트리뷰트 참조를 했다고 볼 수 있습니다.
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
class Dog:
kind = 'canine' # 함수가 아닌 데이터 형태의 객체
def __init__(self, name):
self.name = name # 초기화된 객체 값 제공
>>> d = Dog('Fido') #Dog 클래스를 인스턴스 생성으로 호출
>>> e = Dog('Buddy')
>>> d.kind # 어트리뷰트 참조
'canine'
>>> e.kind
'canine'
>>> d.name # 어트리뷰트 참조
'Fido'
>>> e.name
'Buddy'
클래스의 핵심 개념인 객체, 인스턴스, 어트리뷰트 참조 개념을 알아봤는데요, 혹시 오류가 있다면 얼마든지 알려주시고 도움이 되었으면 좋겠습니다!
'Python' 카테고리의 다른 글
Python 딕셔너리 키 값, value 값으로 정렬하는 법 (1) | 2022.09.21 |
---|---|
Heapq 알고리즘 개념 및 활용방법 정리 (1) | 2022.09.21 |
Python List append/extend와 +=의 차이점 정리 (1) | 2022.09.20 |
2진법, 8진법, 16진법, 10진법 파이썬 변환 총정리 (0) | 2022.09.12 |
BFS/DFS 탐색 개념 정리 (0) | 2022.09.10 |
댓글