47. 파이썬 – 클래스 변수

47. 파이썬 – 클래스 변수

지난 포스팅에서는 메서드 오버라이딩 개념에 대해 이해하고 예제를 통해 알아보았습니다.
이번 포스팅에서는 파이썬 클래스 중 클래스 변수에 대해 공부해 보려 합니다.

파이썬 클래스

클래스 변수

이전까지 공부한 내용에서 객체 변수는 다른 객체들의 영향을 받지 않고 각각 독립적으로 각자의 값을 유지를 하고 있다는 것을 알게 되었습니다.
이제 객체 변수와는 그 성격이 다른 클래스 변수에 대해 공부해 보겠습니다.

클래스 변수 만들기

Python
>>> class MyFamily:
...     lastname = "이"
...

MyFamily 라는 클래스를 선언을 했고 그 안에 lastname 이라는 변수가 바로 클래스 변수 입니다.
클래스 변수는 클래스 안에서 함수를 선언하는 것 처럼 클래스 안에 변수를 선언하고 생성을 하게 됩니다.

Python
>>> print(MyFamily.lastname)

>>>

위 코드처럼 클래스 변수를 print 문을 통해 출력을 해보았습니다.
위 예제에 있는 것 처럼 클래스 변수는 클래스이름.클래스 변수 로 사용하시면 됩니다.

Python
>>> a = MyFamily()
>>> b = MyFamily()
>>> print(a.lastname)

>>> print(b.lastname)

>>>

클래스 변수의 내용 변경하기

또한 위 코드처럼 MyFamily 클래스로 만든 객체를 통해서도 클래스 변수를 사용할 수 있습니다.
그럼 만약에 MyFamily 클래스의 lastname 이라는 클래스 변수의 내용을 다른 문자열로 바꾸면 어떻게 될까요?
아래는 클래스 변수의 내용을 “박” 이라는 문자열로 바꿔본 내용입니다.

Python
>>> MyFamily.lastname = "박"
>>> print(a.lastname)

>>> print(b.lastname)

>>>

클래수 변수의 내용을 변경 했습니다.
결과는 클래스로 만든 객체의 lastname 값도 모두 변경되었음을 확인 할 수 있습니다.
이처럼 클래스 변수는 클래스로 만든 모든 객체에 공유된다는 특성을 가지고 있습니다.

클래스 변수와 같은 이름의 객체 변수를 생성한다면 어떻게 될까?

만약 클래스 변수와 같은 이름의 객체 변수를 생성하면 어떻게 될까요?
아래 코드처럼 이전 사용했던 a.lastname 을 변경해 보겠습니다.

Python
>>> a.lastname = "오"
print(a.lastname)

>>>

얼핏 보면 MyFamily 클래스의 lastname 클래스 변수가 바뀐것 같아 보이지만
a 객체에 lastname 이라는 객체 변수가 새롭게 생성된 것입니다.
이말은 객체 변수는 클래스 변수와 같은 이름으로 생성을 해도 된다는 것입니다.
a.lastname 이라는 객체 변수를 생성을 해도 MyFamily 클래스의 lastname 과는 상관이 없습니다.
아래 코드를 보시면 확인이 되실겁니다.

Python
>>> print(MyFamily.lastname)

>>> print(b.lastname)

>>>

이처럼 MyFamily 클래스의 lastname 값은 변하지 않았습니다.

클래스 변수와 객체 변수

클래스 변수보다는 객체 변수가 훨씬 더 중요합니다.
실제 프로그래밍을 할 때도 클래스 변수 보다는 객체 변수를 주로 사용을 하고 있습니다.

이렇게 이번 포스팅에서는 클래스 변수에 대해 공부해 보았습니다.
여기까지 클래스에 대한 공부를 마무리 하고 다음 포스팅에서는 모듈에 대해 공부를 해보도록 하겠습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
47. 파이썬 - 클래스 변수

46. 파이썬 – 메서드 오버라이딩

46. 파이썬 – 메서드 오버라이딩

지난 포스팅에 파이썬 클래스의 상속하는 이유와 방법에 대해 공부 해봤습니다.
이번 포스팅에서는 메서드 오버라이딩 개념에 대해 공부해 보도록 하겠습니다.

파이썬 클래스

메서드 오버라이딩

먼저 이전에 만들었던 사칙연산 클래스인 Four_Calculator 클래스를 예를 들어 실행해 보겠습니다.

