본문 바로가기

파이썬

파이썬 클래스(class) 객체 인스턴스 이해하기

반응형

파이썬 class 포스팅을 시작합니다

이번 파이썬 포스팅에서는 파이썬을 공부할 때 꼭 알아야 할, 클래스(class)·객체·인스턴스에 대해서 알아보겠습니다. 포스팅의 초반이지만 클래스(class)와 객체(Object)라는 어려운 개념을 조금만 짚고 넘어가도록 하겠습니다. 살짝 당황스러울 수 있지만 파이썬스럽게 공부하려면 클래스와 객체를 잘 알아야 합니다.

파이썬 클래스 이해하기


프로그래밍을 처음 배울 때 클래스(class)와 객체(Object)는 넘기 힘든 장벽과도 같은 존재입니다. 여러분 중에도 클래스와 객체라는 말을 처음 접하는 이들이 있을 것입니다. 이번 시간에는 기초적인 것부터 차근차근 알아보겠습니다.


클래스(class)는 똑같은 무엇인가를 계속해서 만들어낼 수 있는 설계, 틀과 같은 것입니다. 객체(object)는 클래스에 의해서 만들어진 물건, 실체를 뜻합니다. 클래스를 ‘자동차의 설계도’, 객체는 ‘실제로 만들어진 자동차’라고 생각하면 됩니다.

 

클래스에 의해 만들어진 객체는 객체별로 독립적인 성격을 갖는다는 특징이 있습니다. 한 자동차의 바퀴를 바꾸거나 유리창이 깨져도 다른 자동차는 아무런 영향을 받지 않는 것과 마찬가지입니다. 같은 클래스에 의해 생성된 객체라도 서로에게 아무런 영향을 주지 않습니다.


클래스에 의해서 만들어진 객체를 인스턴스(instance)라고도 합니다. 객체와 인스턴스의 차이는 무엇일까요? 인스턴스는 특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 때 씁니다. 즉, 클래스와 구체적인 객체 사이의 관계에 초점을 맞추면 인스턴스라는 용어를 쓰는 겁니다.

 

‘트럭은 인스턴스’보다는 ‘트럭은 객체’라는 표현이 어울리며, ‘트럭은 자동차의 객체’보다는 ‘트럭은 자동차의 인스턴스’라는 표현이 훨씬 잘 어울립니다.


객체는 프로그램에서 구현할 대상입니다. 클래스의 정의대로 만들어진 실체입니다. 인스턴스는 설계도를 바탕으로 프로그램에서 구현된 구체적인 실체를 말합니다. 객체를 프로그램에서 실체화하면 그것을 인스턴스라고 부릅니다.


인스턴스는 메모리에 할당됩니다. 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 합니다. 즉 인스턴스는 객체에 포함된다고 볼 수 있습니다. 객체지향 프로그램(Object Oriented Programming-OOP)은 객체를 중심으로 프로그래밍하는 방법입니다.

 

‘인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다.’는 말이 있습니다. 객체지향 프로그램은 사람이 생각하는 방식에 가깝게 프로그램을 할 수 있도록 도와주는 방법입니다. 파이썬에서는 모든 것을 객체로 만듭니다. 객체가 있다는 것은 객체를 만들 수 있는 클래스가 있다는 뜻입니다.

 

따라서 파이썬에서 프로그래밍하는 모든 것은 클래스로 만들어진다고 할 수 있습니다. 1, 2, 3과 같은 정수나 1.5, 2.4, 3.9와 같은 실수도 마찬가지입니다. 클래스로 숫자를 다룰 수 있는 객체를 만들어 사용합니다.

 

자동차(클래스)를 설계한다고 하면 여러 가지를 결정해야 합니다. 색깔을 어떻게 할 것이며, 바퀴는 몇 개 달고, 엔진은 어떤 것을 사용할지 하는 것들을 정해야 합니다. 색깔, 바퀴 수, 엔진 등이 자동차의 특징이자 데이터이고 이것을 속성(attribute)이라고 합니다.

파이썬 속성과 메소드

 

