본문으로 바로가기

파이썬 클래스 이해

category 카테고리 없음 2020. 6. 1. 15:05
반응형

클래스를 만드는 이유 

리모컨을 예로 들어보자.

리모컨에는 볼륨 올리기, 볼륨 내리기, 채널 바꾸기 등등 여러가지 기능이 있다. 

그러나 이 리모컨 한개가 아닌 여러개의 리모컨이 있다고 가정할때

그 기능을 계속만들것인가?

이렇게 볼륨을 올리는 여러개 만들지 않기 위해서

여러 기능을 한대 묶을수 있는것이 클래스이다.

밑에 예제는 클래스를 사용하지 않는 볼륨을 올리는 기능이다.

# 클래스로 만들지 않았을시
# 여러개의 기능을 계속 만들게 된다.
 
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('전원끄기')
 
 
= 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
 
= Remote()
print(a.power)
print(a.volume)
 
# >>> 0 
# >>> 0
 
반응형