데이터로 어떤 문제를 해결하기 위해서, OOP 원칙에 따라 코드로 구현한 것이다. 다시 말하면 어떤 집단에 속하는 Attributes(속성)과 Methods(행위)를 코드로 구현해, 변수와 메소드로 정의한 것이다.
이러한 Class는 Object(객체)의 설계도 역할을 하기 때문에, 실제 메모리 상에 올라가진 않는다.
실제 메모리에 할당되는 것은 Class가 아닌 객체이고, 객체 각각은 instance라고 부른다.
Object(Instance)
Class에서 정의한 것(설계도)를 토대로 실제 메모리 상에 할당된 것(실제 사물)이다.
프로그램에서의 데이터와 행위를 묶어 만들어진, 실체이다.
Class로 만들어진 여러 instance는 각각 독립적이다.
Python의 self 과 cls ?
self는 instance object 그 자체이다.
따라서 Class의 self의 주소와 생성된 instance의 메모리 id는 같다.
cls는 Class 그 자체이다.
cls 는 Class이기에, 메모리 id 정보가 출력 되지 않는다.
class SelfTest:
# 클래스 변수
name = "amamov"
def __init__(self, x):
self.x = x
# 클래스 메소드
@classmethod
def func1(cls):
print(f"cls: {cls}")
print("func1")
# 인스턴스 메소드
def func2(self):
print(f"self : {self}")
print("class 안의 self 주소 : ", id(self))
print("func2")
test_obj = SelfTest(17)
test_obj.func2()
SelfTest.func1()
print("인스턴스의 주소:", id(test_obj))
실행 결과
self : <__main__.SelfTest object at 0x0000018EB1351F10>
class 안의 self 주소 : **1712370032400**
func2
cls: <class '__main__.SelfTest'>
func1
인스턴스의 주소: **1712370032400**