파이썬 클래스와 객체: 상속, 생성자, 메서드 오버라이딩 사용하기

파이썬 클래스와 객체: 상속, 생성자, 메서드 오버라이딩 사용하기

객체 지향 프로그래밍의 핵심 요소 중 하나가 클래스와 객체입니다. 파이썬에서 클래스와 객체를 어떻게 생성하는지, 그리고 클래스의 생성자와 메서드 오버라이딩에 대해 알아보겠습니다.

목차

  1. 클래스와 객체란 무엇인가?
  2. 파이썬에서의 클래스 정의와 객체 생성
  3. 생성자 (Constructor)
  4. 상속 (Inheritance)
  5. 메서드 오버라이딩 (Method Overriding)
  6. 마치며

클래스와 객체란 무엇인가?

클래스(Class)는 객체를 생성하기 위한 템플릿 또는 설계도와 같은 것입니다. 클래스는 데이터와 이 데이터를 조작하는 방법(메서드)을 정의합니다. 객체(Object)는 이러한 클래스에서 생성된 인스턴스입니다. 이를 통해, 객체는 클래스에서 정의된 데이터와 메서드를 가지게 됩니다. 이러한 객체 지향 프로그래밍의 핵심적인 개념을 파이썬에서는 어떻게 사용하는지 알아보겠습니다.

파이썬에서의 클래스 정의와 객체 생성

파이썬에서 클래스를 정의하는 것은 매우 간단합니다. class 키워드를 사용하여 클래스를 정의하고, 클래스의 내부에 데이터와 메서드를 정의하면 됩니다. 아래는 간단한 예제입니다.

클래스 정의

class MyClass:
    data = "Hello, World!"

    def my_method(self):
        return self.data

▶ 위의 예제에서 MyClass는 클래스의 이름입니다. data는 클래스 변수이며, my_method는 클래스의 메서드입니다. self는 파이썬에서 클래스의 메서드를 정의할 때 사용하는 특별한 매개변수로, 클래스의 현재 인스턴스를 참조합니다.

객체 생성

이 클래스로부터 객체를 생성하는 간단한 예제입니다.

my_object = MyClass()
print(my_object.data)  # 출력: Hello, World!
print(my_object.my_method())  # 출력: Hello, World!

my_object는 MyClass의 인스턴스입니다. my_object.data와 my_object.my_method()는 각각 MyClass의 데이터와 메서드를 참조하고 있습니다.

생성자 (Constructor)

파이썬에서 생성자는 __init__라는 특별한 메서드로 정의됩니다. 생성자는 객체가 생성될 때 자동으로 호출되는 메서드로, 객체의 초기 상태를 설정하는 데 사용됩니다. ‘init’이라는 이름 앞뒤로 붙은 “__”는 언더스코어(_) 두 개를 붙여 쓴 것입니다.

class MyClass:
    def __init__(self, data):
        self.data = data

    def my_method(self):
        return self.data

▶ 위의 예제에서 __init__ 메서드는 data라는 매개변수를 받아서 객체의 초기 상태를 설정합니다. 이제 MyClass의 객체를 생성할 때 data를 전달해야 합니다.

my_object = MyClass("Hello, World!")
    print(my_object.data)  # 출력: Hello, World!
    print(my_object.my_method())  # 출력: Hello, World!

상속 (Inheritance)

파이썬에서 클래스 상속은 한 클래스의 기능을 다른 클래스가 이어받아 사용할 수 있게 해주는 중요한 객체 지향 프로그래밍의 원칙입니다. 상속은 기존 코드를 재사용하고 확장하는 데 매우 유용하며, 코드의 중복을 줄여줍니다.

파이썬에서는 클래스의 이름 뒤에 괄호를 사용하고, 괄호 안에 상속받을 부모 클래스의 이름을 적습니다. 다음과 같이 구현할 수 있습니다.

class BaseClass:
        def method(self):
            print("BaseClass method")
    
    class ChildClass(BaseClass):
        pass
    
    c = ChildClass()
    c.method()  # 출력: BaseClass method

▶ 위의 예시에서, BaseClass는 method라는 메서드를 가지고 있습니다. ChildClass는 BaseClass를 상속받아 method를 그대로 사용할 수 있습니다. ChildClass의 인스턴스 c를 사용해 method를 호출하면, BaseClass의 method가 호출되는 것을 확인할 수 있습니다.

상속은 더 복잡한 계층 구조를 만드는 데도 사용될 수 있습니다. 한 클래스가 다른 클래스를 상속받으면, 상속받은 클래스는 부모 클래스 또는 슈퍼 클래스라고 하며, 상속하는 클래스는 자식 클래스 또는 서브 클래스라고 합니다.

메서드 오버라이딩 (Method Overriding)

메서드 오버라이딩은 하위 클래스에서 상위 클래스의 메서드를 재정의하는 것을 의미합니다. 이는 객체 지향 프로그래밍에서 중요한 개념 중 하나로, 하위 클래스에서 상위 클래스의 메서드를 자신의 필요에 맞게 변경하고 싶을 때 사용됩니다.

class MyParentClass:
    def my_method(self):
        return "Hello, World!"

class MyChildClass(MyParentClass):
    def my_method(self):
        return "Hello, World! from child class"

▶ 위의 예제에서 MyChildClass는 my_method 메서드를 오버라이딩하여 자신만의 구현을 제공합니다.

my_object = MyChildClass()
print(my_object.my_method())  # 출력: Hello, World! from child class

마치며

이번 글에서는 파이썬에서 클래스와 객체에 대한 기본적인 개념을 알아보았습니다. 클래스는 데이터와 메서드를 묶어서 코드를 더욱 깔끔하고 유지보수하기 쉽게 만들어주는 매우 중요한 도구입니다. 생성자를 이용해서 객체의 초기 상태를 설정하고, 메서드 오버라이딩을 통해 상위 클래스의 메서드를 하위 클래스에 맞게 재정의할 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 더욱 효율적인 프로그래밍이 가능해집니다.

참고 문서


이 글이 도움이 되셨다면 공유를 부탁 드립니다. 다음 글에서 뵙겠습니다!

위로 스크롤