TIL — 객체 지향 프로그래밍 (3)

이성보·2020년 11월 2일
0

python

목록 보기
6/7
post-thumbnail

참고 자료
https://www.py4e.com/lessons/servces
찰스 세브란스. 『데이터를 다루며 배우는 파이썬』. 인사이트, 2019.

객체 생명주기

일반적으로, 변수의 생성과 파괴에 대해서는 그다지 신경 쓸 일이 없지만, 객체가 좀 더 복잡해지면, 객체가 생성된 직후에 필요한 초기 설정이나 객체가 삭제될 때 정리하는 작업이 필요합니다.

객체의 생성 시점이나 종료 시점을 알고 싶다면, 아래처럼 객체에 특별한 이름의 메서드를 추가합니다.

class PartyAnimal:
   x = 0

   def __init__(self):
     print('I am constructed')

   def party(self) :
     self.x = self.x + 1
     print('So far',self.x)

   def __del__(self):
     print('I am destructed', self.x)

an = PartyAnimal()
an.party()
an.party()
an = 42
print('an contains',an)

# Code: https://www.py4e.com/code3/party4.py

이 코드의 실행 결과는 다음과 같습니다.

I am constructed
So far 1
So far 2
I am destructed 2
an contains 42

파이썬은 객체를 생성할 때 __init__ 메서드를 호출하기 때문에 객체에 필요한 기본값, 초깃값 등을 여기서 설정할 수 있습니다. 파이썬이 아래 줄을 만나면,

an = 42

지금까지 사용하던 PartyAnimal 객체를 멀리 던져버립니다. 그래서 변수 an을 재 사용해서 42라는 새로운 값을 저장할 수 있게 합니다. 이 순간에 an 객체는 소멸자 __del__이 호출되면서 파괴됩니다. 벼수가 파괴되는 걸 막을 수는 없지만, 객체가 더는 존재하지 않게 되기 직전에 필요한 종료 처리를 할 수 있습니다.

객체를 만들 때 생성자를 추가해서 객체의 초깃값을 설정하는 일은 자주 있지만, 객체에 대한 소멸자가 필요한 경우는 상대적으로 드뭅니다.

여러 개의 인스턴스

객체 지향의 진정한 힘은 클래스 인스턴스를 여러개 생성할 때 발휘됩니다.

클래스에서 여러 개의 객체를 생성할 때는 각각의 객체별로 다른 초깃값을 설정하고 싶은 경우가 많습니다. 이 경우는 생성자에 데이터를 전달해서 각 객체마다 다른 초깃값을 가지도록 할 수 있습니다.

class PartyAnimal:
   x = 0
   name = ''
   def __init__(self, nam):
     self.name = nam
     print(self.name,'constructed')

   def party(self) :
     self.x = self.x + 1
     print(self.name,'party count',self.x)

s = PartyAnimal('Sally')
j = PartyAnimal('Jim')

s.party()
j.party()
s.party()

# Code: https://www.py4e.com/code3/party5.py

생성자는 객체 인스턴스를 가리키는 self 매개변수 외에 추가 매개변수를 가지며 이들은 객체가 생성될 때 전달됩니다.

s = PartyAnimal('Sally')

생성자에서 아래 줄은,

self.name = nam

nam에 전달된 매개변수를 객체 인스턴스 내부의 name 속성으로 복사합니다.

프로그램의 출력 결과를 보면, 각 객체(s 와 j)가 자신만의 고유한 x 및 name 값을 가지고 있음을 보여줍니다.

Sally constructed
Jim constructed
Sally party count 1
Jim party count 1
Sally party count 2

0개의 댓글