Python OOP 기초: 클래스, 객체, 상속, 생성자 완벽 이해
Python 객체지향 프로그래밍 (OOP)
Python의 OOP 모델은 개발자가 실세계 엔티티를 클래스로 정의된 객체로 모델링하게 합니다. 언어는 코드 재사용과 모듈성을 우선시해 클래스 생성과 확장이 직관적입니다.
클래스란?
클래스는 데이터(속성)와 행동(메서드)을 묶는 논리적 컨테이너. 공통 속성 공유하는 객체들의 템플릿 정의.
예: Customer 클래스는 transactions, balance, debt 같은 속성과 deposit(), withdraw() 같은 메서드 노출 가능.
Python에서 클래스 정의하기
간단한 클래스 생성 단계:
class 키워드 사용:
class MyClass:
pass
- 클래스 내 메서드 정의. 모든 인스턴스 메서드 첫 매개변수는 객체 자신을 가리키는
self.
class MyClass:
def greet(self):
print("Hello from MyClass")
- 클래스 인스턴스화:
obj = MyClass()
- 메서드 호출:
obj.greet()
완전한 예제:
# 작동하는 Python 클래스 예제
class MyClass:
def method1(self):
print("Guru99")
def method2(self, text):
print("Software Testing: " + text)
def main():
c = MyClass()
c.method1()
c.method2(" Testing is fun")
if __name__ == "__main__":
main()
Python 상속
상속으로 파생 클래스가 기반 클래스의 동작 재사용하고 확장 가능. Python은 단일과 다중 상속 모두 지원.
class Base:
def greet(self):
print("Hello from Base")
class Derived(Base):
def greet(self):
super().greet()
print("Hello from Derived")
# 사용
obj = Derived()
obj.greet()
핵심 포인트:
- 파생 클래스는 속성과 메서드 자동 상속.
- 같은 이름 메서드 정의로 오버라이드.
- 부모 메서드
ParentClass.method(self, …)나 super().method()로 명시적 호출.
생성자: __init__
__init__ 메서드는 새 객체를 미리 정의된 값으로 초기화.
class User:
def __init__(self, name):
self.name = name
def say_hello(self):
print(f"Welcome to Guru99, {self.name}")
user = User("Alex")
user.say_hello()
출력: Welcome to Guru99, Alex
Python 2 vs Python 3
사소한 문법 차이만 존재. 위 예제는 적절한 print 문으로 두 버전 모두 작동.
핵심 요약
- 클래스는
class 키워드로 데이터와 행동 묶어 정의.
- 인스턴스 메서드는
self로 객체 참조.
- 상속으로 코드 재사용 촉진, 단일/다중 지원.
- 생성자(
__init__)로 새 객체 초기 상태 설정.
- Python의 유연한 문법과
self 런타임 처리로 OOP 직관적.