프로그래밍/Python

파이썬(Python) 매직 메서드: 완벽 가이드 (+코드)

프리다이어비티즈 2024. 10. 15. 09:21
반응형

목차

    파이썬의 매직 메서드는 클래스에 특별한 기능을 부여해주는 강력한 도구입니다. 흔히 '듀nder 메서드'라고도 불리는 매직 메서드는 __init__처럼 이름 앞뒤에 두 개의 언더스코어(__)가 붙어 있습니다. 매직 메서드를 잘 활용하면 객체의 동작을 커스터마이징하고, 보다 파이썬스러운 코드를 작성할 수 있습니다. 이번 글에서는 파이썬의 주요 매직 메서드와 그 활용법을 알아보겠습니다.

    공지

    본 포스팅의 무단도용 및 배포를 금지합니다.

    1. 매직 메서드란?

    반응형

    매직 메서드는 파이썬의 클래스 내부에서 특별한 역할을 수행하는 메서드입니다. 예를 들어, 객체를 생성할 때 호출되는 __init__, 문자열로 객체를 표현할 때 호출되는 __str__, 두 객체를 더할 때 호출되는 __add__ 등이 있습니다. 이러한 메서드는 파이썬의 여러 내장 기능과 상호작용하여 사용자 정의 객체도 내장 자료형처럼 동작할 수 있도록 해줍니다.

    2. 객체 초기화: __init__

    __init__ 메서드는 객체가 생성될 때 호출되는 초기화 메서드입니다. 객체의 속성을 설정하거나 초기 상태를 정의하는 데 사용됩니다.

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    person = Person("Alice", 30)
    print(person.name)  # Alice
    print(person.age)   # 30

    위 예제에서는 __init__ 메서드를 사용하여 Person 객체를 초기화하고, 이름과 나이를 설정했습니다.

     

    3. 객체 표현: __str__ 및 __repr__

    __str__ 메서드는 print() 함수로 객체를 출력할 때 호출됩니다. __repr__ 메서드는 객체의 공식적인 문자열 표현을 반환하며, 주로 디버깅 용도로 사용됩니다.

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def __str__(self):
            return f"{self.name}, {self.age} years old"
    
        def __repr__(self):
            return f"Person(name='{self.name}', age={self.age})"
    
    person = Person("Alice", 30)
    print(person)  # Alice, 30 years old
    print(repr(person))  # Person(name='Alice', age=30)

    __str__은 사용자 친화적인 정보를 제공하며, __repr__은 개발자 친화적인 정보를 제공합니다.

     

    4. 산술 연산자 오버로딩: __add__, __sub__, __mul__ 등

    매직 메서드를 사용하면 사용자 정의 객체에 대해 산술 연산자를 오버로딩할 수 있습니다. 예를 들어, 두 객체를 더하거나 빼는 연산을 정의할 수 있습니다.

    class Vector:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def __add__(self, other):
            return Vector(self.x + other.x, self.y + other.y)
    
        def __sub__(self, other):
            return Vector(self.x - other.x, self.y - other.y)
    
        def __str__(self):
            return f"Vector({self.x}, {self.y})"
    
    v1 = Vector(2, 3)
    v2 = Vector(5, 7)
    print(v1 + v2)  # Vector(7, 10)
    print(v1 - v2)  # Vector(-3, -4)

    __add__와 __sub__ 메서드를 정의하여 +와 - 연산자를 오버로딩했습니다.

     

    5. 비교 연산자 오버로딩: __eq__, __lt__, __le__ 등

    객체 간의 비교를 위해 매직 메서드를 사용할 수 있습니다. __eq__는 두 객체가 같은지 비교하고, __lt__는 객체 간의 크기를 비교합니다.

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def __eq__(self, other):
            return self.age == other.age
    
        def __lt__(self, other):
            return self.age < other.age
    
    p1 = Person("Alice", 30)
    p2 = Person("Bob", 25)
    print(p1 == p2)  # False
    print(p1 < p2)   # False

    위 예제에서는 __eq__와 __lt__ 메서드를 사용하여 두 객체의 나이를 비교했습니다.

     

     

    6. 컨테이너 타입 구현: __getitem__, __setitem__, __len__

    매직 메서드를 사용하여 사용자 정의 객체를 리스트처럼 동작하게 만들 수 있습니다. 예를 들어, 인덱스로 접근하거나 길이를 구할 수 있습니다.

    class CustomList:
        def __init__(self, data):
            self.data = data
    
        def __getitem__(self, index):
            return self.data[index]
    
        def __setitem__(self, index, value):
            self.data[index] = value
    
        def __len__(self):
            return len(self.data)
    
    cl = CustomList([1, 2, 3, 4])
    print(cl[1])  # 2
    cl[1] = 10
    print(cl[1])  # 10
    print(len(cl))  # 4

    __getitem__, __setitem__, __len__ 메서드를 정의하여 리스트와 유사하게 동작하도록 만들었습니다.

     

    7. 매직 메서드의 활용

    매직 메서드는 객체의 커스터마이징을 가능하게 하여, 파이썬의 내장 함수나 연산자와 자연스럽게 상호작용할 수 있게 합니다. 이를 통해 사용자 정의 객체도 내장 자료형처럼 직관적으로 사용할 수 있습니다. 매직 메서드를 잘 활용하면 코드를 보다 읽기 쉽고, 유지 보수하기 좋게 만들 수 있습니다.


    매직 메서드는 파이썬 클래스의 강력한 기능 중 하나로, 객체의 동작을 세밀하게 제어하고 내장 자료형처럼 사용하도록 도와줍니다. 이 글에서는 __init__, __str__, __add__ 등 여러 매직 메서드의 예를 살펴보았습니다. 매직 메서드를 잘 활용하면 파이썬 코드의 가독성을 높이고 직관적인 객체 동작을 구현할 수 있습니다.

     

    이 글이 매직 메서드의 이해와 활용에 도움이 되었길 바랍니다. 추가로 궁금한 점이나 다른 파이썬 주제에 대한 설명이 필요하다면 언제든지 문의해주세요!

    반응형