Python
>>> a = Four_Calculator(4, 0)
>>> a.divide()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 18, in divide
ZeroDivisionError: division by zero

Four_Calculator 클래스의 a 객체에 숫자 4 와 0 을 입력하고 divide(나누기) 메서드를 호출하게 되면 숫자 4 를 0 으로 나누려는 시도 때문에 이처럼 ZeroDivisionError 오류가 발생하게 됩니다.
그럼 여기서 0 으로 나눌 때 오류가 아니라 0 을 리턴하도록 만들려면 어떻게 해야 할까요?

아래처럼 Four_Calculator 클래스를 상속하는 Safe_Four_Calculator 클래스를 만들어 보도록 하겠습니다.

Python
>>> class Safe_Four_Calculator(Four_Calculator):
...     def divide(self):
...         if self.second == 0: # 나누는 숫자가 0 인 경우 0 을 리턴하도록 수정
...             return 0
...         else:
...             return self.first / self.second
...
>>>

Safe_Four_Calculator 클래스는 Four_Calculator 클래스에 있는 divide 메서드와 동일한 이름으로 다시 만들었습니다.
이런 식으로 부모 클래스(상속한 클래스) 에 있는 메서드를 같은 이름으로 다시 생성하는 것을 메서드 오버라이딩(Overriding, 덮어쓰기) 라고 합니다.
이런 식으로 메서드를 오버라이딩 하게 되면 부모클래스의 메서드 대신해서 오버라이딩한 메서드가 호출되게 됩니다.
이전 포스팅에서 진행했던 상속과는 차이가 있습니다.

Safe_Four_Calculator 클래스에 메서드 오버라이딩 한 divide 메서드는 나눌려고 하는 값이 숫자 0 인 경우에는 0 을 리턴하도록 수정되어 있습니다.
이제 다시 Four_Calculator 클래스 대신 Safe_Four_Calculator 클래스를 사용하여 아까 ZeroDivisionError 가 났던 예제를 수행해 보겠습니다.

Python
>>> a = Safe_Four_Calculator(4, 0)
>>> a.divide()
0

앞서 진행했던 Four_Calculator 클래스와는 다르게 ZeroDivisionError 가 발생하지 않고 우리가 의도한 대로 0 으로 나누려고 하면 0 이 리턴 되는 것을 확인 할 수 있습니다.

여기까지 파이썬 클래스의 메서드 오버라이딩 에 대해 공부해 봤습니다.
메서드 오버라이딩과 클래스의 상속은 비슷하기는 하지만
클래스의 상속같은 경우는 기존 클래스의 기능을 유지한 채 기능을 확장 하는 역할을 했다면
메서드 오버라이딩의 경우 동일한 이름의 메서드를 만들어서 기능을 덮어 씌우는 역할을 한다고 보시면 될 거 같습니다.
메서드 오버라이딩을 하게 되면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출 된다는 것도 필히 염두해 두어야 겠습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
46. 파이썬 - 메서드 오버라이딩

45. 파이썬 – 클래스의 상속

45. 파이썬 – 클래스의 상속

이전 포스팅까지 파이썬 클래스를 이용한 사칙연산 클래스를 생성해 봤습니다.
이번에는 클래스의 상속이라는 개념을 적용하여 기존에 만든 사칙연산 클래스에 기능을 추가해 제곱을 계산하는 클래스를 만들어 보도록 하겠습니다.

파이썬 클래스

사칙연산 클래스의 상속

클래스의 상속에서 상속(Inheritance)의 의미는 물려받다 라는 의미 입니다.
재산 상속 할 때의 상속과 같은 의미입니다.
클래스에서도 이 상속이라는 개념이 있습니다.
클래스를 만들고 다른 어떤 클래스의 기능을 물려 받을 수 있게 만드는 것이 바로 클래스의 상속입니다.

이제 기존에 만든 Four_Calculator 클래스에 클래스의 상속이라는 개념을 적용하여 a 와 b 의 제곱을 구하는 기능을 추가해 보도록 하겠습니다.

다음처럼 Four_Calculator 클래스를 상속하는 More_Four_Calculator 클래스를 만들어 보겠습니다.

Python
>>> class More_Four_Calculator(Four_Calculator):
...     pass
...
>>>

위 코드 처럼 클래스를 상속하려면 클래스 이름 뒤 괄호 속에 상속할 클래스 이름을 넣어주면 됩니다.

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

