파이썬 프로그래밍의 기초: 클래스 1편

2018. 1. 31. 19:33Python-이론/python

class


드디어 클래스에 대해서 다루어 보겠다. 1편에서는 클래스란 무엇이고 어떻게 쓰이는가? 2편에서는 클래스로 예제 프로그램을 만들어 보고 3편에서는 상속에 대해서 알아보겠다.



언어들 중에서는 클래스가 있는 언어도 있고 없는 언어도 있다. 클래스가 없는 언어도 있다는 것은 굳이 프로그램을 작성하는데에 클래스가 무조건 필요하다는 뜻이 아니다. 하지만 적절한 상황에 클래스를 잘사용한다면 엄청난 이익을 얻을 수 있기 때문에 클래스에 대해 알아보자!!


class를 사용하기에 적절한 상황

우리가 모든 것을 함수로 값을 유지하고 값을 구하려면 불편한 점이 있다. 만약에 계산기 더하기 함수를 사용하는데 서로 다른 계산을 하기 위해서는 그만큼 함수의 개수를 늘려주어야 한다. 하지만 클래스를 생성해주고 객체를 그만큼 많이 만들어 주면 되기 때문에 코드의 길이뿐만 아니라 프로그래머의 수고가 그만큼 덜어진다.

result1 = 0
result2 = 0
result3 = 0
def sum1(num):
    global result1
    result1 += num
    return result1
def sum2(num):
    global result2
    result2 += num
    return result2
def sum3(num):
    global result3
    result3 += num
    return result3
print(sum1(3))
print(sum1(4))
print(sum2(3))
print(sum2(6))
3
7
3
9

이전의 값을 기억하면서 새로운 값을 구하기 위해서는 위와 같이 함수의 개수를 늘려주어야 하지만 클래스는 그렇게 해주지 않아도 된다.

class add:
    def __init__(self):
        self.result = 0
    def adder(self, num):
        self.result +=num
        return self.result

cal1 = add()
cal2 = add() #객체생성
print(cal1.adder(3))
print(cal2.adder(7))
print(cal2.adder(2))
print(cal2.adder(20))
3
10
2
22

저 부분에서 자기가 추가하고 싶은 함수들을 추가해주고 호출해서 사용해주면 된다.



클래스와 객체

보통 학교에서나 책에서나 클래스와 객체를 쉽게 설명하기 위해서 클래스를 붕어빵틀, 과자틀등이 있고 객체에는 클래스를 통해 만들어진 붕어빵과 과자등이 있다. 하지만 조금 더 재미있게 설명할 수 없을까 고민을 하던 필자는 재미있는 블로그 글을 보게된다. https://blog.naver.com/itperson/220885461083 대중적인 게임인 롤 챔피언에 빗대어 설명한 글이다. 하지만 필자는 롤보다는 히오스를 많이 한 관계로 히오스 영웅들로 설명을 해보겠다



위와 같이 히오스의 일부 영웅들을 스크린샷 찍어서 올려놓았다. 여기서 알아야 할것이 각영웅들의 모습들을 클래스로 생각하는 것이다. 각각의 영웅마다 색다른 스킬, 특성, 대사, 체력 등등의 정보가 클래스에 미리 정의 되어있다. 게임을 하기전 캐릭터를 선택한다면 게임 캐릭터의 객체가 생성되는 것이다. 하지만 객체만 생성되는 것이지 인스턴트가 생성되는 것은 아니다. 인스턴트는 게임이 시작하고 게임내에서 레벨이 어떻게 되냐 퀘스트는 클리어 했냐 특성은 뭘찍었냐에 따라서 달라 지는 것이다. 따라서 게임속에서 캐릭터가 생성된 후 게임의 실시간의 상황에 맞게 캐릭터의 정보가 수시로 변하기 때문에 객체보다는 인스턴트라고 보는 것이 맞는 것 같다. 여기서 또 알아야 할 것이 객체와 인스턴트의 차이이다. 객체는 단순히 선언 만해주고 메모리를 차지하고 있지 않다.