클래스란? 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면
객체란? 클래스를 이용해 만든 것을 뜻한다
인스턴스란? 객체안에 대입하는 것
EX. a=cookie()라고 하면, a=객체, cookie()=인스턴스
클래스로 만든 객체는, 각기 고유한 성격을 가지며 서로 영향을 주지 않는다
사칙연산을 가능하게 하는 FourCal 클래스가 다음처럼 동작한다고 가정해보자
a=FourCal()
그런 다음, a.setdata(4,2)처럼 입력해서 숫자 4와 2를 a에 지정해준다
a.setdata(4,2)
a.add()를 수행하면 두 수의 합을 돌려준다
print(a.add())
=> 6
a.mul()을 수행하면 두 수의 곱을 돌려준다
print(a.mul())
=> 8
a.sub()를 수행하면 두 수의 차를 돌려준다
print(a.sub())
=> 2
a.div()를 수행하면 두 수의 나누기를 돌려준다
print(a.div())
=> 2
이렇게 만드는 것이 목표다
일단 FourCal이라는 class를 만든다
class FourCal :
pass
일단 객체는 아무기능이 없다
그래서 객체 내용을 채워줘야 한다
class FourCal :
def setdata(self,first,second) :
self.first = first
self.second = second
분명 setdata에는 숫자 두 개를 인수로 받을 건데, 왜 3개가 있지? 라고 생각이 들것이다
나도 그랬거든;
근데 문구를 보면 함수안에 self.first로 시작하는 거 보니 아 객체를 뜻 하는 구나를 알 수 있다
파이썬만의 고유 특징이라 사용해도 되는데, 헷갈리면 굳이 사용 안 해도 된다
add()를 만들어야 하는데, class 내에서 만들어준다
class FourCal :
def setdata(self,first,second) :
self.first = first
self.second = second
def add(self) :
result = self.first + self.second
return result
a = FourCal()
a.setdata(4,2)
b=a.add()
print(b)
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(x) :
result = x.first * x.second
return result
a = FourCal()
a.setdata(4,2)
b=a.add()
c=a.mul()
print(c)
초기값을 설정할 때, setdata()같은 함수보다 생성자를 사용하는 게 더 안정적이다
init 이라고 사용한 뒤 파라미터를 설정해주면 된다
생성자를 선언해주면 객체 선언 할 때 인수를 넣어줘야 한다
상속을 할 때, 클래스 선언 후 ()안에 상속할 클래스를 넣어주면 된다
class moreFourCal(Fourcal) :
이렇게
JAVA에서는 extend? 였던 거 같은 데 파이썬은 되게 단순하게 이루어져 있다
상속을 받았기 때문에 이전 클래스의 기능을 다 사용할 수 있다
상속은 기존 클래스를 변경하지 않고, 기능을 추가하거나, 기존 기능을 변경할 때 사용한다
그럼 수정하면되지 왜 상속을 사용하냐?
-> 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 경우가 있기 때문
클래스 내의 함수를 바꾸고 싶을 때, 상속받은 클래스에서 동일한 이름의 함수를 재정의하는 걸 오버라이딩이라고 한다
오버라이딩을 하면, 부모클래스의 메서드가 아닌 오버라이딩 된 메서드대로 프로그램이 이루어진다
말 그대로 클래스를 만들고 맨 처음 선언하는 변수를 클래스 변수라고 한다.
클래스 변수는 모든 객체에 공유된다