파이썬에서 클래스는 객체 지향 프로그래밍(OOP)의 중심 개념 중 하나로, 프로그램을 더 구조화하고 유지보수하기 쉽게 만드는 도구입니다. 클래스는 객체를 생성하기 위한 템플릿 역할을 하며, 각 객체는 클래스의 인스턴스로 다양한 속성과 메서드를 가질 수 있습니다. 이번 글에서는 파이썬에서 객체를 생성하고 메서드를 호출하는 방법, self 키워드의 의미, 그리고 객체 간의 비교와 동등성을 다룹니다.
1. 객체 생성 및 메서드 호출
클래스는 객체(인스턴스)를 생성하기 위한 청사진입니다. 객체를 생성한 후에는 그 객체의 속성이나 메서드를 사용할 수 있습니다. 파이썬에서는 클래스를 정의한 후, 클래스 이름을 함수처럼 호출하여 객체를 생성할 수 있습니다.
클래스 정의와 객체 생성
class Person:def__init__(self, name, age):self.name = nameself.age = agedef greet(self):returnf"Hello, my name is {self.name} and I am {self.age} years old."# 객체(인스턴스) 생성person1 = Person("Alice", 30)person2 = Person("Bob", 25)# 메서드 호출print(person1.greet()) # 출력: Hello, my name is Alice and I am 30 years old.print(person2.greet()) # 출력: Hello, my name is Bob and I am 25 years old.
Hello, my name is Alice and I am 30 years old.
Hello, my name is Bob and I am 25 years old.
위 코드에서는 Person이라는 클래스를 정의하고, person1과 person2라는 두 개의 객체를 생성했습니다. 이 두 객체는 각각 greet 메서드를 호출하여 자신만의 인사말을 출력합니다.
객체 생성 과정
Person("Alice", 30): 클래스 이름을 호출하여 객체를 생성합니다. 이때 __init__ 메서드가 호출되어 객체의 초기 상태를 설정합니다.
person1.greet(): 객체의 메서드를 호출합니다. 객체마다 메서드의 동작은 동일하지만, 객체의 상태에 따라 결과가 달라집니다.
2. self 키워드의 의미
self는 파이썬에서 클래스 메서드를 정의할 때 반드시 사용되는 매개변수로, 해당 메서드가 호출된 객체 자신을 참조하는 역할을 합니다. 이는 메서드가 특정 객체의 속성에 접근하거나 그 객체의 동작을 정의할 때 필요합니다.
self의 역할
class Car:def__init__(self, model, year):self.model = model # 인스턴스 속성self.year = year # 인스턴스 속성def description(self):returnf"This car is a {self.year}{self.model}."# 객체 생성 및 메서드 호출car1 = Car("Toyota Corolla", 2020)print(car1.description()) # 출력: This car is a 2020 Toyota Corolla.
This car is a 2020 Toyota Corolla.
self.model: self는 메서드가 호출된 객체를 가리킵니다. 예를 들어, car1.description()에서 self는 car1을 참조하므로, self.model은 car1.model을 의미합니다.
self는 명시적으로 전달되지 않음: 메서드를 호출할 때 self는 명시적으로 전달하지 않아도 파이썬이 자동으로 전달합니다. 예를 들어 car1.description()을 호출할 때, 실제로는 Car.description(car1)이 호출됩니다.
3. 객체 비교 및 동등성
객체 지향 프로그래밍에서 두 객체가 같은지, 또는 그 속성값이 동일한지를 비교하는 것은 중요한 작업입니다. 파이썬에서 객체 비교는 크게 두 가지 방식으로 나눌 수 있습니다: - 동일성(Identity): 두 객체가 메모리 상에서 같은 객체인지 비교. - 동등성(Equality): 두 객체의 값이나 상태가 같은지 비교.
__eq__ 메서드: 두 객체의 이름과 나이가 동일하면, 두 객체를 같다고 판단하도록 동등성 비교를 정의했습니다. 따라서 person1 == person2는 True를 반환합니다.
객체 비교를 위한 사용자 정의: 기본적으로 == 연산자는 객체의 메모리 위치를 비교하지만, __eq__ 메서드를 오버라이딩하면 원하는 속성 기반으로 객체를 비교할 수 있습니다.
파이썬에서 클래스를 이용하여 객체를 생성하고, self를 통해 각 객체의 속성에 접근하는 방법을 이해하는 것은 객체 지향 프로그래밍의 기초입니다. self는 객체의 메서드가 그 객체의 상태를 참조할 수 있게 하며, 이를 통해 객체 간의 유연한 상호작용이 가능합니다. 또한, 객체 비교와 동등성 개념을 활용하면 객체 간의 값이나 상태를 정확하게 비교할 수 있습니다. 이러한 개념을 제대로 이해하면, 파이썬으로 더 복잡하고 유연한 객체 지향 프로그램을 작성할 수 있습니다.