본문 바로가기
파이썬/[객체지향 시리즈!]

📌 1. 객체지향 프로그래밍이란? (개념과 기본 원칙)

by 배불뚝 아저씨 2025. 2. 3.
반응형

새롭게 시작하는 객체지향 시리즈 입니다. 총 다섯편으로 구성할 계획입니다. 그럼 시작해볼까요?

1. 객체지향 프로그래밍(OOP)이란?

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 현실 세계의 개념을 프로그래밍에 적용하는 방식입니다. 프로그램을 구성하는 요소를 **객체(Object)**로 표현하며, 이러한 객체들이 서로 상호작용하며 동작하는 구조를 가집니다.

✅ 객체(Object)란?

  • 객체는 **속성(데이터, 변수)**과 **동작(메서드, 함수)**을 포함하는 독립적인 개체입니다.
  • 예: "자동차" 객체는 색상, 브랜드 등의 속성을 가지며, 가속, 정지 등의 동작을 수행할 수 있습니다.

✅ 클래스(Class)란?

  • 클래스는 객체를 만들기 위한 설계도입니다.
  • 예: "자동차"라는 클래스가 있다면, 현대, BMW 등의 자동차 객체를 만들 수 있습니다.

✅ OOP의 특징 (4대 원칙)

  1. 캡슐화(Encapsulation): 데이터를 보호하고, 객체 내부의 변수를 외부에서 직접 접근하지 못하게 합니다.
  2. 상속(Inheritance): 기존 클래스를 확장하여 새로운 클래스를 만들 수 있습니다.
  3. 다형성(Polymorphism): 같은 이름의 메서드가 여러 형태로 동작할 수 있습니다.
  4. 추상화(Abstraction): 불필요한 정보를 숨기고, 중요한 정보만 노출합니다.

반응형

2. 클래스와 객체 만들기 (예제)

🔹 클래스 정의 및 객체 생성

class Car:
    def __init__(self, brand, color):
        self.brand = brand  # 속성 (Attribute)
        self.color = color  # 속성 (Attribute)

    def drive(self):
        return f'{self.color} {self.brand} 자동차가 달립니다!'

# 객체 생성
car1 = Car("Hyundai", "Red")
car2 = Car("BMW", "Blue")

# 메서드 호출
print(car1.drive())
print(car2.drive())

🖥 실행 결과

Red Hyundai 자동차가 달립니다!
Blue BMW 자동차가 달립니다!

위 예제에서 Car 클래스는 brand와 color 속성을 가지고 있으며, drive() 메서드를 통해 자동차가 달리는 동작을 수행합니다.


3. 캡슐화(Encapsulation): 데이터 보호

캡슐화는 객체 내부의 변수를 외부에서 직접 접근하지 못하도록 제한하는 개념입니다. 이를 통해 데이터가 함부로 변경되는 것을 방지할 수 있습니다.

🔹 예제: private 변수 사용하기

class BankAccount:
    def __init__(self, owner, balance):
        self.owner = owner
        self.__balance = balance  # private 변수 (__) 사용
    
    def deposit(self, amount):
        self.__balance += amount
        return f'{amount}원이 입금되었습니다. 현재 잔액: {self.__balance}원'
    
    def withdraw(self, amount):
        if amount > self.__balance:
            return '잔액 부족!'
        self.__balance -= amount
        return f'{amount}원이 출금되었습니다. 현재 잔액: {self.__balance}원'
    
    def get_balance(self):
        return f'현재 잔액: {self.__balance}원'

# 객체 생성
account = BankAccount("Kim", 10000)
print(account.deposit(5000))
print(account.withdraw(12000))
print(account.get_balance())

🖥 실행 결과

5000원이 입금되었습니다. 현재 잔액: 15000원
12000원이 출금되었습니다. 현재 잔액: 3000원
현재 잔액: 3000원

🔹 __balance 변수 앞에 __를 붙이면 외부에서 직접 접근할 수 없게 됩니다. 이는 캡슐화를 위한 방법 중 하나입니다.


4. 상속(Inheritance): 코드 재사용성

상속을 사용하면 기존 클래스의 기능을 확장하여 새로운 클래스를 만들 수 있습니다.

🔹 예제: Animal 클래스를 상속하는 Dog 클래스

class Animal:
    def __init__(self, name):
        self.name = name

    def make_sound(self):
        return "소리를 냅니다."

class Dog(Animal):  # Animal 클래스를 상속
    def make_sound(self):
        return "멍멍!"

# 객체 생성
dog = Dog("바둑이")
print(dog.name)  # 부모 클래스의 속성
print(dog.make_sound())  # 오버라이딩된 메서드

🖥 실행 결과

바둑이
멍멍!

5. 추상화(Abstraction): 공통적인 인터페이스 제공

추상화는 구체적인 세부 구현을 감추고, 공통된 인터페이스만 제공하는 개념입니다.

파이썬에서 추상화를 구현하려면 abc 모듈을 사용해야 합니다.

🔹 예제: 추상 클래스 사용하기

from abc import ABC, abstractmethod

class Animal(ABC):  # ABC를 상속받아 추상 클래스로 정의
    @abstractmethod
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        return "멍멍!"

class Cat(Animal):
    def make_sound(self):
        return "야옹!"

# 객체 생성
dog = Dog()
cat = Cat()
print(dog.make_sound())
print(cat.make_sound())

🖥 실행 결과

멍멍!
야옹!

🔹 ABC는 추상 클래스를 정의하기 위한 클래스이며, @abstractmethod는 반드시 하위 클래스에서 구현해야 하는 메서드를 의미합니다.


🎯 마무리

객체지향 프로그래밍(OOP)은 코드의 재사용성을 높이고, 유지보수를 쉽게 해주는 강력한 패러다임입니다. 다음 편에서는 클래스와 객체를 더욱 깊이 있게 다루겠습니다! 🚀

 

 

 

 

혼자 공부하는 파이썬:1:1 과외하듯 배우는 프로그래밍 자습서 - 프로그래밍 언어 | 쿠팡

현재 별점 4.8점, 리뷰 198개를 가진 혼자 공부하는 파이썬:1:1 과외하듯 배우는 프로그래밍 자습서! 지금 쿠팡에서 더 저렴하고 다양한 프로그래밍 언어 제품들을 확인해보세요.

www.coupang.com

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

반응형

댓글