Python 기초

클래스 작성하기

클래스는 객체의 형태를 정의하는 틀(template)과 같은 것입니다. 클래스는 다음과 같은 구조를 이용하여서 정의됩니다.

class 클래스 이름:
    def 메소드1 (self, ...):   # 메소드를 정의합니다.
        ...
    def 메소드2 (self, ...):
        ...

 

클래스 안에는 인스턴스 변수(객체 안에 정의된 변수)와 메소드(클래스 안에 정의된 함수)를 정의합니다. 이들은 클래스의 멤버(member)라고 합니다.

변수는 객체의 상태를 나타내고 메소드는 객체의 동작을 나타냅니다. 인스턴스 변수는 객체 안에 정의된 변수입니다.

파이썬에서 인스턴스 변수를 생성하려면 메소드 안에서 self. 를 붙인 변수에 값을 대입하면 됩니다.

 

클래스의 첫 번째 예로 Counter 클래스를 작성하여 봅시다.

Counter 클래스는 기계식 계수기를 나타내며 경기장이나 콘서트에 입장하는 관객 수를 세기 위하여 사용할 수 있습니다.

 

Counter 클래스는 카운터값을 저장하는 변수를 가지고 있어야 합니다. 이것을 인스턴스 변수(또는 필드)라고 합니다.

파이썬에서는 변수를 따로 정의하는 것이 아니라 메소드 안에서 변수 이름에 self. 을 붙이고 값을 저장하면 인스턴스 변수가 됩니다.

따라서 어떤 메소드를 작성할 것인지를 생각하고 메소드 안에서 인스턴스 변수를 생성하도록 합시다.

 

카운터에는 어떤 메소드가 필요할까요? 카운터의 동작을 생각해봅시다. 실제 카운터에는 카운터의 값을 0으로 만드는 버튼이 있습니다.

이것은 reset() 메소드로 구현합니다. 사용자가 카운터의 버튼을 누르면 카운터값이 하나 증거되어야 합니다. 이것은 increment() 메소드로 구현합니다.

카운터는 현재의 값을 보여주는 작은 화면을 가지고 있습니다. 화면과 같은 기능을 하기 위하여 get() 메소드는 현재의 카운터값을 반환합니다.

자 이제 Counter 클래스를 작성해봅시다.

class Counter:
    def reset(self):        # 메소드 정의
        self.count = 0      # 인스턴스 변수 생성
    def increment(self):
        self.count += 1
    def get(self):
        return self.count

 

클래스는 기본적으로 헤더와 본체의 두 부분으로 구성되어 있습니다. 헤더는 일반적으로 한 줄의 코드로 구성되어 있습니다.

클래스의 본체는 들여쓰기된 블록으로 구성되어 있습니다.

  • 클래스를 정의할 때는 키워드 class로 시작하며 클래스의 이름을 뒤에 붙입니다. 여기서는 클래스 이름은 "Counter" 입니다.
  • 클래스 안에는 메소드와 인스턴스 변수를 정의하면 됩니다. 여기서는 reset(), increment()와 get() 메소드를 정의하였습니다.
  • 모든 메소드의 첫 번째 매개 변수는 자기 자신을 가리키는 self 변수입니다. self가 앞에 붙어 있으면 현재 객체라는 의미가 됩니다. 즉 메소드를 호출한 객체라는 의미입니다.
  • self 가 앞에 있는 변수는 모두 인스턴스 변수입니다.

 

Counter 클래스가 정의되었습니다. 이제 객체를 생성해봅시다. 클래스 이름에 ()을 붙여서 함수처럼 호출하면 객체가 생성됩니다.

a = Counter()

 

이제 객체를 통하여 메소드를 호출하여 봅시다. 단 객체를 사용하기 전에 reset()을 먼저 호출하여야 인스턴스 변수가 생성됩니다.

이 문제는 다음 절의 생성자에서 해결하도록 합시다.

class Counter:
    def reset(self):        # 메소드 정의
        self.count = 0      # 인스턴스 변수 생성
    def increment(self):
        self.count += 1
    def get(self):
        return self.count

a = Counter()

a.reset()
a.increment()
print("카운터 a의 값은", a.get())

 

<실행 결과>

카운터 a의 값은 1

 

  • Counter()라고 호출하면 객체가 생성되고 객체의 참조값을 변수 a에 저장합니다.
  • a의 reset()을 호출하면 인스턴스 변수 count가 생성되고 0으로 초기화 됩니다.
  • a의 increment()를 호출하면 count 값이 하나씩 증가됩니다.
  • a의 get()을 이용하여 카운터의 현재값을 얻을 수 있습니다.

 

객체는 원하는 만큼 여러 개 생성할 수 있습니다. 이번에는 2개의 객체를 생성해봅시다. 클래스로 생성된 각각의 객체는 별도의 인스턴스 변수를 가집니다.

Counter 클래스로 객체 a와 b를 작성하였다면 객체 a와 b는 모두 자신만의 count 인스턴스 변수를 가집니다.

a = Counter()
b = Counter()

a.reset()
b.reset()