이제 파이썬 클래스와 모듈, 예외처리, 라이브러리 등 핵심적인 내용들에 대해 공부를 진행하겠습니다.
먼저 클래스의 정의와 클래스가 필요한 이유에 대해 알아보겠습니다.
파이썬 클래스
저와 같은 파이썬 초보들에게 파이썬 클래스(class)는 아직까진 하나의 벽이기도 합니다.
클래스가 필요한 이유와 클래스의 정의 등 기초부터 공부해 보겠습니다.
클래스가 필요한 이유
프로그래머들이 가장 많이 사용하는 프로그래밍 언어 중 하나는 C 언어 일겁니다.
그런 C언어에는 클래스가 없습니다.
즉 클래스가 없어도 프로그램을 만드는데 지장은 없다는 뜻이기도 할겁니다.
파이썬으로 만들어진 프로그램을 보더라도 클래스가 없는 프로그램도 상당히 많을 겁니다.
이처럼 클래스는 함수, 자료형 같이 필수 요소는 아니라는 겁니다.
그렇다 하더라도 클래스(class)를 알고 클래스를 적절하게 사용을 한다면 프로그래머가 얻는 이익은 상당할 것입니다.
클래스를 사용하기 전 예제
계산기를 예를 들어보겠습니다. 계산기에 숫자를 입력하고 덧셈이나 뺄셈 등에 따라 기호를 입력한 후 숫자를 하나 더하면 결과를 보여줍니다. 그 상태에서 한번 더 기호를 입력한 후 숫자를 입력하면 기존에 나왔던 결과값에 나중에 입력한 기호와 숫자를 더해 최종 결과를 보여 주게 됩니다.
이렇게 계산기는 결과값들을 메모리 어딘가에 저장하고 있어야 합니다.
이런 내용을 예전에 공부한 함수로 구현해 보겠습니다.
계산기의 더하기 기능을 구현해 봅니다.
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) 로 설정 했습니다.
결과는 아래와 같습니다.
5
12
여기서 만약에 하나의 프로그램에서 계산기가 2대가 필요하다면 어떻게 해야 할까요?
각각의 계산기는 각각의 결과값을 유지를 해야합니다.
그래서 add 함수 하나만 가지고는 결과값을 유지 할 수가 없습니다.
이런 상황을 해결하기 위해서는 함수를 따로 만들어야 하는 경우가 생깁니다.
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 가 각각 전역 변수로 필요하게 되었습니다.
결과값은 아래와 같습니다.
5
12
5
13
1번 계산기 add1 는 2번 계산기 add2 의 결과에 영향을 끼치지 않는 것을 확인 할 수 있습니다.
그런데 이런 계산기가 더 많이 필요하다면 어떻게 될까요?
그때 마다 전역 변수와 함수를 무한정 추가하기는 어려울 것입니다.
거기에 더하기 뿐만 아니라 곱하기, 빼기, 나누기 등을 추가해야 한다면 훨씬 더 복잡해지겠죠
클래스를 사용한 후의 예제
이런 경우에 클래스가 필요한 겁니다.
아직 클래스에 대해 정확히는 모르지만
아래 코드를 보시면서 클래스에 대한 개념만 아~ 이런 식이구나 하는 정도만 아시면 될 듯 합니다.
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개를 사용했을 때와 동일하게 결과가 나오는 걸 확인 할 수 있습니다.
5
12
5
13
Add_Calculator 라는 클래스로 만든 계산기 cal1, cal2 를 파이썬에서는 객체라고 합니다.
그리고 이 객체는 각각의 역할을 수행 하게 됩니다.
계산기 cal1, cal2 의 결과값 역시 독립적으로 값을 유지하게 됩니다.
이렇게 클래스를 사용하게 되면 계산기 대수가 많이 늘어난다고 하더라도 객체를 생성해 주기만 하면 되기 때문에 함수를 무한정 늘리는 것 보다 매우 간단해 지게 됩니다.
Add_Calculator 클래스에 만약 빼기 기능을 추가하고 싶다면 Add_Calculator 클래스에 빼기 기능 함수를 추가만 하면 됩니다.
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 라는 빼기 기능을 더한 함수입니다.
아래 결과를 보시면 빼기 기능을 수행한 값이 나온 걸 볼수 있습니다.
5
12
-5
-13
클래스가 필요한 이유는 이것만도 아니고 이점도 이것만이 아닙니다.
그래도 위 예를 하나만 보더라도 클래스가 필요한 이유는 분명해질 것 같습니다.
이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