More_Four_Calculator 클래스는 Four_Calculator 클래스를 상속했으므로 Four_Calculator 클래스의 모든 기능을 사용할 수 있습니다.

Python
>>> a = More_Four_Calculator(4, 2)
>>> a.add()
6
>>> a.multi()
8
>>> a.subtrack()
2
>>> a.divide()
2.0
>>>

위처럼 상속받은 Four_Calculator 클래스의 모든 기능을 사용할 수 있음을 확인 할 수 있습니다.

클래스의 상속을 하는 이유

그럼 클래스의 상속을 하는 이유는 무엇일까요?
클래스의 상속은 보통 기존 클래스를 변경하지 않고 기능을 추가하거나
기존에 있던 기능을 변경하고자 할 때 주로 사용됩니다.

그럼 기존 클래스에 기능을 추가하고자 한다면 기존 클래스를 수정을 하면 되는데
왜 상속을 받아서 처리를 할까요?
만약 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황이라면
클래스의 상속을 통해서 이를 해결할 수가 있습니다.

제곱을 계산하는 클래스 More_Four_Calculator 만들기

이제 a 와 b 의 제곱을 계산하는 클래스 More_Four_Calculator 를 생성해 보겠습니다.

Python
>>> class More_Four_Calculator(Four_Calculator):
...     def squared(self):
...         result = self.first ** self.second
...         return result
...
>>>

앞서 작성했던 제곱을 계산하는 클래스 More_Four_Calculator 의 pass 문장을 제거하고 입력받은 두 수의 제곱을 구할 수 있는 squared 라는 메서드를 추가해 봤습니다.
이제 squared 메서드를 실행해 보겠습니다

Python
>>> a = More_Four_Calculator(4, 2)
>>> a.squared()
16
>>> a.add()
6

제곱을 계산하는 클래스 More_Four_Calculator 로 만든 a 객체에 4 와 2 라는 숫자를 입력한 후 squared 메서드를 호출했습니다.
결과는 숫자 4 의 2 제곱 인 16 을 리턴하는 것을 확인 할 수 있습니다.
add 라는 메서드 역시 상속받은 대로 정상 동작하는 것을 확인 할 수 있습니다.

클래스의 상속은 제곱을 계산하는 클래스 More_Four_Calculator 처럼 기존에 있는 클래스(Four_Calculator) 는 그대로 유지한 채로 클래스의 기능을 확장 시킬 때 주로 사용하게 됩니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
45. 파이썬 - 클래스의 상속

43. 파이썬 – 더하기 기능 만들기

지난 시간에 이어 파이썬의 사칙연산 클래스를 만드는 과정을 통해 클래스에 대한 공부를 하고 있습니다.
지난 포스팅에서는 Four_Calculator 라는 클래스를 만들어 보는 과정까진 진행을 했는데
이번 포스팅에서는 Four_Calculator 클래스에 더하기 기능을 만들어 보는 과정을 공부해 보겠습니다.

파이썬 클래스

사칙연산 클래스 만들어보기 #4

더하기 기능 만들기

이전 Four_Calculator 클래스에서 testnumber 라는 메서드를 생성을 하고
first 와 second 라는 메서드의 매개변수의 설정까지 진행을 했습니다.

Python
>>> class Four_Calculator:
...     def testnumber(self, first, second):
...         self.first = first
...         self.second = second
...
>>>

이제 2개의 숫자를 더하는 기능을 Four_Calculator 클래스에 추가해 보도록 하겠습니다.
아래 코드가 가능하도록 더하기 기능을 가지고 있는 클래스를 만들어야 하겠습니다.

Python
>>> a = Four_Calculator()
>>> a.testnumber(4, 2)
>>> print(a.add())
6

다음처럼 코드를 만들어 보겠습니다.

Python
>>> class Four_Calculator:
...     def testnumber(self, first, second):
...         self.first = first
...         self.second = second
...     def add(self):
...         result = self.first + self.second
...         return result
...
>>>

add 라는 메서드를 새로 추가했습니다.
이제 클래스를 사용해 보도록 하겠습니다

Python
>>> a = Four_Calculator()
>>> a.testnumber(4, 2)

위 코드처럼 클래스 Four_Calculator 와 클래스에 속한 메서드 testnumber 를 호출했다면
이전 포스팅에서 보았듯이 a 객체의 first, second 객체변수에는 각각 숫자 4 와 2 가 저장 될 것입니다.
여기서 add 메서드를 호출을 해 보겠습니다

