본문 바로가기
  • NerdCodX Blog
파이썬(Python)

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

by NerdCodeX 2025. 2. 20.

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