객체 지향 프로그래밍 (OOP) 기초
객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍을 객체 단위로 설계하여 코드의 재사용성과 유지보수성을 높이는 방법론입니다. 이번 글에서는 클래스, 인스턴스, 클래스 메서드, 그리고 상속에 대해 알아보겠습니다.
1. 클래스와 인스턴스
클래스는 객체를 생성하기 위한 틀 또는 설계도입니다. 인스턴스는 클래스에서 생성된 실제 객체입니다. 아래 예제에서 Dog 클래스는 모든 강아지 객체를 생성하는 설계도 역할을 합니다.
class Dog:
species = "Canis familiaris" # 클래스 변수: 모든 인스턴스가 공유하는 변수
def __init__(self, name, age):
self.name = name # 인스턴스 변수: 각 인스턴스마다 고유한 값
self.age = age # 인스턴스 변수: 각 인스턴스마다 고유한 값
def bark(self): # 메서드: 객체의 동작 정의
return f"{self.name} says woof!"
# 객체 생성
dog1 = Dog("Buddy", 3)
dog2 = Dog("Max", 5)
# 메서드 호출
print(dog1.bark()) # Buddy says woof!
print(dog2.bark()) # Max says woof!
위 코드에서:
- 클래스 변수 species는 모든 인스턴스가 공유합니다.
- name과 age는 인스턴스마다 고유한 값으로 초기화됩니다.
2. 클래스 변수와 클래스 메서드
클래스 변수는 모든 인스턴스가 공유하는 변수입니다. 클래스 메서드는 클래스 변수에 접근하거나 조작할 때 사용됩니다. 아래 예제를 통해 자세히 알아보겠습니다.
class MyClass:
instance_count = 0 # 클래스 변수: 생성된 인스턴스의 개수를 저장
class_variable = 0 # 클래스 변수
def __init__(self):
MyClass.instance_count += 1 # 인스턴스가 생성될 때마다 증가
@classmethod
def get_instance_count(cls):
return cls.instance_count # 클래스 변수를 반환
@classmethod
def increment_class_variable(cls):
cls.class_variable += 1 # 클래스 변수 증가
@classmethod
def get_class_variable(cls):
return cls.class_variable # 클래스 변수 반환
# 객체 생성
obj1 = MyClass() # 첫 번째 인스턴스 생성 -> instance_count = 1
obj2 = MyClass() # 두 번째 인스턴스 생성 -> instance_count = 2
# 클래스 메서드 호출
print("인스턴스 개수")
print(MyClass.get_instance_count()) # 2
print(obj1.get_instance_count()) # 2
print(obj2.get_instance_count()) # 2
print("클래스 변수 증가 전")
print(MyClass.get_class_variable()) # 0
# 클래스 변수 증가
MyClass.increment_class_variable()
obj1.increment_class_variable()
obj2.increment_class_variable()
print("클래스 변수 증가 후")
print(MyClass.get_class_variable()) # 3
- instance_count는 생성된 인스턴스의 수를 저장하는 클래스 변수입니다.
- 클래스 메서드는 @classmethod 데코레이터로 정의되며, 첫 번째 인자로 클래스를 받습니다.
3. 상속과 다형성
상속은 기존 클래스의 기능을 재사용하면서 새로운 기능을 추가하는 데 사용됩니다. 다형성은 동일한 메서드 이름이 다른 클래스에서 다양한 방식으로 동작하도록 구현하는 것입니다.
class Animal:
def __init__(self, name):
self.name = name # 인스턴스 변수: 이름 저장
def speak(self):
raise NotImplementedError("서브 클래스에서 반드시 구현해야 함")
class Dog(Animal):
def speak(self):
return f"{self.name} 멍멍"
class Cat(Animal):
def speak(self):
return f"{self.name} 야옹"
def hello(animal: Animal):
print(animal.speak()) # 다형성을 활용한 메서드 호출
# 객체 생성 및 함수 호출
d = Dog("강아지")
hello(d) # 강아지 멍멍
c = Cat("고양이")
hello(c) # 고양이 야옹
위 코드에서:
- Animal 클래스는 부모 클래스입니다.
- Dog와 Cat 클래스는 Animal 클래스를 상속받아 각각 speak 메서드를 구현합니다.
- 다형성을 통해 동일한 함수 hello에서 다양한 객체를 처리할 수 있습니다.
객체 지향 프로그래밍은 코드의 재사용성을 높이고 유지보수를 쉽게 만들어줍니다.
- 클래스와 인스턴스: 설계도와 실제 객체.
- 클래스 변수와 메서드: 공유되는 데이터와 이를 조작하는 메서드.
- 상속과 다형성: 코드 재사용과 다양한 동작 구현.
*생성형 AI 활용한 클라우드&보안 전문가 양성캠프 과정의 교육내용 정리 자료입니다.
'코딩 > 파이썬' 카테고리의 다른 글
[새싹 성동 2기] FastAPI로 간단한 웹 애플리케이션 만들기 (0) | 2024.12.11 |
---|---|
[새싹 성동 2기] SQLite 데이터베이스 연동 가이드 (2) | 2024.12.11 |
[새싹 성동 2기] Python에서 파일 처리하는 방법 (1) | 2024.12.09 |
[새싹 성동 2기]Python 데이터 타입과 연산자 기초 정리 (1) | 2024.12.09 |
[새싹 성동 2기] 파이썬 변수와 관련된 기초 정리 (1) | 2024.12.06 |