Python
>>> print(a.add())
6

위 처럼 a.add() 라고 호출하게 되면 add 메서드가 호출되면서 4 와 2 를 더한 값 6 이 출력이 됩니다.
아래 코드를 보면서 어떤 과정을 거쳐 6이 출력이 되는지 살펴 보겠습니다.

Python
def add(self):
    result = self.first + self.second
    return result

위에서 보시다시피 add 메서드의 매개변수는 self 이고 리턴값은 result 입니다.
아래는 리턴값인 result 의 계산 부분입니다.

Python
result = self.first + self.second

이전 코드에서 보신 것 처럼 a.add() 처럼 a 객체에 의해 add 메서드가 실행이 되면 add 메서드의 self 에는 a 라는 객체가 입력이 되게 됩니다.
이 내용은 아래와 같습니다.

Python
result = a.first + a.second

위의 내용은 a.add() 메서드가 호출되기 전에 a.testnumber(4, 2) 가 먼저 호출되면서 a.first = 4, a.second = 2 라고 먼저 설정되었기 때문입니다.
따라서 아래와 같은 내용이라고 보시면 됩니다.

Python
result = 4 + 2

결국 a.add() 를 호출하게 되면 4 와 2 를 더한 값 6 을 리턴을 하게 됩니다.

Python
>>> print(a.add())
6

여기까지 파이썬에서 클래스를 이용해 사칙연산을 위한 클래스를 만들고 더하기 기능까지 만드는 과정을 진행 해봤습니다.
다음 포스팅에 이어서 사칙연산의 나머지 기능인 곱하기, 빼기, 나누기 기능을 추가로 만들어 보도록 하겠습니다.

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
43. 파이썬 - 더하기 기능 만들기

40. 파이썬 – 클래스와 객체(class and object)

40. 파이썬 – 클래스와 객체(class and object)

파이썬 클래스

클래스와 객체(class and object)

아래는 클래스를 가장 잘 설명해 주는 그림이라고 합니다.

40. 파이썬 - 클래스와 객체

위 그림은 과자를 만드는 과자 틀과 그 과자 틀을 사용해 만든 과자 들입니다.

  • 클래스(class) -> 과자틀
  • 객체(object) -> 과자틀로 만들어 낸 과자들

클래스는 과자틀과 비슷하다고 보시면 됩니다.
똑같은 무언가를 계속해서 만들어 내는 설계 도면이라 보시면 되고(과자틀)
객체는 클래스로 만들어낸 피조물을 의미합니다(과자틀로 만들어 낸 과자들)

클래스(class)의 중요한 특징

클래스의 중요한 특징은 객체마다 고유한 성격을 가진다는 것입니다.
과자틀로 만들어 낸 과자들에 구멍을 내거나 조금 먹는다고 해서 다른 과자들에게 영향을 끼치지 않는 것과 마찬가지로 같은 클래스로 만들어진 객체라고 하더라도 서로 영향을 끼치지 않습니다.

클래스의 간단한 예

아래 코드는 클래스의 가장 간단한 예입니다.

Python
>>> class Snaks:
>>>     pass

위 클래스는 아무런 기능도 하지 않습니다.
그렇다고 하더라도 이런 무기능 클래스도 객체를 생성하는 기능은 가지고 있습니다.
아래는 Snaks 라는 클래스의 객체를 만드는 방법입니다.

Python
>>> a = Snaks()
>>> b = Snaks()

Snaks() 의 결과값을 리턴받은 a 와 b 가 바로 객체(object)입니다.
함수를 사용해서 결과값을 리턴받는 경우와 비슷합니다.

객체와 인스턴스의 차이

클래스로 만든 객체를 인스턴스 라고도 합니다.
객체와 인스턴스에는 차이가 있습니다.
a = Snaks() 라고 만든다면 a 는 객체가 됩니다.
그리고 a 객체는 Snaks 의 인스턴스가 됩니다.
즉 인스턴스라는 말은 어떤 개체(a)가 어떤 클래스(Snaks) 의 객체인지를 관계 위주로 설명할 때 사용됩니다.
a 는 인스턴스 보다 a 는 객체라고 표현하며
a 는 Snaks 의 객체 보다 a 는 Snaks 의 인스턴스 라고 표현합니다.

