>>> class Cookie: #클래스
>>> pass
>>> a = Cookie()
>>> b = Cookie()
➡️ 위 코드의 클래스는 아무 기능도 갖고 있지 않지만, 클래스이므로 객체를 만드는 기능을 가지고 있다. 클래스 Cookie()
의 결과값을 돌려받은 a
와 b
가 바로 객체
이다.
- 클래스로 만든 객체를 인스턴스라고도 한다. 이때 객체와 인스턴스의 차이는? Cookie() 로 만든 a는 객체이다. 그리고 a 객체는 Cookie의 인스턴스이다. 즉, 인스턴스라는 말은 특정 객체(a)가 어떤 클래스의 객체인지를 관계 위주로 설명할때 사용한다. 'a는 인스턴스'보다 'a는 객체'라는 표현이 어울리며, 'a는 Cookie의 객체'보다는 'a는 Cookie의 인스턴스'라는 표현이 더 잘 어울린다.
a = FourCal()
처럼 객체를 만들수 있게 해야한다. class FourCal(): # 클래스 만들기
pass
a = FourCal() #a라는 객체를 만듬
print(type(a)) #객체 타입을 출력
# <class '__main__.FourCal'> -> FourCal 클래스 객체임을 확인
a.setdata(4,2) #연산을 수행할 대상
class FourCal():
# 위 문장을 수행하기 위해 위 코드에서 pass를 빼고 함수를 만듬
def setdata(self,first,second): # 클래스안의 함수 = 메서드
self.first = first
self.second = second
a = FourCal()
print(a)
메서드 - 클래스 안에 구현된 함수를
메서드
라고 부른다. 메서드는 클래스에 포함되어 있다는 점만 제외하면 일반 함수와 똑같다.def 함수명(매개변수): 수행할 문장 ...
# 위 코드에서 메서드만 따로 가져옴.
# 클래스안의 함수 = 메서드
def setdata(self, first, second): # ① 메서드의 매개변수
self.first = first # ② 메서드의 수행문
self.second = second # ② 메서드의 수행문
3-1) setdata 메서드의 매개변수
self
,first
,second
로 3개의 입력값을 가지고 있는데, 일반 함수와는 달리 메서드의 첫 번째 매개변수 self
는 특별한 의미를 가진다. class FourCal():
def setdata(self,first,second): # 클래스안의 함수 = 메서드
self.first = first
self.second = second
a = FourCal() # a객체를 만들고,
a.setdata(4, 2) # a객체를 통해 setdat메서드 호출
# 객체를 통해 클래스의 메서드를 호출하려면 a.setdata(4,2)와 가이 도트(.)연산자를 이용해야함.
# but, setdata의 매개변수는 3개인데 두개만 전달함
# 그 이유는 a.setdata(4,2)처럼 호출하면 self에는 setdata메서드를 호출한 객체 a가 자동으로 전달된다.
#따라서 관례적으로 파이썬 메서드의 첫 번째 매개변수이름은 객체를 호출할때 호출한 객체 자신이 전달되기 때문에 self를 사용한다.
3-2) setdata 메서드의 수행문
self.first = 4
self.second = 2
# self는 전달된 객체 a이므로 이렇게 해석
a.fisrst = 4
a.second = 2
➡️ a.first = 4
가 수행되면 a 객체에 객체변수 first가 생성되고 값 4가 저장된다. 마찬가지로 a.second= 2
문장이 수행되면 a객체에 객채변수 second가 생성되고 값 2가 저장된다.
(여기서 객체에 생성되는 객체만의 변수를 객체변수
라고 부른다.)
# 확인하면 생성되었음을 확인할 수 있음.
a = FourCal()
a.setdata(4, 2) #a객체를 통해 setdata메서드 호출
print(a.first) #4
print(a.second) #2
➡️ 확인하면 a객체에 객체변수 first와 second가 생성되었음을 확인할 수 있다.
class FourCal():
def setdata(self,first,second): # 클래스안의 함수 = 메서드
self.first = first
self.second = second
# a,b 객체 만들기
a = FourCal()
b = FourCal()
a.setdata(4,2)
print(a.first)# a객체의 객체변수 first 생성 #4
b.setdata(3,7)
print(b.first) #b객체의 객체변수 first 생성 #3
➡️ 이때 a.first는 4, b.first는 3으로 a객체의 first 값는 b 객체의 first값에 영향받지 않고 원래 값을 유지하고 있음을 확인할 수 있다. 즉! 클래스로 만든 객체의 객체변수는 다른 객체의 객체변수에 상관없이 독립적인 값을 유지한다.
id 함수
를 사용해 객체변수가 독립적인 값을 유지한다는 점을 확인할 수 있다. class FourCal():
def setdata(self,first,second): # 클래스안의 함수 = 메서드
self.first = first
self.second = second
# id함수(객체의 주소를 돌려주는 파이썬 내장함수)사용하기
a = FourCal()
b = FourCal()
a.setdata(4,2)
b.setdata(3,7)
print(id(a.first))
print(id(b.first))
# 결과 -다른 주소를 보여줌.
➡️ 이렇게 a 객체의 first 주소값과 b객체의 first 주소값이 서로 다르므로 각각 다른 곳에 그 값이 저장된다는 것을 알 수 있다. 객체변수는 그 객체 고유 값을 저장할 수 있는 공간이다. 즉 객체 변수는 다른 객체들 영향을 받지 않고 독립적으로 그 값을 유지한다. 꼭 기억하자!
#이 연산이 가능하도록 해야함.
a = FourCal()
a.setdata(4,2)
print(a.add())
class FourCal():
def setdata(self,first,second): # 클래스안의 함수 = 메서드
self.first = first
self.second = second
def add(self): #add 메서드를 새로 만듬
result = self.first + self.second
return result
➡️ 클래스 안에 add 메서드를 추가해주면, 위 코드를 실행했을 때 값 6이 출력된다. 출력되는 과정을 설명하면 add 메서드의 매개변수는 self이고 반환값은 result이다. a.add()
와 같이 a 객체에 의해 메서드가 수행되면 add메서드의 self에는 객체 a가 자동으로 입력되므로 result = a.first + a.second
같이 실행이 되고, 그 전에 a.setdata(4,2)에 의해 a.first = 4, a.second = 2라고 이미 설정되었기때문에 resulr = 4+2 가 되고 따라서 결국 6을 돌려준다.
class FourCal(): # 클래스를 톧해 객체가 생기고
def setdata(self,first,second): # 객체에 숫자를 지정
self.first = first # 객체변수가 생기고
self.second = second
def add(self): # 객체 a가 입력되고
result = self.first + self.second #위에서 입력된 숫자가 출력!!
return result
def mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
#동작하는지 확인하기
a = FourCal() # a객체 만들기
b = FourCal() # b객체 만들기
a.setdata(4,2) # 객체에 숫자 지정
b.setdata(3,9) # 객체에 숫자 지정
print(a.add()) #더하기
print(a.sub()) #곱하기
print(b.add()) #더하기
print(b.div()) #나누기