파이썬(Python)

Python Day 18: OOP 종합 실습 - 객체지향 프로그래밍을 활용한 프로젝트 설계

NerdCodeX 2025. 2. 20. 07:00

1. 객체지향 프로그래밍(OOP) 종합 실습 소개

안녕하세요! 오늘은 객체지향 프로그래밍(OOP)의 개념을 종합적으로 활용하는 실습을 진행해보겠습니다. 지금까지 배운 클래스, 상속, 다형성, 메서드 오버라이딩 등의 개념을 적용하여 은행 계좌 관리 프로그램을 설계해 보겠습니다. 이 프로젝트를 통해 OOP의 실용적인 사용법을 익히고, 현실적인 시나리오에서 객체지향 패턴을 구현하는 방법을 배울 것입니다.


2. 객체지향 프로그래밍을 활용한 프로젝트 설계

프로젝트 개요

  • 은행 계좌 관리 시스템을 만들고, 다양한 계좌 유형(예: 일반 계좌, 저축 계좌)을 구현.
  • 계좌 개설, 입금, 출금, 잔액 조회 등의 기능을 제공.
  • 객체지향 개념을 활용하여 클래스와 상속을 적절히 활용.

설계 단계

  1. BankAccount (부모 클래스) 정의
    • 기본적인 계좌 정보를 포함 (계좌번호, 소유자, 잔액 등).
    • 입금(deposit), 출금(withdraw), 잔액 조회(get_balance) 메서드 구현.
  2. SavingsAccount (자식 클래스) 정의
    • 부모 클래스를 상속하여 이자율을 추가.
    • 매달 이자 지급 기능 추가.
  3. BankSystem (은행 시스템 관리 클래스) 정의
    • 여러 계좌를 관리할 수 있도록 계좌 목록을 저장.
    • 계좌 개설, 검색, 삭제 등의 기능 제공.

3. 은행 계좌 관리 프로그램 구현

1) BankAccount - 기본 계좌 클래스

class BankAccount:
    def __init__(self, account_number, owner, balance=0):
        self.account_number = account_number
        self.owner = owner
        self.balance = balance
    
    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.owner}님의 현재 잔액: {self.balance}원"

 

2) SavingsAccount - 저축 계좌 (이자 지급 기능 추가)

class SavingsAccount(BankAccount):
    def __init__(self, account_number, owner, balance=0, interest_rate=0.02):
        super().__init__(account_number, owner, balance)
        self.interest_rate = interest_rate
    
    def apply_interest(self):
        interest = self.balance * self.interest_rate
        self.balance += interest
        return f"이자가 적용되었습니다. 현재 잔액: {self.balance:.2f}원"

 

3) BankSystem - 전체 은행 시스템 관리

class BankSystem:
    def __init__(self):
        self.accounts = []
    
    def create_account(self, account_type, account_number, owner, balance=0):
        if account_type == "savings":
            account = SavingsAccount(account_number, owner, balance)
        else:
            account = BankAccount(account_number, owner, balance)
        
        self.accounts.append(account)
        return f"{owner}님의 {account_type} 계좌가 생성되었습니다."
    
    def find_account(self, account_number):
        for account in self.accounts:
            if account.account_number == account_number:
                return account
        return None

 

4) 프로그램 실행 예제

# 은행 시스템 인스턴스 생성
bank = BankSystem()

# 계좌 개설
print(bank.create_account("savings", "123-456", "홍길동", 10000))

# 계좌 찾기 및 입출금
account = bank.find_account("123-456")
if account:
    print(account.deposit(5000))
    print(account.withdraw(3000))
    if isinstance(account, SavingsAccount):
        print(account.apply_interest())
    print(account.get_balance())

 

출력 예시

홍길동님의 savings 계좌가 생성되었습니다.
5000원이 입금되었습니다. 현재 잔액: 15000원
3000원이 출금되었습니다. 현재 잔액: 12000원
이자가 적용되었습니다. 현재 잔액: 12240.00원
홍길동님의 현재 잔액: 12240.00원

 


4. 실습 과제

1. 체크카드 계좌 클래스 추가하기

  • CheckingAccount 클래스를 만들고, 한도 초과 시 알림 기능을 추가하세요.
class CheckingAccount(BankAccount):
    def __init__(self, account_number, owner, balance=0, overdraft_limit=5000):
        super().__init__(account_number, owner, balance)
        self.overdraft_limit = overdraft_limit
    
    def withdraw(self, amount):
        if amount > self.balance + self.overdraft_limit:
            return "출금 한도를 초과했습니다."
        self.balance -= amount
        return f"{amount}원이 출금되었습니다. 현재 잔액: {self.balance}원"

2. 계좌 이체 기능 추가하기

  • transfer() 메서드를 추가하여 계좌 간 잔액을 이동할 수 있도록 하세요.

3. 사용자 인터페이스 개선하기

  • 터미널에서 사용자 입력을 받아 계좌 개설, 입출금 등을 진행할 수 있도록 개선하세요.

 

 

오늘 강의에서는 객체지향 프로그래밍(OOP)의 개념을 종합적으로 활용하여 실전 프로젝트를 설계하는 방법을 배웠습니다. 은행 계좌 관리 시스템을 구현하면서 클래스, 상속, 다형성, 메서드 오버라이딩 등 객체지향 개념을 실제 프로젝트에 적용하는 경험을 쌓았습니다.

이러한 실습을 통해 객체지향 프로그래밍이 현실 세계의 문제를 해결하는 데 얼마나 강력한 도구가 될 수 있는지 이해할 수 있었을 것입니다. 직접 프로젝트를 설계하고 기능을 추가하며 객체지향 프로그래밍의 실용성을 더욱 익혀보세요.

다음 강의에서는 게임 개발을 위한 PyGame 설치 및 기본 구조를 학습하며, 더욱 재미있는 프로젝트를 시작해 보겠습니다!

 

🚀 궁금한 점이나 피드백이 있다면 댓글로 남겨주세요. 여러분의 학습을 응원합니다! 😊

 

 

 

Python Day 17: 파이썬 상속과 다형성 - 객체지향 프로그래밍(OOP) 심화 학습

1. 상속과 다형성이란? 안녕하세요! 오늘은 객체지향 프로그래밍(OOP)의 중요한 개념인 **상속(Inheritance)**과 **다형성(Polymorphism)**에 대해 배워보겠습니다. 상속을 활용하면 기존 클래스를 확장하

nerdcodex.tistory.com

 

 

 

Python Day 16: 파이썬 클래스 심화 - 생성자, 소멸자, 클래스 변수와 인스턴스 변수

1. 클래스 심화 개념 소개안녕하세요! 오늘은 객체지향 프로그래밍(OOP)의 중요한 개념 중 하나인 생성자(__init__)와 소멸자(__del__), 클래스 변수와 인스턴스 변수에 대해 알아보겠습니다. 클래스를

nerdcodex.tistory.com

 

 

 

Python Day 15: 파이썬 클래스와 객체 - 객체지향 프로그래밍(OOP) 기본 이해하기

1. 클래스와 객체란? 안녕하세요! 오늘은 **객체지향 프로그래밍(Object-Oriented Programming, OOP)**의 핵심 개념인 **클래스(Class)와 객체(Object)**에 대해 배워보겠습니다. 객체지향 프로그래밍은 코드를

nerdcodex.tistory.com