[Python] 1개 예제로 ‘클래스(class)’ 세상에서 가장 쉽게 이해하기

우리는 파이썬을 공부하면서 클래스라는 개념을 반드시 접하게 된다. 여러 파이썬 강의나 책, 그리고 여러 자료에서 이 개념을 강조하고 있으며, 아마 파이썬을 제대로 접한 많은 사람들이 또한 이 클래스에 대한 개념을 마주쳤을 것이다.

이 과정에서 코딩 고수와 초보의 반응은 다음과 같이 나뉘게 된다.

  1. 고수 : 음~ 완벽히 이해했어! (진짜 완벽히 이해함)
  2. 초보 : 음~ 완벽히 이해했어! (뇌 비우고 있음)

위의 두 사람은 같은 말을 하고 있지만 그들의 내면에는 꽤 큰 차이가 있다. 물론 이 개념은 모른다고 해서 큰 일이 나진 않는다. 하지만 당신이 앞으로도 파이썬을 쓸 것이라면, 이 글에 나온 지식은 당신의 인생을 꽤 많이 나아지게 할 것이다.

즉 지금 여러분들이 보고 계신 이 글은, 2번에 해당하는 사람들을 위해 최대한 쉽게 작성된 글이다. 1번에 해당하는 사람은 그냥 재미삼아 봐주길 바라며, 다소 잘못된 비유가 있어도 너그럽게 넘어가주길 바란다.

2번에 해당하는 사람은 이 글을 보고 나면 클래스라는 게 무엇인지, 그리고 어떻게 사용해야 하는지 단 번에 알 수 있을 것이다. 부디 천천히 끝까지 봐주길 바란다.


그래서 클래스가 뭐냐

클래스
당연히 이 class가 아니다(…)

일단 거의 모든 파이썬 언어 기본서가 객체지향(object-oriented) 운운하면서 설명을 시작한다. 그리고 attribute, method, instance 따위의 단어들을 쓰며 초심자들의 기를 죽인다. 왜 기를 죽이고 그래요

심지어 파이썬 공식 홈페이지에서도 그렇게 설명하고 있다. 물론 당연히 그게 올바른 접근이다. 근데 당신은 객체지향이 뭔지 알고 있는가? 파이썬이 왜 object-oriented programming이 가능한 언어임을 강조하는지 알고 있는가?

아마 제대로 설명할 수 있는 사람은 많지 않을 것이다. 해서 이번 기회에 여기에서 기본 개념들을 제대로 정리해보겠다.

“왜 이런 걸 쓰냐”

불만

한편 여기서 또 한 가지 불만을 가지는 사람이 있을 것이다. 복잡한 걸 복잡하게 설명해야 하는 이런 걸 왜 쓰냐?

그도 그럴 것이 이러한 개념은 기본서에도 나올 만큼 기본 중의 기본이지만, 그럼에도 불구하고 다소 추상적인 개념이라 제대로 설명할 수 있는 사람은 많이 없다.

하지만 우리는 추상화를 통해 우리는 복잡한 대상을 간결하게 표현할 수 있다. (자연과학을 하는 사람이라면 이를 한 방에 이해했을 것이다.)

일일이 한땀한땀 같은 계산을 반복하는 것보다 함수를 하나 정의해서 필요할 때 꺼내쓰는 게 좋은 것처럼, 우리는 클래스라는 걸 통해 object를 쉽게 만들어낼 수 있다.

그럼 object는 뭘까? attribute는 뭐고 instance는 뭘까? 여기서 그러한 기본 개념들을 확실히 하고 넘어가겠다.

“Object란 무엇인가”

우선 Object란 무엇인가? 직역하면 ‘객체’ 이지만, 일단 지금은 “class로 인해 만들어지는 결과물” 으로 생각하면 된다. 파이썬에 존재하는 다양한 type들 중 하나이다.

이걸 좀 더 고급진 말로 “object는 class의 instance이다” 라고 표현한다. 이 object는 두 가지 요소로 이루어지는데, 바로 데이터와 행동(action, 혹은 behavior)이다. 즉 데이터를 저장하면서 무언가를 수행하는 것을 동시에 할 수 있는 게 object이다.

여기서 클래스의 관점에서 데이터는 attribute라고 부르고, 행동은 method라고 부른다. (function이라고 부르기도 하지만, class의 입장에서 용어를 섞어쓰지 않기 위해 method라는 말을 좀 더 많이 쓴다)

attribute는 object의 상태나 특성을 나타내는 반면, method는 object가 수행할 수 있는 동작이나 작업을 정의한다. (무슨 말인지 모르겠으면 이건 일단 넘어가도 좋다)

이러한 관점에서 class는 object를 만들기 위한 틀이라고 할 수 있다.(template, 혹은 blueprint라고 한다)

자동차

