개발자 블로그

[윤성우의 열혈 파이썬 중급편] - 11. 클래스와 객체의 본질 본문

파이썬/윤성우의 열혈 파이썬 중급편

[윤성우의 열혈 파이썬 중급편] - 11. 클래스와 객체의 본질

hayongwoon 2022. 5. 3. 18:09

소프트웨어 공학 관점에서의 클래스와 객체는 이렇게 설명한다고 한다.

  • 클래스 : 객체를 만들기 위한 일종의 설계도 (우리가 흔히 많이 듣는 붕어빵 틀)
  • 객체 : 클래스를 기반으로 만들어진 실제 사물 (붕어빵)

클래스의 기본 정의 "클래스 내에 들어갈 변수(데이터)와 메소드(기능)를 결정하는 것"

 

객체 안에 변수가 만들어지는 시점

객체 안 변수가 만들어지는 시점

Simple 클래스는 메소드만 있는 클래스이다! 위 클래스 객체를 만들때 언제 변수가 생성이 되는가! 그림을 보면 s1.seti(200) 이라고 변수를 대상으로 대입 연산을 진행하는 순간에 객체의 변수가 만들어진다. 하지만, 먼저 geti라는 메소드를 호출하면 아래와 같은 오류를 만난다.

 

그러나 클래스를 정의할 때, 객체 생성시 자동으로 호출되는 __init__ 메소드를 다음과 같이 정의하고 또 그 안에서 객체 내에 필요한 모든 변수를 초기화 해주기만 하면 위 같은 에러를 피할 수 있다.

"설계도에 해당하는 클래스를 바탕으로 만들어진 객체에는 변수와 메소드가 담겨있다."

위의 규칙이 깨지지 않도록 __init__ 메소드를 잘 정의하는 것(모든 변수를 적절하게 초기화하는 것)이 중요하다!!

 

 

* 클래스의 알쓸신잡 

파이썬의 클래스는 그 자체로도 객체이다. 때문에 객체를 대상으로 할 수 있는 대부분이 클래스도 가능하다.

  • 변수에 클래스를 담는 것
  • 클래스는 type이라는 클래스의 객체
  • 파이썬의 객체에는 변수와 메소드를 붙이기(추가)도 떼기(제거)도 할 수 있다.
  • 파이썬의 클래스는 클래스이자 객체!
  • 클래스에 속한 변수를 만들 수 있다.
  • 객체에 찾는 변수가 없으면 해당 객체의 클래스로 찾아가서 그 변수를 찾는다.

마지막 두 개에 대해서는 예시를 들어 설명해보겠다.

- s1, s2의 객체를 만들었다! s1.geti(), s2.geti() 안에 변수가 없는데도 해당 객체의 클래스로 찾아가서 3, 5 변수를 반환했다!

- Simple.n = 7 -> 변수 생성!