오늘은 클래스에 대해 공부했다. 한번에 쉽게 이해되는 부분이 아니라 블로깅을 하면서 한번 더 복습하고 후에 여러 번 더 보아야 할 것 같다. 여태 공부한 부분 중에서는 제일 어려웠던 것 같다.
<예시>
class FourCal: #클래스를 선언해준다
def setdata(self, first, second):
self.first = first
self.second = second
setdata 함수를 만든다. 파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용하지만 다른 이름을 사용해도 상관없다. self에는 setdata메서드를 호출한 객체가 자동으로 전달된다.
a = FourCal() # a 객체를 만들고
a.setdata(4, 2) #setdata 메서드를 호출한다
setdata 메서드의 self 매개변수에는 객체 a가 자동으로 전달된다. 매개변수 first, second 에는 4, 2값이 각각 전달된다.
self.first = 4
self.second = 2
이렇게 해석되며
a.first = 4
a.second = 4
와도 같다.
a = FourCal()
b = FourCal() # a, b 객체를 만든다
a.setdata(4, 2)
b.setdata(3, 7)
이렇게 되면 a 객체의 first 값에는 4가 저장되고 b객체의 first 값에는 3이 저장된다. 클래스로 만든 객체의 객체변수는 다른 객체의 객체변수에 상관없이 독립적인 값을 유지한다.
class FourCal:
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
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()
b = FourCal()
a.setdata(4, 2)
b.setdata(3, 8)
입력 후 메서드들을 실행하면
a.add() -> 6 / a.mul() -> 8 / a.div() -> 2
b.add() -> 11 / b.sub() -> -5
이런식으로 각 객체의 사칙연산 값이 나온다.
위와 같이 객체에 초깃값을 설정해야 할 필요가 있을 때는 setdata 같은 메서드를 호출하기보다는 생성자를 구현하는 것이 제일 좋다. 생성자란 객체가 생성될 때 자동으로 호출되는 메서드를 의미한다.
위와 같은 코드에서는 setdata 대신에 init 앞과 뒤에 언더바(_) 두개씩을 붙인다.
class FourCal:
def __init__(self, first, second):
self.first = first
self.second = second
# 이렇게 생성자를 구현하게 되면 객체 생성 시점에 자동으로 호출된다.
a = FourCal(4, 2)
#이렇게 한줄에 객체 생성과 호출을 동시에 하게 된다.
class 클래스 이름(상속할 클래스 이름)
FourCal 클래스를 상속하는 MoreFourCal 클래스를 만든다고 한다면
class MoreFourCal(FourCal):
이렇게 만들면 되며 MoreFourCal 클래스는 FourCal 클래스를 상속했기 때문에 FourCal 클래스의 모든 기능을 사용할 수 있다. 또 새로운 메서드를 추가할 수도 있다. 상속은 기존클래스는 놔둔 채 클래스의 기능을 확장시킬 때 주로 사용한다.