Python 입문 | 클래스 사용 | 클래스 생성


이제 실제로 클래스를 만들어 사용해 보기로 하자. 이전에 “이름을 사용하여 메시지를 표시한다"는 것을 클래스에 해보기로 한다.

아래에 샘플을 예제를 보도록 하자. 여기에서는 “Member"라는 클래스를 만들었다.

class Member: 
    name = "" 
   
    def showMsg(self): 
        print("Hello, " + self.name + ". How are you?")

멤버 변수는 이름을 저장하는 “name"이라는 변수를 선언하였다. 메소드는 메시지를 표시하는 “showMsg"를 선언하고 있다.

이 클래스의 소스 코드를 보면, 여태 보지 못한 것이 등장하고 있다. “self"라는 것인다. 이것은 showMsg 인수에 사용되고 있다. “뭐야, 단지 인수에 사용한 변수가?“라고 생각하면 그렇지 않다는 것을 알 수 있다.

메소드 안에는 ‘self.name’라는 식으로 왠지 잘 모르는 사용 법을 사용하고 있다.

사실은 이 “self"라는 것은 “자신"을 나타내는 특별한 값이다. 자신은 클래스가 아니다. 클래스에서 만들어진 “인스턴스"라는 거다.

인스턴스와 self

클래스라는 것은 함수 등과 같이 그대로 클래스에서 메소드를 호출하거나 해서 사용하지는 않는다. 클래스를 이용하기 위해서는 “인스턴스"라는 것을 만들어야 한다.     클래스라는 것은 말하자면 프로그램의 “청사진"이다. 이것 자체를 조작하는 것이 아니라, 이 클래스는 설계도를 바탕으로 실제로 사용할 수 있는 부품을 만들어 그것을 조작하는 거다. 이 부품이 인스턴스이다.

만약 클래스를 그대로 사용하면, 그 클래스의 기능을 몇번이고 사용하고 싶다면 많은 클래스를 만들어야 한다. 예를 들어, 샘플 Member 클래스를 사용하여 “Taro"며 “Hanako"의 데이터를 관리하려 했다고 생각해 보자. 클래스를 그대로 사용하게 되면 그 name에 “Taro"로 설정하면, 또 “Hanako"는 보관할 수 없게되어 버린다.

그래서 클래스를 바탕으로 “인스턴스"라는 부품을 만들고, 그것에 Taro로 설정해 주어야 한다. Hanako가 필요하게 되면, 또한 클래스에서 새로운 인스턴스를 만들고, 거기에 Hanako라고 설정 해준다. 이런 상태로 “Member 클래스를 사용할 필요가 있으면 새로 Member의 인스턴스를 만들고, 이름을 설정해 주어야"입니다. 이렇게 하면 이 클래스를 바탕으로 얼마든지 데이터를 처리할 수 있게 된다.

그리고, 이 인스턴스 자신을 가리키는 데 준비하는 것이 “self"라는 것이다.

예를 들어, 어떤 메소드에서 “이 인스턴스에 저장되어 있는 멤버 변수의 값을 사용해야 한다"고 해보자. 이 예에서 말한다면, Member의 name 값을 showMsg에서 사용하는 경우이다.

이 때, 그냥 ’name’변수 이름으로 사용할 수 없다. “이 인스턴스 안에 있는 name” 형태로 지정을 해주지 않으면 안된다.   그래서 Python 클래스에 제공되는 메소드는 반드시 첫 번째 인수에 인스턴스 자신을 나타내는 값을 전달하도록 해야 한다. 이것이 “self"의 정체는 것이다. 이 self 안에있는 멤버 변수와 메소드는

self."변수"

따라서, self후에 점(.)으로 지정한다. 예를 들어, 여기에 “self.name"라고 하고 name 멤버 변수를 지정하고 이용하면 된다.