1. 클래스와 객체

- 클래스(class): 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면(과자 틀)

- 객체(object): 클래스로 만든 피조물(과자 틀을 사용해 만든 과자)

- 객체마다 고유의 성격을 가진다. 동일한 클래스로 만들어도 객체들은 서로 전혀 영향을 주지 않는다.

 

* 객체와 인스턴스의 차이

- 인스턴스라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위조로 설명할 때 사용한다. 

Class Cookie:
	pass

a = Cookie()

- 'a'는 객체, 'a는 Cookie의 인스턴스'

 

- 메서드(Method): 클래스 안에서 구현된 함수.

- 메서드도 클래스에 포함되어 있다는 점만 제외하면 일반 함수와 다를 것이 없다.

 

 

2. 객체 만들기

class FourCal:
	def setdata(self, first, second):
		self.first = first
		self.second = second
        
a = FourCal()
a.setdata(4, 2)

- a.setdata(4, 2)처럼 호출하면 setdata 메서드의 첫 번째 매개변수 self에는 setdata메서드를 호출한 객체 a가 자동으로 전달된다.

- 객체를 호출할 때 호출한 객체 자신이 전달되는 것.

 

a = FourCal()
FourCal.setdata(a, 4, 2)

이렇게 메서드 호출도 가능. 단, '클래스 이름.메서드' 형태로 호출할 때는 객체 a를 첫 번째 매개변수 self에 꼭 전달해주어야 한다. (잘 사용하지는 않음.)

 

사칙연산 계산기

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

 

 

3. 생성자(Constructor)

- 객체에 초깃값을 설정해야 할 때는 setdata와 같은 메서드를 호출하여 설정하기 보다는 생성자를 구현하는 것이 안전한 방법.

- 생성자: 객체가 생성될 때 자동으로 호출되는 메서드.

class FourCal:
	def __init__(self, first, second): #객체 생성시 곧바로 호출.
		self.first = first
		self.second = second
	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

 

 

4. 클래스의 상속

class 클래스 이름(상속할 클래스 이름)

 

- 보통 상속은 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용.

- 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황이라면 상속을 사용해야 함.

 

a의 b제곱(aᵇ)을 계산하는 MoreFourCal 클래스

class MoreFourCal(FourCal):
	def pow(self):
		result = self.first ** self.second
		return result

상속은 MoreFourCal 클래스처럼 기존 클래스(FourCal)는그대로 놔둔 채 클래스의 기능을 확장시킬 때 주로 사용.

 

✔︎ 메서드 오버라이딩

- 메서드 오버라이딩(Overriding, 덮어쓰기): 부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것.

- 메서드를 오버라이딩하면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출된다.

 

나누는 값이 0인 경우 숫자 0을 돌려주도록 수정

 class SafeFourCal(FourCal):
 	def div(self):
		if self.second == 0:
			return 0
		else:
			return self.first / self.second

 

 

 

+ Recent posts