새소식

Computer science - 2023.03.21

[OOP] Class와 Instance(Object) 알아보기 Feat. self, cls

  • -

Class

데이터로 어떤 문제를 해결하기 위해서, OOP 원칙에 따라 코드로 구현한 것이다. 다시 말하면 어떤 집단에 속하는 Attributes(속성)과 Methods(행위)를 코드로 구현해, 변수메소드로 정의한 것이다.

 

이러한 Class는 Object(객체)의 설계도 역할을 하기 때문에, 실제 메모리 상에 올라가진 는다.

실제 메모리에 할당되는 것은 Class가 아닌 객체이고, 객체 각각은 instance라고 부른다.

 

Object(Instance)

Class에서 정의한 것(설계도)를 토대로 실제 메모리 상에 할당된 것(실제 사물)이다.

프로그램에서의 데이터행위를 묶어 만들어진, 실체이다.

 

Class로 만들어진 여러 instance는 각각 독립적이다. 

 

Python의 selfcls ?

  • selfinstance 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**
  • <__main__.SelfTest object at 0x0000018EB1351F10>
    • SelfTest의 object 즉 instance임을 의미
  • <class '__main__.SelfTest'>→ cls가 class 자체를 의미
    • cls는 메모리에 할당되지 않기 때문에, object 주소 값이 없다!

참고

 

타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍 - 인프런 | 강의

Python으로 생산성있는 개발만 아니라 견고하고 안전하게, 그리고 확장성있는 개발을 하세요! 🔥, - 강의 소개 | 인프런

www.inflearn.com

  • 해당 강의의 내용을 참고했다.
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.