티스토리 뷰

Backend-dev/python

파이썬의 클래스(class)

RunningWater 2018. 4. 9. 00:14

클래스는 무엇일까요? 왜 사용할까요?

객체지향 프로그래밍(object-oriented programming)이란 말을 많이 들어보셨을 겁니다. 간단히 하자면 객체를 중심으로 프로그래밍을 하는 것입니다. 그렇다면 객체가 무엇인 지 또 물어보실 수도 있겠죠? 객체는 그냥 물체, 또는 물체를 바라보는 우리의 관점이라고도 할 수 있습니다. 자동차라는 물체가 있다고 생각해보세요.

# 자동차
# 색: 검은색
# 제조사: bmw
# 좌석: 2개


자동차에 대한 정보를 한 곳에 모아두면 아주 편하겠죠? "이 자동차의 색은 검은색이고, bmw의 차구나" 하고 그 차에 대한 정보를 바로 알아보면서 활용할 수 있도록 만들어줍니다. 여기서 자동차가 객체라고 할 수 있습니다.

객체를 만드는 방법

객체를 만드는 방법은 무엇일까요? class(클래스)를 이용하면 됩니다.

class Car:
    def infor(self, color, madeby, seats):
        self.color = color
        self.madeby = madeby
        self.seats = seats

car1 = Car()


class와 class명을 적고 밑부분에 관련 변수와 함수(클래스 안에서는 변수는 프로퍼티, 함수는 메소드라고 표현합니다.)를 정의해주면 됩니다. 저는 Car라는 클래스에 색깔과 제조사, 시트수를 설정할 수 있는 infor함수를 만들어보았습니다. 객체를 실행할 때는 괄호를 붙이시고 변수에 할당해주시면 됩니다. 그렇다면 self는 무엇일까요? self는 "자신"이라는 뜻처럼 클래스가 할당되는 변수를 뜻합니다. 우리는 클래스에 색, 제조사, 좌석수를 설정하는 함수를 정의했지만 사용은 할당된 변수에서 활용하려고 합니다. 두 개를 이어주는 것이 self입니다.


붕어빵 틀

클래스는 붕어빵 틀과 같습니다. 틀만 이용하면 똑같은 모양의 붕어빵을 계속 생산할 수 있죠. 하지만 붕어빵의 맛도 같을까요? 팥을 넣냐, 블루베리나 크림을 넣냐에 따라 맛은 다르겠죠? 흰 색의 4인석 벤츠 차량을 새로 만든다고 한다면 우리가 만든 클래스에서 값만 다르게 넣으면 되는 것입니다.


car1 = Car()
car1.infor("black", "bmw", 2)
car2 = Car()
car2.infor("white", "benz", 4)


car1과 car2를 만들고 infor()함수를 통해 색, 제조사, 시트수를 설정했습니다. Car()에서 정의했지만 car1이나 car2에서 infor()메소드를 사용할 수 있는 것은 self를 매개변수로 전달했기 때문입니다.

.(점)으로 함수를 사용하는 형태가 낯이 익지 않나요?

자료형들을 배울 때 자료형과 관련된 함수를 사용할 경우 .함수() 형태를 썼었습니다. 가령 list에 값을 추가할 때 append()사용했었습니다.

list1 = []
list1.append("추가할 값")
#list1은 ["추가할 값"]


이제 코드의 형태들이 이해가시나요? 각 자료형도 사실은 객체이기 때문에 저렇게 메소드들을 쓸 수 있습니다.


Car는 클래스, car1은 클래스에 의해 만들어진 객체(또는 Car 클래스의 인스턴스)라는 관계를 잘 알아두시길 바랍니다.

생성자와 소멸자

우리가 Car클래스로 만든 객체인 car1에서 값들을 설정할 때는 어떻게 했었나요? car1.infor()로 값들을 입력했었습니다. 점을 사용해야 안에 메소드에 접속할 수 있었습니다. 생성자는 클래스가 실행될 때 자동으로 실행되는 메소드입니다.

class Car:
    def __init__(self, color, madeby, seats):
        self.color = color
        self.madeby = madeby
        self.seats = seats

car1 = Car("black", "bmw", 2)


생성될 때 자동으로 실행되기 때문에 Car에 바로 값들을 넣어주면 됩니다. init이라는 이름 앞 뒤에 __(언더바 2개)를 해주시면 됩니다. 소멸자는 객체가 사라질 때 자동으로 실행됩니다.


class Car:
    def __init__(self, color, madeby, seats):
        self.color = color
        self.madeby = madeby
        self.seats = seats
    def __del__(self):
        print("자동차 폐차")

car1 = Car("black", "bmw", 2)
del car1


del을 통해서 객체를 지우면 소멸자가 자동으로 실행됩니다.



클래스는 2부분으로 나눠서 포스팅을 해야할 것 같습니다. 다음 포스팅에서는 상속과 오버라이딩을 배워보도록 하겠습니다.



공감은 제작자에게 큰 힘이 됩니다.


'Backend-dev > python' 카테고리의 다른 글

파이썬의 모듈을 불러오는 방법과 pip  (0) 2018.04.11
클래스의 상속과 오버라이딩  (0) 2018.04.10
파이썬의 유효범위(scope)  (0) 2018.04.07
파이썬의 함수  (1) 2018.04.06
파이썬의 반복문(for, while)  (0) 2018.04.03
댓글