사칙연산 클래스 만들어 보기 #1

이제 클래스를 직접 만들어 보면 공부를 해 보겠습니다.
먼저 사칙연산을 수행해 주는 클래스를 만들어 보겠습니다.
사칙연산이 더하기, 빼기, 곱하기, 나누기 인건 다들 아시겠죠?

클래스를 어떻게 만들지 먼저 구상

클래스를 무조건 만들기 보다는 클래스로 만들 객체를 중점으로 어떻게 동작시킬 컷인지 먼저 구상을 하고 난 뒤에 이렇게 구상한 것들을 하나 하나 해결해 나가면서 완성하는게 좋습니다.
사칙연산을 가능하게 하는 Four_Calculator 가 동작하는 과정을 상기해 봅니다

우선 a = Four_Calculator() 로 a 라는 객체를 만들어 봅니다

Python
>>> a = Four_Calculator()

그 뒤로 a.testnumber(4, 2) 처럼 입력을 하고 입력된 숫자 4와 2를 a 에 지정해 줍니다

Python
>>> a.testnumber(4, 2)

다음 a.add() 라고 수행을 하면 입력된 두 수 4와 2를 더한 결과 4 + 2 를 리턴을 합니다

Python
>>> print(a.add())
6

만일 a.mul() 을 수행을 하면 입력된 두 수 4와 2를 곱한 결과 4 * 2 를 리턴을 합니다

Python
>>> print(a.mul())
8

그리고 또 a.sub() 를 만나면 입력된 두 수 4와 2를 뺀 결과인 4 – 2 를 리턴을 합니다.

Python
>>> print(a.sub())
2

마지막으로 a.div() 를 만나게 되면 입력된 두 수 4와 2에서 나누기를 한 결과 4 / 2 를 리턴을 합니다

Python
>>> print(a.div())
2

이런 동작들을 하게 만드는 것이 이제부터 만들 Four_Calculator 입니다

이번 포스팅에서는 파이썬 클래스와 객체에 대해 클래스의 특징과 객체와 인스턴스의 차이에 대해 알아봤습니다.
다음 포스팅에 사칙연산을 하는 클래스 Four_Calculator 에 대해 이어서 공부해 보겠습니다

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
40. 파이썬 - 클래스와 객체(class and object)

39. 파이썬 클래스의 정의(class)

39. 파이썬 클래스의 정의(class)

이제 파이썬 클래스와 모듈, 예외처리, 라이브러리 등 핵심적인 내용들에 대해 공부를 진행하겠습니다.
먼저 클래스의 정의와 클래스가 필요한 이유에 대해 알아보겠습니다.

파이썬 클래스

저와 같은 파이썬 초보들에게 파이썬 클래스(class)는 아직까진 하나의 벽이기도 합니다.
클래스가 필요한 이유와 클래스의 정의 등 기초부터 공부해 보겠습니다.

클래스가 필요한 이유

프로그래머들이 가장 많이 사용하는 프로그래밍 언어 중 하나는 C 언어 일겁니다.
그런 C언어에는 클래스가 없습니다.
즉 클래스가 없어도 프로그램을 만드는데 지장은 없다는 뜻이기도 할겁니다.
파이썬으로 만들어진 프로그램을 보더라도 클래스가 없는 프로그램도 상당히 많을 겁니다.
이처럼 클래스는 함수, 자료형 같이 필수 요소는 아니라는 겁니다.

그렇다 하더라도 클래스(class)를 알고 클래스를 적절하게 사용을 한다면 프로그래머가 얻는 이익은 상당할 것입니다.

클래스를 사용하기 전 예제

계산기를 예를 들어보겠습니다. 계산기에 숫자를 입력하고 덧셈이나 뺄셈 등에 따라 기호를 입력한 후 숫자를 하나 더하면 결과를 보여줍니다. 그 상태에서 한번 더 기호를 입력한 후 숫자를 입력하면 기존에 나왔던 결과값에 나중에 입력한 기호와 숫자를 더해 최종 결과를 보여 주게 됩니다.
이렇게 계산기는 결과값들을 메모리 어딘가에 저장하고 있어야 합니다.

이런 내용을 예전에 공부한 함수로 구현해 보겠습니다.
계산기의 더하기 기능을 구현해 봅니다.

Python
result_sum = 0

def add(test_num):
    global result_sum
    result_sum += test_num
    return result_sum

