반응형
클래스를 만드는 이유
리모컨을 예로 들어보자.
리모컨에는 볼륨 올리기, 볼륨 내리기, 채널 바꾸기 등등 여러가지 기능이 있다.
그러나 이 리모컨 한개가 아닌 여러개의 리모컨이 있다고 가정할때
그 기능을 계속만들것인가?
이렇게 볼륨을 올리는 여러개 만들지 않기 위해서
여러 기능을 한대 묶을수 있는것이 클래스이다.
밑에 예제는 클래스를 사용하지 않는 볼륨을 올리는 기능이다.
# 클래스로 만들지 않았을시
# 여러개의 기능을 계속 만들게 된다.
sound1 = 0
sound2 = 0
def volumeUp1(vol):
global sound1
sound1 += vol
return sound1
print(volumeUp1(1))
print(volumeUp1(1))
print(volumeUp1(1))
# >>> 1
# >>> 2
# >>> 3
def volumeUp2(vol):
global sound2
sound2 += vol
return sound2
print(volumeUp2(1))
print(volumeUp2(1))
print(volumeUp2(1))
# >>> 1
# >>> 2
# >>> 3
|
클래스와 객체
클래스란 무엇인가를 계속만들어 낼수있는 설계 도면(리모컨 틀) 이고,
객체란 클래스를 이용해 만든 물품(리모컨) 이라 생각하면 된다.
리모컨 틀 - 클래스(class)
리모컨 틀을 이용해 만든 리모컨 - 객체(object)
# 클래스
class Remote:
pass
# a 객체
a = Remote()
객체와 인스턴스의 차이
클래스로 만든 객체를 인스턴라고도 한다.
a 는 객체 라는 표현이 어울리며
a 는 Remote 의 객체 라는 표현보다 'a는 Remote의 인스턴스' 라는 표현이 어울린다.
a = Remote()
b = Remote()
클래스를 만들어보자
class Remote:
# 생성자
def __init__(self):
self.volume = 0
self.power = 0
# 볼륨 올리기
def volumeKey(self, flag, num):
if flag == 'up':
self.volume += num
print(self.volume)
else:
if self.volume == 0 : return
self.volume -= num
print(self.volume)
# 전원 켜기
def powerKey(self):
if self.power == 0:
self.power = 1
print('전원켜기')
else:
self.power = 0
print('전원끄기')
a = Remote()
a.volumeKey('up', 1)
a.powerKey()
|
self 매개변수는 뭐지?
위에 예제를 보아도 self 라는 부분이 보일것이다.
volumeKey 부분만 보아도 인수로 넘긴값이 'up', 1 이다.
아래의 그림을 보면 이해가 될거다.
self 는 객체를 가리키므로 self.volume = a.volume 같다.
self.volume = a.volume
생성자
생성자란 일종의 객체가 생성되기 전에 먼저 수행하는 초기 설정값을 정해 줄수 있다.
아래는 volume 과 power 를 0 으로 설정한다.
class Remote:
# 생성자
def __init__(self):
self.volume = 0
self.power = 0
a = Remote()
print(a.power)
print(a.volume)
# >>> 0
# >>> 0
|
반응형