반응형
    
    
    
  
클래스를 만드는 이유
리모컨을 예로 들어보자.
리모컨에는 볼륨 올리기, 볼륨 내리기, 채널 바꾸기 등등 여러가지 기능이 있다.
그러나 이 리모컨 한개가 아닌 여러개의 리모컨이 있다고 가정할때
그 기능을 계속만들것인가?
이렇게 볼륨을 올리는 여러개 만들지 않기 위해서
여러 기능을 한대 묶을수 있는것이 클래스이다.
밑에 예제는 클래스를 사용하지 않는 볼륨을 올리는 기능이다.
| 
 # 클래스로 만들지 않았을시 
# 여러개의 기능을 계속 만들게 된다. 
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 
 | 
반응형