Python

[Python] 파이썬 클래스 & 객체 사용법 (클래스 생성/ 객체 생성/ 메서드 생성/ 생성자/ 소멸자)

Let it out 2024. 2. 8. 12:47

절차지향 VS 객체지향

클래스의 유무는 절차지향객체지향 프로그래밍의 차이점 중 하나다.

절차지향 프로그래밍 언어(ex : C언어)는 클래스가 없다.
 
하지만 객체지향 프로그래밍 언어인 파이썬클래스가 있다.
 
 
 

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

함수나 변수 등을 모아둔 클래스라고 한다.
 
이런 클래스의 기능들을 사용하기 위해서는 객체를 선언한다.
 
클래스 하나만 만들어 두면 객체를 여러개 선언해 기능을 가져다가 쓰면 되므로 생산성을 높일 수 있다.
사실 위에 설명 만으로는 이해가 잘 가지 않을 거므로, 예제 보면서 이해하는 것이 편하다.
 
클래스, 객체, 메서드, 생성자, 소멸자, 인스턴스 6개의 용어를 확실하게 이해하고 직접 실습해 보면된다.
 
 

클래스(Class) 만들기

Test 라는 클래스를 만들었다.
 
다음줄에 들여쓰기로 num이라는 변수를 선언하면, Test 클래스 안에 num 변수가 선언된거다.
 
이때 num은 클래스 변수라고 부른다.
class Test: #클래스 명 Test
    num = 0 #클래스 변수
 

 

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

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

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

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

a라는 객체를 만들고 Test 클래스를 사용하는 예제다.
 
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

메서드를 작성 할 때 첫 번째 매개변수에  self필수로 적어줘야 한다.
 
이유는 객체가 메서드를 호출하면, 메서드가 객체를 호출하게 되는데 이때 객체 자신(a)이 자동으로 전달되기 때문이다.
 
따라서 메서드 내에서 'self'를 통해 객체 속성에 접근하거나 다른 메서드를 호출 할 수 있다.
 
따라서 self를 적지 않으면 오류가 발생한다.
class Test: #클래스 명 Test
    def str(self):  #self 매개변수 = a 객체다.
        return "Aapple"

a = Test() #객체 생성
print(a.str()) #메서드가 객체를 호출 할때 a객체가 전달 된다.
 
사실 self 대신 원하는 매개변수 명(abc)를 적어도 된다.
 
하지만 관례적으로 self를 적어주는게 좋다.
class Test:
    def str(abc):  #self 대신 abc를 적어도 된다.
        return "Aapple"

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

더하기 해주는 메서드 만들기

add 메서드  3개매개변수(self, a, b) 가 있다.
 
하지만  맨 아래 줄 a 객체가 메서드 호출 할때 2개의 변수(1,2) 를 넣었다.
 
왜 오류가 나지 않는 걸까?
 
위에서 설명한 대로 self는 객체(t)자동으로 호출을 해준다.
 
따라서 객체(t)생략하고 a, b(1,2)만 적어주면된다.
class Test:
    def add(self, a, b):
        return a + b

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

 

self객체(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는 객체라고 부른다.
class Test:
    num = 0

a = Test()
 
 
그리고 객체 aTest 클래스인스턴스라고 부른다.
 
즉, 객체는 a를 가리키고, 인스턴스는 클래스의 객체 a를 가리킨다.
 
따라서 "a는 객체라는 표현"과 "a는 클래스의 인스터스"라고 표현 할 수있다.
 
말장난 같아 보여도 자세히 읽어보면 이해가 될거다.
반응형