Python

[Python] 클래스와 생성자

비번변경 2024. 5. 13. 12:30

개요

Python은 객체 지향 프로그래밍 언어이다. 다른 프로그래밍 언어와 비교하면, Python은 최소한의 문법과 개념을 사용해 클래스를 추가하고, 객체 지향형 프로그래밍의 표준 기능을 모두 제공한다. 즉, 클래스는 상속을 통해 부모 클래스를 가질 수 있고, 자식 클래스는 부모 클래스의 메서드를 재정의할 수 있다.

이 글에서는 객체 지향 프로그래밍에 대한 기본적인 개념을 알고 있다는 가정 하에, Python에서 클래스를 추가하고 사용하기 위한 문법 정도만을 정리한다.

 

 

객체

그래도 딱 문법만 정리하는 것도 적절하지 않은 것 같아 아주 기본적인 개념도 적어둔다.

 

객체(object, instance)란 서로 연관된 데이터와 그 데이터를 조작하기 위한 함수를 하나의 집합으로 모아놓은 것을 말한다.

집합의 원소가 되는 변수나 함수는 멤버(member) 또는 속성(attribute)이라고 한다. 그중에서도 객체의 속성인 함수는 메서드(method)라고 한다.

 

 

클래스

객체 지향 프로그래밍에서는 객체를 만들기 위해서 클래스가 필요하다. 객체를 붕어빵이라고 비유하면 클래스는 붕어빵 틀이라고 할 수 있다.

Python에서 클래스를 정의하는 가장 간단한 형태는 다음과 같다. 

class ClassName:
    pass

ClassName이라는 클래스는 아무 속성도 기능도 가지고 있지 않지만, 객체는 만들 수 있다.

a = ClassName()
print(type(a))

 

클래스의 속성과 메서드는 class 블록 내에 정의하고,

class ClassName:
    i = 12345

    def f(self):
        return 'hello world'

 '클래스 이름.속성 이름', '클래스 이름.메서드 이름' 형식으로 참조하여 사용한다. 이때 ClassName.i는 모든 객체가 공유하는 변수로 클래스 변수라고 한다.

a = ClassName()
print(a.i)
print(a.f())

💡 self
클래스 메서드를 정의할 때는 매개변수로 클래스 객체 자신을 전달해주어야 한다. 위의 예시에서는 메서드 f의 매개변수인 self가 해당된다.
메서드의 매개변수로 객체 자신을 명시적으로 전달하는 것은 Python 객체 지향 프로그래밍에서 찾아볼 수 있는 특징 중 하나이다. 클래스 객체 자신을 뜻하는 이름은 self가 아니어도 된다. 하지만 관례적으로 self라는 이름을 사용한다.

 

 

생성자

생성자(constructor)는 객체가 생성될 때 항상 가장 먼저 호출되는 함수로, 객체 속성에 값을 할당하거나 객체 생성 시 수행해야 하는 작업을 수행한다. 클래스 정의에서 가장 중요한 함수로 Python에서는 __init__ 함수에 해당한다.

다음은 클래스의 생성자를 정의한 간단한 예시이다. 객체 속성이 필요하지 않다면 __init__ 함수에 self 외의 매개변수는 정의하지 않아도 된다.

class ClassName:
    # 클래스 속성
    i = 12345

    # 생성자
    def __init__(self, attr1, attr2):
        # 객체 속성
        self.attr1 = attr1
        self.attr2 = attr2
        self.attr3 = 54321

이제 클래스의 객체를 생성하면 클래스 내에서 정의한 __init__ 함수가 호출되어 작업을 수행하게 된다.

a = ClassName('val_1', 'val_2')
print(a.i, a.attr1, a.attr3)

 

 

 

 

참고 문서

https://docs.python.org/ko/3/tutorial/classes.html

2.12 파이썬 객체지향 프로그래밍

https://wikidocs.net/28#_3

https://wikidocs.net/86

728x90