객체지향 프로그래밍의 실제 활용 사례 예시

Plcb Archive·2024년 1월 30일
0

파이썬

목록 보기
6/22
post-custom-banner

1. 클래스와 인스턴스의 활용 : 온라인 쇼핑몰 상품 관리

class Product:
    def __init__(self, name, price, inventory):
        self.name = name
        self.price = price
        self.inventory = inventory

    def sell(self, quantity):
        if quantity <= self.inventory:
            self.inventory -= quantity
            return quantity * self.price
        else:
            return "Inventory shortage"

# 인스턴스 생성
product1 = Product("스마트폰", 1000000, 30)
product2 = Product("노트북", 2000000, 20)

# 메소드 사용
revenue = product1.sell(3)
print(revenue)          # 3000000
print(product1.inventory)  # 27

온라인 쇼핑몰에서 각 상품은 Product 클래스의 인스턴스로 관리될 수 있다. 이 클래스는 상품의 이름, 가격, 재고 수량 등을 속성으로 갖는다.

2. 상속의 활용 : 차량 관리 시스템

기본 클래스: Vehicle

Vehicle 클래스는 모든 차량에 공통적인 속성과 메소드를 정의한다. 예를 들어, 모든 차량은 브랜드, 모델, 연식 등의 속성을 가질 수 있으며, 차량을 시작하거나 멈추는 기능을 가질 수 있다.

class Vehicle:
    def __init__(self, brand, model, year):
        self.brand = brand
        self.model = model
        self.year = year

    def start(self):
        print(f"{self.model} has started.")

    def stop(self):
        print(f"{self.model} has stopped.")

하위 클래스: Car, Truck

Vehicle 클래스를 상속받아 특정 유형의 차량을 나타내는 클래스를 만들 수 있다. 예를 들어, CarTruckVehicle의 속성과 메소드를 상속받지만, 각각의 특수한 특성을 추가할 수 있다.

Car 클래스

Car 클래스는 Vehicle의 기능을 상속받고, 승용차에 특화된 기능을 추가할 수 있다.

class Car(Vehicle):
    def __init__(self, brand, model, year, seats):
        super().__init__(brand, model, year)
        self.seats = seats

    def play_music(self):
        print(f"Playing music in {self.model}.")

Truck 클래스

Truck 클래스는 Vehicle의 기능을 상속받으며, 트럭에 특화된 기능을 추가할 수 있다.

class Truck(Vehicle):
    def __init__(self, brand, model, year, payload):
        super().__init__(brand, model, year)
        self.payload = payload

    def tow(self):
        print(f"{self.model} is towing.")

사용 예시

my_car = Car("Tesla", "Model 3", 2020, 5)
my_truck = Truck("Ford", "F-150", 2019, 1000)

my_car.start()  # "Model 3 has started."
my_car.play_music()  # "Playing music in Model 3."
my_truck.start()  # "F-150 has started."
my_truck.tow()  # "F-150 is towing."

이러한 방식으로, 상속을 활용하여 다양한 유형의 차량을 효율적으로 관리하고, 코드의 재사용성을 높일 수 있다. 상속은 공통적인 특성을 가진 여러 객체들을 효율적으로 관리하는 데 있어 핵심적인 역할을 한다.

3. 캡슐화 활용 : 은행 계좌 관리

class BankAccount:
    def __init__(self):
        self.__balance = 0

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount
            return True
        return False

    def withdraw(self, amount):
        if 0 < amount <= self.__balance:
            self.__balance -= amount
            return True
        return False

    def get_balance(self):
        return self.__balance

account = BankAccount()
account.deposit(1000)
print(account.get_balance())  # 1000
account.withdraw(500)
print(account.get_balance())  # 500

캡슐화를 통해 계좌의 잔액을 외부의 직접적인 접근으로부터 보호하고, 유효한 거래만 수행할 수 있도록 한다.

4. 다형성 활용 : 메시지 처리 시스템

class MessageProcessor:
    def process(self, message, format_type):
        format_type.format(message)

class JSONFormatter:
    def format(self, message):
        print(f"JSON: {message}")

class XMLFormatter:
    def format(self, message):
        print(f"XML: {message}")

processor = MessageProcessor()
json_formatter = JSONFormatter()
xml_formatter = XMLFormatter()

processor.process("Hello, World!", json_formatter)  # JSON: Hello, World!
processor.process("Hello, World!", xml_formatter)   # XML: Hello, World!

다형성을 활용하여 MessageProcessor 클래스가 다양한 형식의 메시지 포맷터와 함께 작동할 수 있도록 한다. 이를 통해 시스템의 유연성을 향상시키고, 새로운 포맷터의 추가를 용이하게 만든다.

5. 추상화 사용: 결제 시스템

# 결제 방식에 대한 추상 클래스 정의
class PaymentProcessor:
    def pay(self, amount):
        raise NotImplementedError("Each subclass must implement this method")
        
# 구체적인 결제 방식 클래스 구현
class CreditCardProcessor(PaymentProcessor):
    def pay(self, amount):
        print(f"Credit card payment: {amount}")

class PayPalProcessor(PaymentProcessor):
    def pay(self, amount):
        print(f"PayPal payment: {amount}")

class CryptoProcessor(PaymentProcessor):
    def pay(self, amount):
        print(f"Cryptocurrency payment: {amount}")
        
# 결제 처리
def process_payment(processor, amount):
    processor.pay(amount)

# 사용 예시
credit_card = CreditCardProcessor()
paypal = PayPalProcessor()
crypto = CryptoProcessor()

process_payment(credit_card, 100)
process_payment(paypal, 200)
process_payment(crypto, 300)

온라인 쇼핑몰에서 여러 결제 방식(신용카드, PayPal, 암호화폐 등)을 지원하는 시스템을 구축해 보았다. 이 예시에서 PaymentProcessor 추상 클래스는 결제 방식에 대한 일반적인 틀을 제공하고, 각 결제 방식은 이를 상속받아 구체적인 로직을 구현한다. 이를 통해 결제 방식을 쉽게 추가하거나 변경할 수 있으며, 결제 처리 로직은 결제 방식의 구체적인 세부 사항을 몰라도 동일하게 작동한다.

객체지향 프로그래밍의 이러한 원리들은 실제 개발에서 매우 유용하게 적용될 수 있으며, 소프트웨어의 설계와 유지 보수에 큰 도움을 준다.

post-custom-banner

0개의 댓글