나의 공부 일기

Python) Class(클래스) 본문

파이썬/파이썬 정리

Python) Class(클래스)

곽병권 2023. 10. 18. 14:52
728x90

만약에 우리가 좌표를 저장하는 기능의 코드를 짠다고 가정을 했을 때

class 가 없다면 일반적으로 변수 두 개를 만든 후 출력하는

x = 10

y = 20 

print(f'[{x}, {y}]') 

이런 식으로 코드를 짜게 될 겁니다.

 

한두 번 사용하는 거면 이런 식으로 사용해도 큰 불편함은 없지만

이게 수백 수천번 사용된다고 하면 정말 불편할 것입니다.

 

저 코드를 클래스로 작성한다면

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def prt(self):
        print(f'[{self.x},{self.y}]')


p1 = Point(10, 20)
p2 = Point(20, 30)

p1.prt()
p2.prt()

----결과----
[10,20]
[20,30]

이렇게 작성할 수 있습니다.

 

한번 클래스를 정의해놓으면 정말 편리하게 사용할 수있습니다.

 

 

클래스는 보통 붕어빵틀에 비교를 합니다.

붕어빵틀에 반죽을넣고 팥을넣고 반죽으로 덮은 뒤 빵을 구워 찍어내듯이

 

클래스에 정확한 값이 아닌 틀만 짠 뒤

클래스 밖에서 객체들을 하나씩 생성할대 사용할 수 있는 것입니다.

 

붕어빵을 제조하는 과정을 class,object,instance로 나누자면

  • 붕어빵틀 : class
  • 붕어빵 : object
  • 각각의 붕어빵 : instance
  • 붕어빵을 굽다 : instance화 하다

이렇게 볼 수 있습니다.

 

 

클래스 형식

클래스는 이런 형식으로 이루어져 있습니다.

[] 사이에 들어있는것들은 없어도 되고 있어도되는것들입니다.

 

클래스의 일반적인 구성요소에는 

Class 변수(Variable)

- 하나의 클래스로 만들어지는 모든 객체가 공유하는 변수

Class 함수(Method)

self

Constructor(생성자) Method(__init__)

Destructor(소멸자) Method(__del__)

Inheritance(상속)

Method Overriding(재정의)

      Abstract(추상화)

             Polimopishm(다형성)

                               Operator Overloading(중복정의)

 

가 있습니다.

 

다른것들도 정말 중요하지만 제가 표시한 self 와 생성자는 되게 중요한 것들인데,

 

 

먼저 self부터 정리하겠습니다.

 

self

클래스의 모든 인스턴스 메서드의 첫번째 인자입니다.

인스턴스 메서드를 호출한 객체를 참조하는 역할입니다 .(타 언어에서 this라고 사용되고 있습니다.)

인스턴스를 생성할 때마다 객체변수가 만들어집니다. (객체가 생성될 때마다 만들어지는 각 개체가 별도로 가지는 변수)

객체가 인스턴스 메서드를 호출하면 해당 객체의 변수를 참조하기 위해 필요합니다.

 

클래스를 사용하면 함수내에서 꼭 self를 써줘야 합니다. 

자기자신을 칭하는 것입니다.

 

이 self를 이용하여 클래스 내의 함수를 다른 함수에서 호출할 수도 있습니다.

 

맨 처음 예제에서 사용된 클래스를 이용하여 설명하자면

이렇게 볼 수 있습니다.

 

 

__init__

Constructor(생성자)라고 불립니다.

객체를 생성할때 반드시 호출되는 메서드이고, 하나의 클래스에 __init__이름으로 하나만 가질 수 있습니다.

그리고 객체를 생성할 때 객체변수(멤버변수)의 초기값을 설정하는데 활용됩니다.

 

생성자는 두가지로 나뉩니다.

 

Default 생성자

 

객체 멤버 변수를 초기화하는 생성자

 

초기화할때 x 와 y의 값을 지정해줄 수도 있습니다.

클래스를 사용할때 보통은 x와y의 값을 넣어 사용해줘야 하는데

이렇게 지정해주면 따로 넣지 않는다면 0으로 간주하고 실행하겠다 라는 의미가 됩니다.

 

 

 

 

마지막으로 __del__에 대해 정리해보겠습니다.

__del__ 은 Distructor(소멸자)로 객체의 참조 카운트가 0이되면 자동으로 호출되는 메서드 입니다.

또한 객체가 갖고 있는 값의 정리를 위해 사용됩니다.

class exam:
    def __del__(self):
        print("객체소멸 :", self)


ex1 = exam()
ex2 = exam()

print('ex1객체 정보:', ex1)
print('ex2객체 정보:', ex2)

ex1 = ex2

print(ex1)
 
---- 결과 ----
ex1객체 정보: <__main__.exam object at 0x00000209D5FF7490>
ex2객체 정보: <__main__.exam object at 0x00000209D5FF74D0>
객체소멸 : <__main__.exam object at 0x00000209D5FF7490>
<__main__.exam object at 0x00000209D5FF74D0>
객체소멸 : <__main__.exam object at 0x00000209D5FF74D0>

이렇게 객체가 소멸되었을때 함수를 호출하면 사라진 객체를 호출합니다.

 

 


여기까지 클래스에 대해 정리해보았습니다.

다음은 함수와 메스드에 대해 정리해보겠습니다.

 

728x90