Class 객체 & Instance 객체

장현웅·2023년 8월 27일
0

1. Class 정의


  • 클래스는 'class'키워드를 사용해서 정의된다.
    • 클래스의 정의는 해당 클래스의 이름, 속성(attribute), 메서드(method)를 포함한다.
  • Python의 대부분 네이밍컨벤션이 단어 사이에 '_'를 넣는다면 클래스의 네이밍컨벤션은 관례적으로 대문자로 시작하며, CamelCase 스타일을 따른다. 사실 Pascal 스타일과 다른점이 뭔가 싶다.
class Cookie:
	# 속성과 메서드 정의
    pass

2. 객체 생성 (인스턴스화)


  • 클래스로 만든 객체마다 고유한 성격을 가진다. 과자 틀로 만든 과자를 조금 베어 먹어도 다른 과자에는 아무런 영향이 없는 것처럼 동일한 클래스로 만든 객체들은 서로 전혀 영향을 주지 않는다.

  • 클래스의 가장 간단한 예)

    • class Cookie:
      	pass 
    • 아무런 기능도 없는 껍질분인 클래스도 '과자 틀'로 과자를 만드는 것처럼 객체를 생성하는 기능이 있다.
  • 객체는 클래스로 만들고 1개의 클래스는 무수히 많은 객체를 만들어 낼 수 있다.

    • a = Cookie()
       b = Cookie()
    • Cookie()의 결과값을 리턴받은 a와 b가 바로 객체이다. 마치 함수를 사용해서 그 결과값은 리턴받는 모습과 비슷하다.
      • 객체와 인스턴스의 차이
        클래스로 만든 객체를 ‘인스턴스’라고도 한다. 'a = Cookie()'로 만든 a는 객체이다. 그리고 a 객체는 Cookie의 인스턴스이다. 즉, 인스턴스라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용한다.
        Cookie class를 사용해 생성된 a, b 쿠키를 "객체" 혹은 "Cookie의 인스턴스"라고 한다.

3. Class 객체와 instance 객체의 관계

  • 각 클래스와 인스턴스에 변수를 추가/변경하거나 삭제할 수 있다.
    • class Person:
      	name = "Default Name" 
    • p1 = Person()
       p2 = Person()
       
       print(p1.name) # Default Name
       print(p2.name) # Default Name
       
       # 인스턴스 객체인 p1, p2에는 아직 인스턴스 객체만의 특화된 데이터가 없기 때문에 여전히 클래스 객체의 데이터를 참조한다.
    • 변경
      p1.name = "이하늬" # p1 인스턴스 객체의 'name'속성 변경
       
       print(p1.name) # 이하늬
       print(p2.name) # Default Name / p2의 데이터는 변경되지 않았기 때문에 여전히 Class의 데이터를 참조한다.
    • 추가
      Person.age = 25	# 클래스 객체에 새로운 멤버 변수 name 추가
      p2.age = 6			# 인스턴스 객체의 'age' 속성 변경
      print(p1.age) 		# 25 / p1 인스턴스 객체에는 같은 이름의 멤버 변수가 없기 때문에 클래스 객체의 데이터를 참조한다. 두 인스턴스 객체에서 모두 접근 가능
      print(p2.age)		# 6  
      print(Person.age) 	# 25 / 클래스 객체에서도 접근 가능
      p1.height = 180	# p1 인스턴스 객체에 새로운 멤버 변수 height 추가
      
      print(p1.height)	# 180
      
      print(p2.height)
      print(Person.height)
      # Traceback (most recent call last):
      File "c:\Users\jjoonnoo\Desktop\personal_project\members.py", line 9, in <module>
        print(p2.height)
              ^^^^^^^^^
      AttributeError: 'Person' object has no attribute 'height'
      
      # p2 객체와 상위 Person 클래스에는 height 이름을 찾을 수 없음.
      # 인스턴스 객체에서 동적으로 멤버 변수를 추가하는 경우, 추가한 인스턴스 객체를 통해서만 접근할 수 있다.

0개의 댓글