Python - 클래스
● 클래스(class) 와 객체

과자 틀 = 클래스
과자 틀로 찍어 낸 과자 = 객체
객체 지향언어는 클래스를 가지고 있다.
클래스라는 틀을 통해서 객체를 생성하게 된다.
많이 사용하는 기능을 클래스로 정의하여 코드의 재사용성을 높인다.
클래스를 통해서 생성된 객체들은 각각 독립적이다.
** instace : 메모리에 생성된 객체
객체와 인스턴스의 차이
클래스로 만든 객체를 '인스턴스'라고도 한다.
객체와 인스턴스의 차이는 무엇일까?
a = Cookie()로 만든 a는 객체이고 a 객체는 Cookie의 인스턴스다.
즉, 인스턴스는 객체(a)가 어떤 클래스(Cookie)의 관계 위주로 설명할 때 사용한다.
a = Cookie의 경우 'a는 Cookie의 인스턴스'라 표현
클래스 예시)

** Calculator 클래스로 만든 계산기로 결과값과 상관 없이 독립적인 값을 유지한다.
** 계산기 대수가 늘어나도 객체를 생성하면 되기 때문에 간단하게 프로그램 작성이 가능하다.
- 사칙연산 클래스 만들기
- 함수를 만들 때 소스 코드 작성 방법
def 함수이름(매개변수):
수행문
...
class FourCal:
def setdata(self, first, second): #메소드 매개 변수
self.first = first # 메소드 수행문
self.second = second # 메소드 수행문
** 클래스 안에 구현된 함수는 메소드(method)라 한다.
** setdata 메소드는 매개변수로 self, first, second 3개 입력값을 받는다.
** 메소드의 첫 번째 매개변수 self는 특별한 의미를 갖는다.
a = FourCal()
a.setdata(4,2)
** 객체를 이용해 클래스의 메소드를 호출하기 위해선 a.setdata(4,2)와 같이 도트(.) 연산자 사용 필요
※ setdata 메소드에는 self, first, second 총 3개의 매개 변수가 필요하나 실제로 전달된 값은 a.setdata(4,2)처럼
2개의 값만 전달하였는데 사유는 아래 이미지를 확인하면 쉽게 알 수 있다.

** a.setdata(4,2)는 첫 번째 매개변수 self에 setdata 메소드를 호출한 객체 a가 자동으로 전달 된다.
** self가 아닌 다름 이름을 사용해도 상관 없다.

** FourCal클래스 : 두 수를 입력 받아서 , + - * / 를 처리하고 리턴하는 역할
1. 두수를 입력받는 메소드 setData(a,b)
2. + 연산을 처리하는 메소드 add()
3. - 연산을 처리하는 메소드 sub()
4. * 연산을 처리하는 메소드 mul()
5. / 연산을 처리한느 메소드 div()
class FourCal: def setdata(self, first, second): self.first = first # 자바의 this.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() #FourCal클래스 타입의 객체 생성 b = FourCal() a.setdata(4, 2) #(self=a객체, first=4, second=2) b.setdata(3, 8) a.mul()
● 생성자
객체가 생성될 때 딱 한 번 동작하여 객체를 생성시키는 메소드
생성자가 하는 역할 : 멤버변수의 초기화, 부모 클래스의 초기화 호출
class FourCal: def __init__(self, first, second): #생성자 __init__(self, 매개변수): self.first = first self.second = second def setData(self, first, second): self.first = first # 자바의 this.first = first 같은 개념 self.second = second def add(self): result = self.first + self.second # result = a.first 4 + a.second 2 return result # 6 def sub(self): result = self.first - self.second return result def mul(self): result = self.first * self.second return result def div(self): result = self.first / self.second return result a = FourCal(4,2) a.add() # 6 a.setData(8,4) a.add() # 12
** __init__ 메소드의 매개변수에도 self, first, second 값이 전달되어야 한다.
- 자바 클래스 이름과 동일한 리턴형이 없는 메서드
pulbic FourCal(int first, int second){
this.first = first;
this.second = second;
}
● 클래스의 상속
상속(Inheritance)이란 '물려받다'란 뜻으로 '재산을 상속받다'와 같은 의미
class 클래스명(상속할 클래스명)
class MoreFourCal(FourCal):
def pow(self):
result = self.first ** self.second ##제곱
return result
a = MoreFourCal(4, 2)
a.pow()+
** 상속은 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용한다.
● 메소드 오버라이딩
부모 클래스(상속한 클래스)에 있는 메소드를 동일한 이름으로 다시 만드는 것
즉 부모의 메소드를 자식의 필요에 맞게 메소드를 재정의 하는 방법
** 함수의 구현부만 다르게 정의한다.
class SafeFourCal(FourCal):
def div(self):
if self.second == 0:
return 0
else:
return self.first / self.second
a = SafeFourCal(4,0)
a.div() # 0
** 0으로 나눌 경우 기본적으로 ZeroDivisionError가 발생하나,
if self.second==0: return 0 으로 인해 오류가 발생하지 않고 0값 리턴