티스토리 뷰

🐍파이썬/📕점프 투 파이썬

13. 클래스 1

와이드윤 2020. 12. 15. 17:09
728x90

"""

파이썬 공부 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

  1. 두 숫자를 입력 받기: setdata 메서드
  2. 나누기: div 메서드
  3. 곱하기: mul 메서드
  4. 더하기: add 메서드
  5. 빼기: 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

성공 ㅎㅅㅎ

생성자, 상속, 매서드 오버라이딩은 내일 하는걸로 ㅎㅎㅎ

 

끝 !

 

728x90

'🐍파이썬 > 📕점프 투 파이썬' 카테고리의 다른 글

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
댓글
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Total
Today
Yesterday