01. 파이썬 클래스 (Class)란?
클래스는 어떤 것이고 왜 필요할까?
01.1. 클래스의 개요
- 클래스는 객체의 구조와 행동을 정의한다.
- 객체의 클래스는 초기화를 통해 제어한다.
- 클래스는 복잡한 문제를 다루기 쉽게 한다.
💡메모
객체란, 어떠한 속성의 값, 행동을 가지는 데이터를 일컫습니다. 파이썬에서 숫자, 문자, 함수 등등 모든 데이터들은 여러 속성과 행동을 가지고 있고 각각이 객체라 볼 수 있습니다.
예시)
세탁기라는 객체는 "빨래를 한다", "빨래 정지한다", "가로 100cm" 등의 속성과 행동으로 표현할 수 있습니다. 이렇든 정의된 데이터가 속성과 행동을 가진다면 객체라고 말할 수 있겠네요!
클래스는 위와 같은 특성을 가지는데요, 왜 그러한지에 대해 차근차근 보겠습니다.
02. 클래스는 복잡한 문제를 다루기 쉽게 한다?
아래의 예시를 통해 이를 확인 할 수 있습니다.
클래스를 통해 복잡하게 반복해야하는 행동을 쉽게 정의하여 해결 할 수 있습니다.
곱셈 계산 기능을 가지는 계산 프로그램 multiply가 있습니다.
이 계산 프로그램은 현재 까지 입력된 모든 숫자들의 곱을 구해야합니다.
예시)
result = 1
def multiply(num):
global result
result *= num
return result
print(multiply(3))
print(multiply(4))
print(multiply(6))
[out]
3
12
72
그런데, 어떠한 상황에서 multiply의 기능을 하는 계산 프로그램이 두개가 필요하다고 생각해봅시다.
예를들어, 1 x 4 x 10 라는 연산과 20 x 4 라는 연산을 한번에 진행해야 할 때, 이러한 상황을 고려해보면 위 와같은 multiply 프로그램을 multiply_1, multiply_2와 같이 두개를 만들어야 합니다.
예시)
result_1 = 1
result_2 = 1
def multiply_1(num):
global result_1
result_1 *= num
return result_1
def multiply_2(num):
global result_2
result_2 *= num
return result_2
print(multiply_1(1))
print(multiply_1(4))
print(multiply_1(10))
print(multiply_2(20))
print(multiply_2(4))
[out]
1
4
40
20
80
좋습니다. 2개까지는 충분히 만들 수 있을거 같습니다. 하지만, 5개, 20개 혹은 그이상이 필요할 때는 어떻게 해야할까요, 하나하나 직접 구현 하는 것은 굉장히 복잡하고, 비효율적입니다.
여기서! 클래스는 이러한 상황을 매우 간단하게 해결합니다!
예시)
#Multiply 클래스 생성
class Multiply:
def __init__(self):
self.result = 1
def multiply(self, num):
self.result *= num
return self.result
# 클래스를 통한 계산기 1
multiply_1 = Multiply()
print("계산기 1 결과")
print(multiply_1.multiply(2))
print(multiply_1.multiply(5))
# 클래스를 통한 계산기 2
multiply_2 = Multiply()
print("계산기 2 결과")
print(multiply_2.multiply(10))
print(multiply_2.multiply(9))
위와 같이 Multiply라는 클래스를 생성하여, multiply_1, multiply_2의 인스턴스를 형성하여 사용할 수 있습니다!
많이 비유되는 거처럼, 클래스는 마치 틀, 공장과 같은 역할을 해서 자신의 형태 결과물인 인스턴스를 만들어냅니다!
3. 객체의 클래스는 초기화를 통해 제어?
클래스를 생성하고 생성된 클래스를 인스턴스로 형성하여 반복적으로 기능을 할 수 있는 것이 클래스의 특징인데요, 여기서 항상 들어가는 "__init__()" 이라는 함수가 있습니다.
이는 생성자라하며, 인스턴스가 생성될때 항상 실행되는 것입니다.
즉, 위의 Multiply라는 클래스를 통해, Multiply_1, Multiply_2 라는 두개의 인스턴스가 생성되었는데요, 생성할때마다 __init__() 함수가 실행되면서 모두 self.result = 1이라는 문장을 실행합니다.
즉, result라는 변수를 인스턴스 형성때마다 초기화가 됩니다. 이러한 장점은 많은 변수를 추가할 필요없게 합니다.
💡메모
클래스에는 생성자와 소멸자라는 개념이 있습니다.
생성자는 위에서 설명한 "__init__()"에 해당되며, 이 생성자를 통해서 객체가 생성될때 어떤 변수의 값을 세팅하는 등 여러가지 작업을 할 수 있습니다.
반면에, "__del__()" 라는 소멸자는 리소스 해제등의 종료 작업을 하기위해 사용됩니다.
#Multiply 클래스 생성
class Multiply:
def __init__(self):
self.result = 1
def multiply(self, num):
self.result *= num
return self.result
#클래스가 인스턴스로 형성될 때마다 __init__() 함수는 실행된다.
#즉 result 인스턴스 형성 마다 개별적으로 초기화
4. 클래스는 객체의 구조와 행동을 정의?
이 특징은 위를 잘 읽으셨다면 충분히 이해 하실 겁니다.
즉, 어떠한 객체에 대해 복잡한 구조를 만들 필요 없이 클래스를 통해서 객체에 대한 행동과 속성을 구조화 시켜 간단하게 해결 할 수 있습니다!!