클래스와 객체의 개념
1. 클래스(Class)
- 객체(Object)를 만들기 위한 설계도
- 속성(Attributes)과 메서드(Methods)로 구성
- 속성: 클래스에 정의된 변수. 객체의 상태나 특징을 나타냄
- 메서드: 클래스에 정의된 함수. 객체가 수행할 수 있는 행동을 나타냄
2. 객체(Object)
- 클래스로부터 실제로 생성된 구체적인 데이터와 기능을 갖는 실체(Instance)
- 객체는 클래스에 정의된 속성과 메서드를 가짐
class footballer:
def __init__(self, name):
self.name = name
def introduce(self):
return f"{self.name} is a legend player in Korea."
ji = footballer("Jisung_Park")
son = footballer("Heungmin_Son")
print(ji.introduce())
객체지향 프로그래밍(OOP)의 핵심 개념
1. 캡슐화(Encapsulation)
- 객체의 속성과 메서드를 외부에서 직접 접근하지 못하도록 보호하는 개념
- 객체 내부의 데이터 변경을 제한하고, 안전하게 다룰 수 있음
- 보통
private
, protected
접근 제어자를 사용해 구현
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
def get_age(self):
return self.__age
def set_age(self, age):
if age > 0:
self.__age = age
p = Person("Alice", 30)
print(p.name)
print(p.get_age())
2. 상속(Inheritance)
- 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아 사용하는 개념
- 코드 재사용성을 높이고, 계층적인 관계(부모 클래스, 자식 클래스)를 표현
- 자식 클래스는 부모 클래스의 기능을 확장하거나 수정 가능
class Animal:
def sound(self):
print("Some generic sound")
class Dog(Animal):
def sound(self):
print("Bark")
dog = Dog()
dog.sound()
3. 다형성(Polymorphism)
- 같은 메서드가 다른 객체에서 다르게 동작할 수 있는 특성을 의미
- 하나의 인터페이스나 부모 클래스를 통해 다양한 객체를 처리 가능
- 메서드 오버라이팅과 인터페이스 구현을 통해 다형성을 달성
class Bird:
def fly(self):
print("Bird is flying")
class Airplane:
def fly(self):
print("Airplane is flying")
def let_fly(obj):
obj.fly()
bird = Bird()
airplane = Airplane()
let_fly(bird)
let_fly(airplane)
4. 추상화(Abstraction)
- 불필요한 세부 사항을 숨기고, 객체의 중요한 특징만을 노출하는 개념
- 복잡한 시스템을 단순하게 표현하고, 사용자에게 필요한 부분만 제공 가능
- 추상 클래스와 인터페이스를 통해 구현
from abc import ABC, abstractmethod
class Vehicle(ABC):
@abstractmethod
def start_engine(self):
pass
class Car(Vehicle):
def start_engine(self):
print("Car engine started")
class Motorcycle(Vehicle):
def start_engine(self):
print("Motorcycle engine started")
car = Car()
motorcycle = Motorcycle()
car.start_engine()
motorcycle.start_engine()
클래스 메서드와 정적 메서드
1. 클래스 메서드(Class method)
- 클래스 자체에 속하는 메서드로, 객체가 아닌 클래스에서 호출 가능
- 첫 번째 인자로
cls
를 받아 클래스 자체에 접근. 클래스 변수를 수정하거나 사용할 때 사용
@classmethod
데코레이터로 정의
class MyClass:
class_variable = 0
@classmethod
def increment_class_variable(cls):
cls.class_variable += 1
return cls.class_variable
print(MyClass.increment_class_variable())
2. 정적 메서드(Static Method)
- 클래스나 인스턴스와 관계없는 기능을 수행하는 메서드
- 첫 번째 인자로
self
나 cls
를 받지 않으며, 상태를 변경하지 않는 유틸리티 함수처럼 사용
@staticmethod
데코레이터로 정의
class MyClass:
@staticmethod
def add(a, b):
return a + b
print(MyClass.add(5, 10))