본문 바로가기
PROGRAMMING/Python

[PYTHON] 클래스(class), init 개념, 정리, 설명

by HYUNHP 2023. 3. 5.
728x90
반응형

안녕하세요, HELLO

 

파이썬에서 클래스(class)는 데이터와 이를 처리하는 메서드(함수)로 구성됩니다. 이번에는 python의 클래스(class)에 대해서 자세히 살펴보고자 합니다


STEP 1. '클래스(class, init' 개념

 

STEP 2. '클래스(class) init' 설명


STEP 1. '클래스(class)' 개념

 

ref: snakebear.science

 

클래스에 대해서 많이 사용되는 은유는 '과자 틀'과 '과자 틀로 만든 과자'입니다.

  • 과자 틀 → 클래스 (class)
  • 과자 틀에 의해서 만들어진 과자 → 객체 (object)

여기에서 설명할 클래스는 과자 틀과 비슷합니다. 클래스(class)란 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면이고(과자 틀), 객체(object)란 클래스로 만든 피조물(과자 틀을 사용해 만든 과자)을 뜻합니다.

 

클래스로 만든 객체에는 중요한 특징이 있다. 바로 객체마다 고유한 성격을 가진다는 것입니다. 과자 틀로 만든 과자에 구멍을 뚫거나 조금 베어 먹더라도 다른 과자에는 아무 영향이 없는 것과 마찬가지로 동일한 클래스로 만든 객체들은 서로 전혀 영향을 주지 않습니다.


STEP 2. '클래스(class)' 설명

 

class라는 키워드로 새로운 타입을 생성할 수 있습니다.

앞에서 말했듯 클래스는 데이터와 메서드로 이뤄집니다.

 

그런데 클래스 내에서 특별한 이름(__로 시작해서 __로 끝나는)을 가진 매직 메서드들이 존재합니다.

__init__이라는 매직 메서드를 사용하게 되면, 객체가 생성될 때 자동으로 호출됩니다. 

 

이렇게 생성된 각 객체들은 모두 다른 메모리에 독립적으로 생성됩니다.

 

 

class student:
    def __init__(self):
        print(f'Student.')
        
s1 = student()
s2 = student()

print(f"Class studnt id nubmer is {id(student)}.")
print(f"Object s1 id nubmer is {id(s1)}.")
print(f"Object s2 id nubmer is {id(s2)}.\n")

if id(student) == id(s1) == id(s2):
    print(f'Class and objects are equal.')
else:
    print(f'Class and objects are NOT equal.')

클래스 내에 정의된 메서드는 클래스 공간에 저장됩니다. 

즉, 객체에서 어떠한 메서드를 사용하고자 한다면 사전에 정의된 클래스 공간에서 참조하여 사용한다는 뜻입니다.

인스턴스의 count 는 모두 클래스 count를 참조하고 있음을 알 수 있습니다.

 

 

즉, Person.count 의 숫자를 바꾸면 모든 인스턴스의 count 또한 바뀌게 됩니다.

 

만약 인스턴스의 count 의 값을 바꾸게 되면 어떻게 될까요?

새로 설정한 p2 만 인스턴스 속성의 값을 반환하게 됩니다. 나머지는 그대로 클래스 속성을 반환합니다.

 


Point 2) __init__ 메서드는 객체 생성 시 호출이 될 때 생성됩니다.

 

__init__ 메서드도 다른 메서드와 마찬가지로 첫 번째 매개변수 self에 생성되는 객체가 자동으로 전달된다는 점을 기억하자. 따라서 __init__ 메서드가 호출되면 setdata 메서드를 호출했을 때와 마찬가지로 first와 second라는 객체변수가 생성될 것이다.


Point 3) __init__ 메서드를 통해 객체 생성 시 만들어진 변수들은 모두 독립된 메모리에 저장됩니다. 

 

self라는 항목이 붙은 것은 각 객체 안에서만 통용되는 인스턴스 속성라고 생각하시면 됩니다.

즉, 한 객체에서 self.age를 바꾸어도 다른 객체에서는 영향을 받지 않습니다.


■ 마무리

'클래스(class), init'에 대해서 알아봤습니다.

좋아요댓글 부탁드리며,

오늘 하루도 즐거운 날 되시길 기도하겠습니다 :)

감사합니다.

 

반응형

댓글