[Python] 파이썬 클래스란?

파이썬 클래스란?


클래스(Class)와 객체(Object)

클래스의 유무는 절차지향 과 객체지향 프로그래밍의 가장 큰 차이점이다.
절차지향 프로그래밍 언어인 C언어는 클래스가 없다.
하지만 객체지향 프로그래밍 언어인 파이썬, C++은 클래스를 가지고 있다.

우선 함수나 변수 등을 모아둔 틀을 클래스라고 한다.
이런 클래스의 기능을 사용하는 것을 객체라고 한다.
객체지향 프로그래밍에서 객체가 이 뜻이다.

이때 1개의 클래스로 수 많은 객체를 만들 수 있다.
즉 1개의 클래스만 만들어 두고 여러 객체들이 가져다가 쓰면 되므로 생산성이 높다고 표현된다.

사실 위에 설명 만으로는 이해가 잘 가지 않는다.
용어를 처음 보기 때문이다.
그냥 예제 보면서 이해하는 것이 편하다.
클래스, 객체, 메서드, 생성자, 소멸자, 인스턴스 6개의 용어를 확실하게 이해하면 된다.


클래스(Class) 만들기

가장 기본적인 클래스 생성이다.
Test 라는 클래스 안에 num이라는 변수를 만든다.
이때 num은 클래스 변수라고 부른다.
class Test: #클래스 명 Test
num = 0 #클래스 변수


클래스 안에 메서드(Method)만들기

클래스 안에는 함수도 만들 수 있다.
클래스 안에 있는 함수를 메서드라고 부른다.
class Test: #클래스 명 Test

def str(self): #메서드
return "Aapple"


객체(Object) 만들고 사용하기

a = Test() 가 a라는 객체를 만들고 Test 클래스를 사용하겠다는 뜻이다.

a 객체가 Test클래스의 변수, 메서드를 호출 하기 위해서는 ' . '(마침표)를 사용한다.
이때 변수는 a.num
메서드는 a.Test() 를 사용한다.
class Test: #클래스 명 Test
num = 5 #클래스 변수
def str(self): #메서드
return "Aapple"

a = Test() #객체 생성
print(a.num) #클래스 변수 num 호출하기
print(a.str()) #str()메서드 호출하기
결과 : 
5
Aapple



객체가 메서드 호출하는 방법 알아보기

메서드를 작성 할 때 첫 번째 매개변수  self를 필수로 적어줘야 한다.
이유는 객체를 호출 할 때 객체 자신(a)을 전달 하기 때문이다.
따라서 self를 적지 않으면 오류가 발생한다.
class Test: #클래스 명 Test
def str(self): #self 매개변수 = a 객체다.
return "Aapple"

a = Test() #객체 생성
print(a.str()) #메스드가 객체를 호출 할때 a객체가 전달 된다.

매개변수 self는 관례적으로 적는거고
self 대신 abc를 적어도 된다.
class Test:
def str(abc): #self 대신 abc를 적어도 된다.
return "Aapple"

a = Test()
print(a.str())



숫자 더해주는 메서드 만들기

한번 읽어보면 이해 될거다.

여기서 중요한 점이 있다.
def add(self, a, b)로 메서드는 3개의 매개변수가 있다.
하지만  맨 아래 줄 a.add(1,2)로 2개의 변수를 넣었다.
왜 오류가 나지 않는 걸까?

위에서 설명한 대로 self는 a객체를 호출하는데 자동으로 호출을 해준다.
따라서 a객체는 반드시 생략해야 한다.
class Test:
def add(self, a, b):
return a + b

a = Test()
print(a.add(1,2))
결과 : 3


slef 는 a객체 이므로 아래 예제처럼 사용 가능하다.
class Test:
def add(self, a, b):
self.a = a
self.b = b
return self.a + self.b

a = Test()
print(a.add(1,2))
결과 : 3



생성자(Consturctor)

생성자는 객체가 생성될 때 자동으로 호출되는 메서드를 말한다.
만약 초기 값을 넣고 싶다면 아래 예제처럼 생성자를 만들면된다.

생성자는 클래스의 모든 메서드 중 최초로 자동 호출 된다.
class Test:
def __init__(self,a,b):
self.a = a
self.b = b
def add(self):
return self.a + self.b

a = Test(1,2) #객체 생성 할때 매개변수를 넣어 초기화한다.
print(a.add())
결과 : 3



소멸자(Destructor)

소멸자는 생성자와 반대로 객체가 소멸 할 때 호출되는 메서드를 말한다.
즉 당신이 객체가 소멸 될 때 무언가를 하고 싶으면 소멸자를 사용하면 된다.
class Test:
def __init__(self,a,b):
print("객체 생성")

def __del__(self):
print("객체 소멸")
결과 : 
객체  생성
객체 소멸



인스턴스(Instance)

인스턴스는 많은 사람들이 헷갈려  하는 부분이니 이 글 뿐만 아니라 다른 책이나 글도 찾아 보길 권장한다. 
인스턴스는 프로그래밍 언어, 상황에 따라 다른 뜻으로 사용된다.

파이썬에서 클래스로 만든 객체를 인스턴스라고 한다.
그렇다면 인스턴스와 객체의 차이점은 무엇일까?
a = Test() 가 만들어 졌을 때 a는 객체라고 부른다.
그리고 a 객체는 Test의 인스턴스라고 부른다.
즉, 객체는 a를 가리키고, 인스턴스는 클래스의 객체 a를 가리킨다.

따라서 "a는 객체라는 표현"과
"a는 클래스의 인스터스"라는 표현이 어울린다.

말장난 같아 보여도 자세히 읽어보면 이해가 될 것이다.


댓글

이 블로그의 인기 게시물

[Arduino] 아두이노 초음파 센서(HC-SR04) 사용하기

[Arduino] 아두이노 조이스틱 사용하기

[자연 환경] 농약의 장단점 농약이 환경과 인간에게 미치는 영향