[Python 기초] AI 개발자를 위한 클래스와 객체 지향 프로그래밍 (OOP)
🔎 1. 객체 지향 프로그래밍(OOP)란?
프로그래밍을 할 때, 객체(Object)를 중심으로 코드를 구성하는 방식을
객체 지향 프로그래밍(OOP, Object-Oriented Programming)이라고 합니다.
Python은 대표적인 객체 지향 언어이며, OOP 개념을 활용하면 코드의 재사용성이 높아지고 유지보수가 용이해집니다.
🏗️ 1.1 객체(Object)란?
객체는 특정한 속성(데이터)과 기능(메서드)을 가지는 실체입니다.
예를 들어, "자동차"라는 객체는 색상, 브랜드 등의 속성을 가지며, 주행, 정지 같은 기능을 수행할 수 있습니다.
🏛️ 1.2 클래스(Class)란?
클래스는 객체를 만들기 위한 설계도입니다.
클래스를 정의하고 이를 기반으로 객체를 생성할 수 있습니다.
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print(f"{self.name}가 짖습니다: 멍멍!")
# 객체 생성
dog1 = Dog("Buddy", "Golden Retriever")
dog2 = Dog("Charlie", "Poodle")
# 메서드 호출
dog1.bark()
dog2.bark()
📌 출력 결과:
Buddy가 짖습니다: 멍멍!
Charlie가 짖습니다: 멍멍!
🚀 2. 생성자와 인스턴스 변수
클래스 내부의 __init__ 메서드는 객체가 생성될 때 자동으로 실행되며, 초기 속성을 설정하는 역할을 합니다.
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def show_info(self):
print(f"자동차 브랜드: {self.brand}, 모델: {self.model}")
# 객체 생성
car1 = Car("Hyundai", "Sonata")
car2 = Car("Tesla", "Model S")
car1.show_info()
car2.show_info()
📌 출력 결과:
자동차 브랜드: Hyundai, 모델: Sonata
자동차 브랜드: Tesla, 모델: Model S
📌 3. 메서드와 self 키워드
클래스 내부에서 정의된 메서드는 self 키워드를 사용하여 객체 내부의 속성에 접근합니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"안녕하세요, 저는 {self.name}이고 {self.age}살입니다.")
p1 = Person("Alice", 25)
p2 = Person("Bob", 30)
p1.introduce()
p2.introduce()
📌 출력 결과:
안녕하세요, 저는 Alice이고 25살입니다.
안녕하세요, 저는 Bob이고 30살입니다.
📌 4. 상속(Inheritance)
상속을 통해 기존 클래스를 확장하여 새로운 기능을 추가할 수 있습니다.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("소리를 냅니다.")
class Cat(Animal):
def speak(self):
print(f"{self.name}가 야옹! 하고 웁니다.")
cat1 = Cat("Luna")
cat1.speak()
📌 출력 결과:
Luna가 야옹! 하고 웁니다.
📌 5. 캡슐화(Encapsulation)와 접근 제어
캡슐화를 활용하면 외부에서 직접 접근할 수 없는 변수를 정의할 수 있습니다.
class BankAccount:
def __init__(self, owner, balance):
self.owner = owner
self.__balance = balance # private 변수
def deposit(self, amount):
self.__balance += amount
print(f"{amount}원이 입금되었습니다. 현재 잔액: {self.__balance}원")
def get_balance(self):
return self.__balance
account = BankAccount("John", 10000)
account.deposit(5000)
print(account.get_balance())
📌 출력 결과:
5000원이 입금되었습니다. 현재 잔액: 15000원
15000
📌 6. 다형성(Polymorphism)
같은 메서드 이름을 가지지만 서로 다른 기능을 수행하는 개념입니다.
class Bird:
def fly(self):
print("새가 날아갑니다!")
class Airplane:
def fly(self):
print("비행기가 하늘을 날아갑니다!")
for obj in [Bird(), Airplane()]:
obj.fly()
📌 출력 결과:
새가 날아갑니다!
비행기가 하늘을 날아갑니다!
📌 7. 실전 연습 문제
🚗 문제 1: 자동차 클래스 만들기
다음 요구사항을 충족하는 Car 클래스를 구현하세요.
- brand(브랜드), speed(현재 속도) 속성을 가집니다.
- accelerate(amount): 속도를 amount만큼 증가시킵니다.
- brake(amount): 속도를 amount만큼 감소시키며, 속도가 0 이하로 내려가지 않도록 합니다.
class Car:
def __init__(self, brand, speed):
self.brand = brand
self.speed = speed
def accelerate(self, amount):
self.speed += amount
print(f"{self.brand}의 속도가 {self.speed}km/h로 증가했습니다.")
def brake(self, amount):
self.speed -= amount
if self.speed < 0:
self.speed = 0
print(f"{self.brand}의 속도가 {self.speed}km/h로 감소했습니다.")
car = Car("Hyundai", 50)
car.accelerate(20)
car.brake(30)
car.brake(50)
📌 출력 결과:
Hyundai의 속도가 70km/h로 증가했습니다.
Hyundai의 속도가 40km/h로 감소했습니다.
Hyundai의 속도가 0km/h로 감소했습니다.
🎓 문제 2: 학생 클래스 만들기
다음 요구사항을 충족하는 Student 클래스를 구현하세요.
- name(이름), grade(학년) 속성을 가집니다.
- introduce(): 학생 정보를 출력하는 메서드입니다.
class Student:
def __init__(self, name, grade):
self.name = name
self.grade = grade
def introduce(self):
print(f"안녕하세요! 저는 {self.name}이고, {self.grade}학년입니다.")
student = Student("김철수", 3)
student.introduce()
📌 출력 결과:
안녕하세요! 저는 김철수이고, 3학년입니다.
📢 요약
이 글에서는 Python의 객체 지향 프로그래밍(OOP) 개념을 간략히 설명하고,
클래스, 객체, 상속, 캡슐화, 다형성에 대한 실습 예제를 공부 했습니다.
Python OOP를 처음 배우는 초보자를 위해 자세한 코드 예제와 함께 실전 연습 문제도 포함되어 있습니다.
✅ 주요 키워드
- Python 객체 지향 프로그래밍(OOP)
- Python 클래스(Class)와 객체(Object)
- Python 상속(Inheritance) 예제
- Python 캡슐화(Encapsulation) 설명
- Python 다형성(Polymorphism) 활용
- Python OOP 실전 연습 문제
이 글을 통해 Python OOP에 대한 기초 개념을 잡는데 도움이 되길 바라며,
다음에는 파일 입출력(File I/O)에 대해 공부해볼게요.
혹시라도 궁금한 내용이 있다면 언제든 댓글 남겨주세요! 🚀
'AI와 친해지기 > AI를 직접해볼까?' 카테고리의 다른 글
[Python기초] AI개발자를 위한 JSON 파일 다루기 (8) | 2025.02.14 |
---|---|
[Python 기초] AI 개발자를 위한 파일 입출력(File I/O) 활용하기 (1) | 2025.02.13 |
[Python 기초] AI 개발자를 위한 함수 활용법 (1) | 2025.02.11 |
[Python 기초] AI개발자를 위한 제어문: 조건문과 반복문 (1) | 2025.02.09 |
[Python 기초] AI개발자를 위한 핵심 자료형과 리스트 활용법 (0) | 2025.02.08 |