- Published on
7단계: 클래스와 객체지향
7-1. 클래스 정의
class Person:
def __init__(self, name):
self.name = name
def greet(self):
print(f"안녕하세요, 저는 {self.name}입니다.")
7-2. 인스턴스 생성과 메서드 호출
p = Person("철수")
p.greet() # 안녕하세요, 저는 철수입니다.
7-3. self 키워드
- self는 인스턴스 자신을 가리킴
- 메서드 정의 시 첫 번째 인자로 반드시 사용
7-4. 클래스 변수 vs 인스턴스 변수
class Dog:
species = "포유류" # 클래스 변수
def __init__(self, name):
self.name = name # 인스턴스 변수
7-5. 메서드 오버라이딩
class Parent:
def say(self):
print("부모입니다.")
class Child(Parent):
def say(self):
print("자식입니다.")
7-6. super() 사용
class A:
def greet(self):
print("A 인사")
class B(A):
def greet(self):
super().greet()
print("B 인사")
7-7. 클래스 메서드와 정적 메서드
class MyClass:
@classmethod
def cls_method(cls):
print("클래스 메서드")
@staticmethod
def static_method():
print("정적 메서드")
7-8. str 메서드
class Product:
def __init__(self, name):
self.name = name
def __str__(self):
return f"상품명: {self.name}"
요약
- 클래스는 속성과 동작을 묶은 코드 구조
- self는 인스턴스를 지칭하고, 생성자에서 속성 초기화
- 상속, 오버라이딩, 클래스 메서드 등을 통해 코드 재사용성과 구조화 강화
__str__
,__init__
등 특수 메서드로 객체 표현 방식도 제어 가능
심화학습
Q1. 클래스 변수와 인스턴스 변수를 혼용하면 발생할 수 있는 문제는?
A1. 모든 인스턴스가 공유하는 클래스 변수와 개별 속성을 혼동해 예상치 못한 동작이 발생할 수 있습니다.
Q2. super() 호출이 필요한 대표적인 상황은?
A2. 부모 클래스의 생성자나 메서드를 확장하거나 함께 호출하고 싶을 때 super()를 사용합니다.
Q3. 정적 메서드와 클래스 메서드는 언제 사용하나요?
A3. 클래스 상태를 참조해야 하면 클래스 메서드, 완전히 독립적인 유틸리티 함수는 정적 메서드를 사용합니다.