AI와 친해지기/AI를 직접해볼까?

[Python 기초] AI 개발자를 위한 클래스, 객체 지향 프로그래밍

insight발자국 2025. 2. 12. 09:31

[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)에 대해 공부해볼게요.
혹시라도 궁금한 내용이 있다면 언제든 댓글 남겨주세요! 🚀