자동차가 어떤 기능을 할지도 정해야 합니다. 자동차는 앞으로 갈 수도 있고, 뒤로 갈 수도 있으며 라디오로 방송을 들을 수도 있습니다. 이렇게 객체가 할 수 있는 기능을 메소드(method)라고 합니다. 클래스는 속성과 메소드의 집합이라고 할 수 있습니다. 이렇게 속성과 메서드를 하나로 묶어서 처리하는 것을 객체지향 용어로 캡슐화(encapsulation)라고 합니다.

 

파이썬은 객체를 처리하기 위해 속성과 메서드를 제공하며 직접 속성과 메소드를 만들 수도 있습니다. 파이썬에서는 모든 것이 객체입니다. 객체는 각각의 타입이 존재하며 타입별로 같은 속성과 기능을 가집니다. 파이썬에서 객체의 타입은 객체를 만든 클래스를 말합니다.

파이썬 클래스와 객체

 

파이썬 클래스 사용하기

클래스를 만들 때 쓰는 키워드는 class입니다. 키워드는 파이썬이 특별한 일을 할 때 사용하는 단어로 나중에 배우는 변수와 구별해서 사용합니다.


키워드 class를 쓰고 클래스의 이름을 정합니다. 클래스 이름은 첫 글자를 대문자로 씁니다. 이름을 정하는 규칙을 명명 규칙(naming convention)이라고 합니다. 이 규칙을 잘 따라야 이름끼리 충돌하는 것을 막을 수 있습니다. Klass라는 이름으로 하나의 클래스를 만들어 봅시다.

 

클래스 이름, 괄호(( )) 그리고 끝에 콜론(:)을 씁니다. 파이썬의 특징으로 클래스를 만들 때는 클래스 이름 다음에 콜론(:)을 쓰고 엔터를 칩니다. 그러면 그 다음 줄은 자동으로 들여쓰기가 됩니다. 신기하죠?

 

우선은 ‘파이썬만의 특징이구나’라고 생각하면 됩니다. 앞으로 차근차근 공부하다 보면 자연스럽
게 이해가 될 것입니다. 클래스가 아무 일도 하지 않게 만들고 싶을 때는 pass라고 쓰면 됩니다. pass문은 아무 기능이 없다는 뜻입니다. 단축키(Shift+Enter)를 누릅니다.

 

이제 이름이 Klass인 클래스가 하나 만들어졌습니다. 클래스를 만든 후에 인스턴스를 만들어서 사용하려면 변수이름과 클래스 이름에 괄호를 붙여 표현식을 작성합니다. 객체를 만들려면 단축키(Shift+ Enter)를 눌러야 하겠죠?

 

이렇게 만든 객체는 메모리에 저장됩니다. 변수 k에 저장된 객체를 확인하려면 k라고 쓰고 실행 단축키를 누릅니다.

 

 

밑에 나온 결과가 변수 k에 들어있는 객체의 정보입니다. Klass라는 클래스로 만들어졌다는 것을 알 수 있습니다. ‘at’ 다음을 보니 16진수로 된 값이 있습니다. 16진수는 0부터 9, A부터 F까지의 숫자나 문자로 값을 나타냅니다.

 

객체를 만들면 다른 객체와는 16진수의 값으로 구별합니다. 이 값을 레퍼런스 값이라고 하며, 이 값은 메모리의 어느 곳에 저장되었는지 알려줍니다.

 

클래스와 인스턴스의 관계를 확인할 수도 있습니다. isinstance를 사용하면 인스턴스가 어떤 클래스로 만들어졌는지 확인할 수 있습니다. ‘is (it) instance?’라는 의미라고 생각하면 됩니다. ‘is (it)instance?’는 ‘이것은 인스턴스?’라고 묻는 것이죠.

 

위의 문장은 k라는 객체는 Klass 클래스로 만든 인스턴스인지를 묻는 겁니다. Klass 클래스로 만들어졌으면 True(참), 아니면 False(거짓)가 됩니다. 객체, 인스턴스를 다시 한번 설명하겠습니다. k = Klass()로 만들어진 k는 객체이며 k라는 객체는 Klass의 인스턴스입니다.

 

인스턴스는 어떤 객체(k)가 어떤 클래스(Klass)의 객체인지 설명할 때 씁니다. ‘K는 인스턴스’보다는 ‘K는 객체’라는 표현이 어울리며, ‘K는 Klass의 객체’보다는 ‘K는 Klass의 인스턴스’라는 표현이 어울립니다.

반응형