간단하고 가장 유명한 예를 하나 들어보겠다. “자동차” 라는 이름의 class가 있다고 해보자. 이는 모든 자동차가 공통적으로 갖고 있는 속성(attributes)과 동작(method)을 정의한다. “자동차”의 object는 파란 아방이, 혹은 노란 포르쉐 등의 특정 자동차 모델이며, 그들은 각자 attributes(색깔, 모델 등)와 method(가속, 브레이크 등)를 갖고 있다. 우리는 class를 이용하여 다양한 자동차를 그때그때 새로 정의할 필요 없이 마구 생산할 수 있다.


클래스 사용 방법

그럼 이러한 클래스를 어떻게 사용하는 것일까? 여기부턴 구구절절 설명 없이 바로 example code로 들어가면 될 것 같다.

“Dog” 라는 이름의 클래스를 작성해볼 것이다. 이건 우리가 생각하는 개가 맞다

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def info(self):
        print(f"The dog '{self.name}' is {self.age} years old")

doli = Dog("Doli", 16)
doli.info()
print(doli)

# Output : "The dog 'Doli" is 16 years old"

우선 class를 정의할 땐 class 뒤에 원하는 이름을 붙인다. (이름은 대문자로 시작하도록 하자.)

그리고 해당 클래스 안에 들어가는 모든 요소들은 들여쓰기(indent)로 작성되어야 한다. (이는 꽤 중요한 부분이다!)

그런데 self는 무엇이고, init은 무엇일까? 여기서 attribute는 무엇이고 method는 무엇일까? 하나하나 까보도록 하자.


우리는 Dog라는 class에 데이터를 저장하기 위해 name, age라는 attribute를 줬다. 이는 하나의 variable이기도 하다.

여기서 __init__ 은 한 object가 생성되자마자 자동으로 돌아가는 method이며, 보통 가장 처음에 작성된다. (initialization의 약자이다) 이 method는 constructor라고 불리기도 한다.

그 아래에 info라는 method를 추가해주었다. 우리는 method를 시작할 때 항상 self로 시작해야 한다. 이는 object 자기 자신에 접근할 수 있게 하는 역할을 한다. 간혹 안 써도 더러 작동이 되는 경우도 있지만, 반드시 포함할 것을 권장한다.

또한 우리는 method에 접근할 때 dot(.)을 사용한다. class를 정의했다면 이후 그것의 instance로 object를 만들어낼 수 있다. 여기선 16살의 돌리가 탄생하였다. (상당히 노견이다) 우리는 돌리의 정보를 알기 위해 .info() 라는 method를 호출했다.

위 예제의 경우 가장 간단한 example일 뿐이며, 그 아래에 다양한 method를 줄줄이 추가할 수 있을 것이다. 또한 이를 이용해 좀 더 복잡한 것들 역시 구현할 수 있을 것이다.


결론

python

본 포스트에서는 파이썬에서 제공되는 클래스라는 type을 알아보았다. 파이썬에서 클래스를 자유자재로 사용할 수 있다는 건 우리에게 큰 이점을 가져다준다. 더불어 class, attribute, method 등의 개념을 내면화한다면 코드를 보다 더 효율적으로 설계하고 구성할 수 있게 된다.

다만 여기서 소개한 것은 기초 중의 기초이다. 기초는 중요성은 아무리 강조해도 모자라며, 많은 전문가들이 기본기를 잃지 않고 끊임없이 연마하는 데는 그럴 만한 이유가 있을 것이다. 그렇기에 여기서도 기본을 위주로 다루었다.

그렇다보니, 필자는 여기에서 클래스에 대한 모든 것을 다루진 않았다. 여기에서 배운 내용을 기반으로, 앞으로 좀 더 고급진 skill들을 공부하고 활용하는 것 역시 할 수 있어야 한다.

이를테면 Inheritance라는 기능 또한 클래스의 강력한 기능 중 하나이지만, 본 포스트에는 언급하지 않았다. 쉽게 말해서, 기존 클래스를 기반으로 새 클래스를 만들 수 있다는 개념이다. 본 글에 나오는 내용들을 잘 내면화했다면, 나중에 다른 자료를 보면서 이러한 개념 역시 더 쉽게 이해할 수 있을 것이다.

당신은 이제 여기서 class에 대한 기본 지식들을 습득했을 것이고, 이를 이용해서 실제로 간단한 class를 정의하고 사용하는 게 가능해졌을 것이다. 다시 말하지만, 이걸 봤다고 해서 끝은 아니다. 모든 지식에 해당하는 이야기이겠지만, 연습과 실전은 필수이다. 그냥 눈으로 보고 넘긴다면 아무것도 남지 않는다. 반드시 본인이 직접 해봐야 한다.

꼭 직접 연습해보고, 활용해봐야만 나의 것이 된다. 끊임없이 연습하길 바라고, 이 글을 보는 당신이 파이썬의 고수가 되길 바란다.

<파이썬에 관한 유용한 다른 글들>

  1. 파이썬으로 구글 스프레드시트 편집 자동화하기 3단계 (Google sheets API)
  2. Windows에서 원하는 파이썬 버전으로 python venv 구축하는 법 (32bit, python 3.6.5)
  3. 파이썬, 키움 openAPI로 자동매매 구현하기 Step 1 (2023 ver.)

Leave a Comment