파이썬은 객체 지향 프로그래밍을 지원하는 매우 인기있는 프로그래밍 언어입니다. 하지만 파이썬 2와 파이썬 3는 객체 지향 프로그래밍 측면에서 몇 가지 중요한 차이점을 가지고 있습니다. 이번 글에서는 파이썬 2와 파이썬 3에서의 클래스 및 객체 지향 프로그래밍의 주요 차이점을 살펴보겠습니다.
1. 클래스 정의
파이썬 2
class MyClass:
def __init__(self, name):
self.name = name
def get_name(self):
return self.name
파이썬 3
class MyClass:
def __init__(self, name):
self.name = name
def get_name(self):
return self.name
파이썬 2와 파이썬 3에서 클래스를 정의하는 방법은 동일합니다. 클래스는 class
키워드를 사용하여 정의되며, __init__
메서드를 통해 초기화됩니다. 메서드의 첫 번째 인수는 self
로, 인스턴스를 참조하는 데 사용됩니다.
2. 상속
파이썬 2
class Parent:
def __init__(self, name):
self.name = name
class Child(Parent):
def __init__(self, name, age):
Parent.__init__(self, name)
self.age = age
파이썬 3
class Parent:
def __init__(self, name):
self.name = name
class Child(Parent):
def __init__(self, name, age):
super().__init__(name)
self.age = age
파이썬 2에서는 부모 클래스의 생성자를 호출하기 위해 부모 클래스의 이름과 인스턴스를 전달하는 방식을 사용했습니다. 하지만 파이썬 3에서는 super()
함수를 사용하여 부모 클래스의 생성자를 호출할 수 있습니다.
3. 메서드 오버라이딩
파이썬 2
class Parent:
def print_info(self):
print("Parent Class")
class Child(Parent):
def print_info(self):
print("Child Class")
파이썬 3
class Parent:
def print_info(self):
print("Parent Class")
class Child(Parent):
def print_info(self):
print("Child Class")
파이썬 2와 파이썬 3에서 메서드 오버라이딩은 동일합니다. 자식 클래스에서 부모 클래스의 메서드를 동일한 이름으로 정의하여 오버라이딩할 수 있습니다.
4. 속성 접근
파이썬 2
class MyClass:
def __init__(self, name):
self.__name = name
my_obj = MyClass("John")
print(my_obj.__name) # AttributeError: 'MyClass' object has no attribute '__name'
파이썬 3
class MyClass:
def __init__(self, name):
self.__name = name
my_obj = MyClass("John")
print(my_obj.__name) # AttributeError: 'MyClass' object has no attribute '__name'
파이썬 2와 파이썬 3에서는 클래스 내부에 정의된 속성에 접근할 때 동일한 방식을 사용합니다. 하지만 클래스 내부 속성을 보호하기 위해 이름 앞에 언더스코어를 사용하는 것은 파이썬의 관례입니다.
결론
파이썬 2와 파이썬 3의 클래스 및 객체 지향 프로그래밍은 주요한 차이가 없습니다. 클래스 정의, 상속, 메서드 오버라이딩 및 속성 접근 등의 측면에서 동일한 방식으로 사용할 수 있습니다. 따라서, 기존에 파이썬 2를 사용하던 개발자들은 파이썬 3로의 전환 과정에서 큰 어려움 없이 객체 지향 프로그래밍을 계속 사용할 수 있을 것입니다.
중요 참고: 파이썬 2는 지원이 중단되었으므로, 새로운 프로젝트를 시작한다면 파이썬 3를 사용하는 것이 좋습니다.