티스토리 뷰
"""
파이썬 공부 13일차
20200803
"""
으악 벌써 8월 클래스는 내용이 많고 중요할 것 같아서 두 파트로 끊어서 공부하기로 했다.
클래스
클래스를 배우기 전에, 함수를 통해 계산기의 '더하기' 기능을 구현해보자.
result = 0
def add(num):
	global result
	result += num
	
    return result
print(add(3))
print(add(4))
>>> 3
>>> 7
이전에 계산한 결과값을 유지하기 위해 result는 global 함수를 사용하였다.
그렇다면 만약, 한 프로그램에서 2대의 계산기가 필요하다면 어떻게 해야할까?
각 계산기는 각각의 결과값을 유지해야 하기 때문에 add 함수 하나만으로는 따로 유지가 불가능하다.
이럴 경우에는, 함수를 각각 따로 만들어야 한다.
result1 = 0
result2 = 0
def add1(num):
	global result1
	result1 += num
	return result1
def add2(num):
	global result2
	result2 += num
	return result2
print(add1(3))
print(add1(4))
print(add2(3))
print(add2(7))
>>> 3
>>> 7
>>> 3
>>> 10
각 함수에서 계산한 결과값을 유지하며 저장하는 전역 변수 result1, 2가 필요하다.
하지만, 여기서 더 많은 계산기가 필요하거나 빼기나 곱하기 등의 기능을 추가해야 한다면 점점 더 복잡한 상황이 된다.
이럴 경우에는 클래스를 사용한다.
class Calculator:
	def __init__(self):
		self.result = 0
	def add(self, num):
		self.result += num
		return self.result
cal1 = Calculator()
cal2 = Calculator()
print(cal1.add(3))
print(cal1.add(4))
print(cal2.add(3))
print(cal2.add(7))
클래스로 만든 별개의 계산기 2개가 각각의 역할을 수행한다.
계산기의 결과값 역시 다른 게산기의 결과값과 상관없이 독립적인 값을 유지하고 있다.
클래스를 사용 시 계산기 대수가 늘어나더라도 객체(cal1, cal2)를 추가로 생성만 하면 되기 때문에 함수를 사용하는 것보다 더욱 편리하다.
만약 빼기 기능을 추가하고싶다면 Calculator 클래스에 빼기 기능 함수를 추가하면 된다.
def sub(self, num):
	self.result -= num
	return self.result
클래스와 객체
클래스는 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면이고, 객체는 클래스로 만든 피조물이다.
클래스로 만든 객체는 객체마다 고유한 성격을 지니고 있는데, 동일한 클래스로 만든 객체들은 서로 전혀 영향을 주지 않는다.
객체는 클래스로 만들며 1개의 클래스는 무수히 많은 객체를 만들어 낼 수 있다.
# 사칙연산 클래스 만들기
클래스를 어떻게 만들 것인지 먼저 구상해보자.
사칙연산 클래스: FourCal
- 두 숫자를 입력 받기: setdata 메서드
 - 나누기: div 메서드
 - 곱하기: mul 메서드
 - 더하기: add 메서드
 - 빼기: sub 메서드
 
# 클래스 구조 만들기
제일 먼저 할 일은 a = FourCal()처럼 객체를 만들 수 있게 하는 것이다.
아무 기능이 없어도 되기 때문에 간단하게 만들 수 있다.
class FourCal:
	pass
FourCal 클래스는 아무 변수나 함수도 포함하지 않지만 객체 a를 생성할 수 있다.
직접 확인해봅시다.
a = FourCal()
print(type(a))
>>> class '__main__.FourCal'
# 객체에 숫자 지정할 수 있게 만들기
a 객체에 사칙연산을 할 때 사용할 숫자 2개를 지정할 수 있게 클래스를 만들어봅시다.
class FourCal:
	setdata(self, first, second):
		self.first = first
		self.second = second
클래스 안에 구현된 함수는 메서드(method)라고 한다.
# setdata 메서드의 매개변수
self 변수는 특별한 의미를 가진다.
a = FourCal()
a.setdata(4, 2)
setdata 메서드에는 총 3개의 매개변수가 필요한데 실제로는 2개의 값만 전달했다.
a.setdata(4,2)처럼 호출하면 첫 번째 매개변수 self에는 setdata 메서드를 호출한 객체 a가 자동으로 전달되기 때문이다.
관례적으로 self를 사용하는데 객체를 호출할 때 객체 자신이 전달되기 때문!
# setdata 메서드의 수행문
a.setdata(4, 2)처럼 호출하면 setdata 메서드의 매개변수 first, second에는 각각 4와 2가 전달된다.
즉, self.first = 4, self.second = 2와 같이 해석된다.
여기서 앞에서 말한 것과 같이 self는 전달된 객체 a이므로 다시 다음과 같이 해석된다.
a.first = 4, a.second = 2
print(a.first)
print(a.second)
>>> 4
>>> 2
# 더하기 기능 만들기
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)
	# first, second 객체변수에는 각각 값 4와 2가 지정 됨
print(a.add())
>>> 6
# 곱하기, 빼기, 나누기 기능 만들기
class FourCal:	
	def setdata(self, first, second):
		self.first = first
		self.second = second
	def add(self):
		result = self.first + self.second
		return result
	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()
b = FourCal()
a.setdata(5, 2)
b.setdata(4, 8)
print(a.add(), a.sub(), a.div(), a.mul(), end = ' ')
print(b.add(), b.sub(), b.div(), b.mul(), end = ' ')
>>> 7 3 2.5 10
>>> 12 -4 0.5 32
성공 ㅎㅅㅎ
생성자, 상속, 매서드 오버라이딩은 내일 하는걸로 ㅎㅎㅎ
끝 !
'🐍파이썬 > 📕점프 투 파이썬' 카테고리의 다른 글
| 15. 모듈 (0) | 2020.12.16 | 
|---|---|
| 14. 클래스 2 (0) | 2020.12.15 | 
| 12. 챕터4 연습문제 (0) | 2020.12.15 | 
| 11. 사용자 입력과 출력, 파일 읽고 쓰기 (0) | 2020.12.15 | 
| 10. 함수 (0) | 2020.12.10 |