클래스가 뭐지??
이렇게 이해해보자.
반복되는 변수 & 메서드(함수)를 미리 정해놓은 틀(설계도)
이게 무슨 말인지 아래를 보자.
전역변수를(global) 불러오면 이전에 계산한 결괏값을 유지하면서 사용할 수 있다.
그렇다면 계산기 2개를 돌리려면 어떻게 해야 하는지 보자.
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))
print(add1(4))
print(add2(3))
print(add2(7))
계산기 1의 결과값이 계산기 2에 아무런 영향을 끼치지 않는다.
어? 그럼 계산기가 점점 많아지면 어떻게 하지??!
이럴 때 클래스가 필요하다. 하나의 클래스로 묶어서 만들 수 있다. 코드만 다를 뿐 결과값은 똑같다.
이제 클래스가 좀 이해가 된다.
객체가 '붕어빵'이라면 클래스는 '붕어빵 틀'이다!!
객체가 '건물'이라면 클래스는 '설계 도면'이다!!
사칙 연산 클래스 만들기
클래스를 만들 때는 꼭 대문자로 시작해야 하고 ':' 콜론을 붙여줘야 한다.
클래스 안에 구현된 함수는 다른 말로 메서드(method)라고 부른다.
>>> class FourCal:
... def setdata(self, first, second):
... self.first = first
... self.second = second
>>> a = FourCal()
>>> a.setdata(4, 2)
self 는 객체 a를 의미한다.
a안에 무언가 값을 저장하기 위해서는 self.first 라고 적어야 한다.
self를 명시적으로 적는 것은 파이썬만의 특징이다. JAVA는 이렇게 하지 않는다.
객체를 이용해 클래스의 메서드를 호출하려면 도트(.)를 사용하면 된다.
print(a.first)
4
b = Fourcal()
b.setdata(3,7)
print(b.first)
3
객체의 객체변수는 다른 객체의 객체변수에 상관없이 독립적인 값을 유지한다.
클래스에서는 이 부분을 이해하는 것이 가장 중요하다.
더하기 기능 만들기
def add(self):
result = self.first + self.second
return result
>>> a.add()
6
곱하기, 빼기, 나누기 기능 만들기
a.mul()
a.sub()
a.div()
생성자
__init__
객체가 생성될 떄 자동으로 호출되는 메서드다.
setdata와 이름만 다르고 모든 게 동일하다.
항상 무조건 처음에 실행되는 것이다.
def __init__(self, first, second):
self.first = first
self.second = second
클래스의 상속
MoreFourCal 클래스는 상속을 받아서 이용할 수 있게 하는 것이다.
>>> class MoreFourCal(FourCal):
... pass
pass 만 써도 모든 기능을 상속을 받는다.
a = MoreFourCal(4,2) 를 넣으면
print(a.add()) = 6 이다.
>>> class MoreFourCal(FourCal):
... def pow(self):
... result = self.first ** self.second
... return result
>>> a = MoreFourCal(4, 2)
>>> a.pow()
16
메서드 오버라이딩
자식이 부모를 뒤엎고 새로운 것을 만들고 싶을 때!
SafeFourCal 을 쓰면 된다.
부모와 자녀가 동일한 함수를 가지고 있으면 자녀가 이긴다.
>>> class SafeFourCal(FourCal):
... def div(self):
... if self.second == 0: # 나누는 값이 0인 경우 0을 리턴하도록 수정
... return 0
... else:
... return self.first / self.second
클래스변수
객체변수가 아니라 클래스변수가 있다.
클래스 안에 변수를 선언하여 생성한다.
Studying Date : 23.12.03
Studying Source : https://www.youtube.com/watch?v=hY-MlUJc01E, https://wikidocs.net/28
'Programming > Python' 카테고리의 다른 글
점프 투 파이썬 (9) 실습 (1) | 2023.12.05 |
---|---|
점프 투 파이썬 (8) 모듈, 패키지, 예외 처리, 라이브러리 (1) | 2023.12.04 |
점프 투 파이썬 (6) 입출력 (2) | 2023.12.03 |
점프 투 파이썬 (5) 함수 (1) | 2023.12.03 |
점프 투 파이썬 (4) 제어문 If - While - For (2) | 2023.12.02 |