print(add(5))
print(add(7))

위 코드에서 생성한 add 함수는 값을 입력 받아 이전에 값에 값을 더해 리턴 해주는 함수 입니다.
이전에 입력된 값을 유지하기 위해서 result_sum 변수를 전역변수(global) 로 설정 했습니다.
결과는 아래와 같습니다.

Python
5
12

여기서 만약에 하나의 프로그램에서 계산기가 2대가 필요하다면 어떻게 해야 할까요?
각각의 계산기는 각각의 결과값을 유지를 해야합니다.
그래서 add 함수 하나만 가지고는 결과값을 유지 할 수가 없습니다.
이런 상황을 해결하기 위해서는 함수를 따로 만들어야 하는 경우가 생깁니다.

Python
result_sum_1 = 0
result_sum_2 = 0

def add1(test_num):
    global result_sum_1
    result_sum_1 += test_num
    return result_sum_1

def add2(test_num):
    global result_sum_2
    result_sum_2 += test_num
    return result_sum_2

print(add1(5))
print(add1(7))
print(add2(5))
print(add2(8))

위 코드를 보시면 add1 함수와 add2 함수는 똑같은 함수입니다.
그런데 각 함수에서 결과값을 유지하기 위해서 result_sum_1 과 result_sum_2 가 각각 전역 변수로 필요하게 되었습니다.
결과값은 아래와 같습니다.

Python
5
12
5
13

1번 계산기 add1 는 2번 계산기 add2 의 결과에 영향을 끼치지 않는 것을 확인 할 수 있습니다.
그런데 이런 계산기가 더 많이 필요하다면 어떻게 될까요?
그때 마다 전역 변수와 함수를 무한정 추가하기는 어려울 것입니다.
거기에 더하기 뿐만 아니라 곱하기, 빼기, 나누기 등을 추가해야 한다면 훨씬 더 복잡해지겠죠

클래스를 사용한 후의 예제

이런 경우에 클래스가 필요한 겁니다.
아직 클래스에 대해 정확히는 모르지만
아래 코드를 보시면서 클래스에 대한 개념만 아~ 이런 식이구나 하는 정도만 아시면 될 듯 합니다.

Python
class Add_Calculator:
    def __init__(self):
        self.result_sum = 0
    
    def add(self, test_num):
        self.result_sum += test_num
        return self.result_sum

cal1 = Add_Calculator()
cal2 = Add_Calculator()

print(cal1.add(5))
print(cal1.add(7))
print(cal2.add(5))
print(cal2.add(8))

위 코드를 실행해 보면 함수 2개를 사용했을 때와 동일하게 결과가 나오는 걸 확인 할 수 있습니다.

Python
5
12
5
13

Add_Calculator 라는 클래스로 만든 계산기 cal1, cal2 를 파이썬에서는 객체라고 합니다.
그리고 이 객체는 각각의 역할을 수행 하게 됩니다.
계산기 cal1, cal2 의 결과값 역시 독립적으로 값을 유지하게 됩니다.
이렇게 클래스를 사용하게 되면 계산기 대수가 많이 늘어난다고 하더라도 객체를 생성해 주기만 하면 되기 때문에 함수를 무한정 늘리는 것 보다 매우 간단해 지게 됩니다.
Add_Calculator 클래스에 만약 빼기 기능을 추가하고 싶다면 Add_Calculator 클래스에 빼기 기능 함수를 추가만 하면 됩니다.

Python
class Add_Calculator:
    def __init__(self):
        self.result_sum = 0
    
    def add(self, test_num):
        self.result_sum += test_num
        return self.result_sum

    def sub(self, test_num):
        self.result_sum -= test_num
        return self.result_sum

cal1 = Add_Calculator()
cal2 = Add_Calculator()

print(cal1.add(5))
print(cal1.add(7))
print(cal2.sub(5))
print(cal2.sub(8))

위 코드에는 sub 라는 빼기 기능을 더한 함수입니다.
아래 결과를 보시면 빼기 기능을 수행한 값이 나온 걸 볼수 있습니다.

Python
5
12
-5
-13

클래스가 필요한 이유는 이것만도 아니고 이점도 이것만이 아닙니다.
그래도 위 예를 하나만 보더라도 클래스가 필요한 이유는 분명해질 것 같습니다.

이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.

39. 파이썬 클래스의 정의(class)