Study/Python
[Python] 클래스
taecongs
2023. 9. 12. 12:01

Python 공부하기 ✨
테스트 코드 실행 : Python Tutor
파이썬에서 클래스란?
- 쉽게 말해 객체(instance)를 만들어내기 위한 '틀'이다. '객체지향 프로그래밍'의 핵심이기도 하다.
- 주로 붕어빵에 비유하는데, 붕어빵을 객체라고 한다면 클래스는 붕어빵 틀에 해당한다.
- 즉, 동일한 무언가를 계속해서 만들어낼 수 있는 형태이며 만들어낸 객체들은 모두 고유한 성격을 가진다.
- 단, 객체별로 갖는 기능은 모두 동일하다.
(1) 클래스가 필요한 이유
- 만약 한 프로그램에서 2대의 계산기가 필요한 상황이라고 가정하면, 계산기는 각각의 결과값을 유지해야 하기 때문에 add1, add2 함수를 각각 따로 만들어야 한다.
// (1) 클래스를 사용하지 않는 경우
result1 = 0
result2 = 0
def add1(num): # 계산기1
global result1
result1 += num
return result1
def add2(num): # 계산기2
global result2
result2 += num
return result2
print(add1(3)) # 3
print(add1(4)) # 7
print(add2(3)) # 3
print(add2(7)) # 10
- 이러한 문제를 해결하기 위해 아래와 같이 클래스를 사용한다.
// (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)) # 3
print(cal1.add(4)) # 7
print(cal2.add(3)) # 3
print(cal2.add(7)) # 10
(2) 객체의 인스턴스(instance)
- 객체는 클래스에서 선언된 틀 그대로 만들어진 실체이며, 자신의 고유한 상태와 이름, 행동을 갖는다.
- 보통, 객체와 인스턴스를 크게 구분짓지 않고 사용하기도 하지만 약간의 차이점이 있다.
- 인스턴스는 '클래스'로 만든 객체를 말한다.
(3) 클래스에서의 self
// (3) 클래스를 사용한 경우
def setdata(self, first, second): # 메서드의 매개변수
self.first = first # 메서드의 수행문
self.second = second # 메서드의 수행문
a.setdata(4, 2)

- self는 단어 그대로 자기자신이라 생각하면 된다.
- 쉽게 말해 객체를 호출할 때 호출한 객체 자신이 전달된다.
(4) 클래스에서의 __init__
// (4) 클래스를 사용한 경우
class FourCal:
def __init__(self, first, second):
self.first = first
self.second = second
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
a = FourCal(4, 2)
print(a.add())
print(a.mul())
print(a.sub())
print(a.div())
- 인스턴스가 생성될 때 항상 실행되는 것이다.
- __init__ 메서드는 setdata 메서드와 이름만 다르고 모든 게 동일하다.
- 메서드 이름을 __init__로 했기 때문에 생성자로 인식되어 객체가 생성되는 시점에 자동으로 호출된다는 차이가 있다.
- __init__ 메서드가 호출되면 setdata 메서드를 호출했을 때와 마찬가지로 first와 second라는 객체변수가 생성된다.
(5) 메서드 오버라이딩
// (5) 메서드 오버라이딩을 사용한 경우
class FourCal:
def __init__(self, first, second):
self.first = first
self.second = second
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
a = FourCal(4, 2)
print(a.add())
print(a.mul())
print(a.sub())
print(a.div())
class MoreFourCal(FourCal):
def pow(self):
result = self.first ** self.second
return result
a = MoreFourCal(6, 4)
print(a.pow())
class SafeFourCal(FourCal):
def div(self):
if self.second == 0:
return 0
else:
return self.first / self.second
a = SafeFourCal(4, 0)
print(a.div())
- 부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것을 메서드 오버라이딩(method overriding)이라고 한다.