TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 기초>

[파이썬] 파이썬 기초 - 클래스 보완 (은행 계좌, ATM 프로그램 만들기)

by 기록자_Recordian 2025. 1. 23.
728x90
반응형
이전 내용
 

[파이썬] 파이썬 기초 - 클래스 보완

클래스 이전 내용 [파이썬] 파이썬기초: 클래스 - 1클래스(Class) 와 객체(object) 클래스: 똑같은 무언가를 계속 만들어 낼 수 있는 설계 도면객체: 클래스로 만든 피조물. 클래스로 만든 객체는 객

puppy-foot-it.tistory.com


예제. 클래스 문법 활용하기 (+ 은행 계좌)

 

클래스 문법을 활용하여 Bank_account 클래스를 만들고 그 안에 계좌 생성(생성자), 입금, 출금, 송금, 잔액 확인의 기능을 하는 메서드를 추가하라.

class Bank_account:
    def __init__(self, balance=0):
        self.__balance = balance # balance 속성 외부에서 접근 불가
        print("-"*10, "계좌가 생성되었습니다.", "-"*10)

    def deposit(self, amount):
        print(f"입금 메뉴 - 현재 잔액: [{self.getBalance()}원]")
        amount = int(input("입금 금액을 입력해 주세요 (숫자만): "))
        if amount <= 0:
            print("입금 가능한 금액이 아닙니다.")
        else:
            self.__balance += amount
            print(f"계좌에 {amount}원이 입금되었습니다.")
    
    def withdraw(self, amount):
        print(f"출금 가능 잔액: [{self.getBalance()}원]")
        amount = int(input("출금 금액을 입력해 주세요 (숫자만): "))
        if amount > self.__balance:
            print("잔액이 모자라 출금할 수 없습니다.")
        else:
            self.__balance -= amount
            print(f"계좌에서 {amount}원이 출금되었습니다.")

    def sendMoney(self, amount):
        print(f"송금 가능 잔액: [{self.getBalance()}원]")
        amount = int(input("송금 금액을 입력해 주세요 (숫자만): "))
        if amount > self.__balance:
            print("잔액이 모자라 송금할 수 없습니다.")
        else:
            self.__balance -= amount
            receiver = input("송금하실 분의 이름을 입력해 주세요: ")
            print(f"계좌에서 {amount}원이 {receiver}님께 송금되었습니다.")
            print(f"송금 후 잔액: [{self.getBalance()}원]")

    def getBalance(self):
        return self.__balance

# 인스턴스 생성
customer_1 = Bank_account()
customer_1.deposit(500)
customer_1.withdraw(200)
customer_1.sendMoney(100)
print(f"현재 잔액: [{customer_1.getBalance()}]")

 


예제 Develop1. ATM 기능을 하는 메서드 추가

 

기존의 Bank_account 클래스에 ATM 기능을 하는 main() 메서드를 추가한다.

class Bank_account:
    def __init__(self, balance=0):
        self.__balance = balance # balance 속성 외부에서 접근 불가
        # print("-"*10, "계좌가 생성되었습니다.", "-"*10)

    def deposit(self):
        print(f"입금 메뉴 - 현재 잔액: [{self.getBalance()}원]")
        amount = int(input("입금 금액을 입력해 주세요 (숫자만): "))
        if amount <= 0:
            print("입금 가능한 금액이 아닙니다.")
        else:
            self.__balance += amount
            print(f"계좌에 {amount}원이 입금되었습니다.")
    
    def withdraw(self):
        print(f"출금 가능 잔액: [{self.getBalance()}원]")
        amount = int(input("출금 금액을 입력해 주세요 (숫자만): "))
        if amount > self.__balance:
            print("잔액이 모자라 출금할 수 없습니다.")
        else:
            self.__balance -= amount
            print(f"계좌에서 {amount}원이 출금되었습니다.")

    def sendMoney(self):
        print(f"송금 가능 잔액: [{self.getBalance()}원]")
        amount = int(input("송금 금액을 입력해 주세요 (숫자만): "))
        if amount > self.__balance:
            print("잔액이 모자라 송금할 수 없습니다.")
        else:
            self.__balance -= amount
            receiver = input("송금하실 분의 이름을 입력해 주세요: ")
            print(f"계좌에서 {amount}원이 {receiver}님께 송금되었습니다.")
            print(f"송금 후 잔액: [{self.getBalance()}원]")

    def getBalance(self):
        return self.__balance

    def display_menu(self):
        print("1. 계좌 생성")
        print("2. 입금")
        print("3. 출금")
        print("4. 송금")
        print("5. 잔액 확인")
        print("6. 종료")
        menu = int(input("메뉴를 선택해 주세요: "))
        return menu

    def main(self):
        while True:
            try:
                menu = self.display_menu()
                if menu == 1:
                    name = input("이름을 입력해 주십시오.: ")
                    print(f"{name}님, 계좌가 생성되었습니다.")
                elif menu == 2:
                    self.deposit()
                elif menu == 3:
                    self.withdraw()
                elif menu == 4:
                    self.sendMoney()
                elif menu == 5:
                    print(f"현재 잔액: [{self.getBalance()}원]") 
                elif menu == 6:
                    print("프로그램을 종료합니다.")
                    break
            except ValueError:
                print("잘못된 숫자를 입력하였습니다.")
            finally:
                print("저희 은행을 이용해 주셔서 감사합니다.")

a = Bank_account()
a.main()

ATM의 기능을 하는 main() 메서드는 앞서 만든 입금, 출금, 송금, 잔액 확인 등의 기능을 할 수 있도록 연결하고, 메뉴는 display_menu() 메서드를 통해 보여지며, 여기서 input 값을 받아 menu라는 변수에 저장해 main() 메서드로 연결되도록 하였다.


예제 Develop2. 클래스 상속 활용하기

 

앞서 만든 Bank_account 클래스 중 ATM 역할을 하는 메서드들을 따로 빼서 Bank_account 클래스를 상속한 ATM 클래스로 만들어라.

class Bank_account:
    def __init__(self, balance=0):
        self.__balance = balance # balance 속성 외부에서 접근 불가
        # print("-"*10, "계좌가 생성되었습니다.", "-"*10)

    def deposit(self):
        print(f"입금 메뉴 - 현재 잔액: [{self.getBalance()}원]")
        amount = int(input("입금 금액을 입력해 주세요 (숫자만): "))
        if amount <= 0:
            print("입금 가능한 금액이 아닙니다.")
        else:
            self.__balance += amount
            print(f"계좌에 {amount}원이 입금되었습니다.")
    
    def withdraw(self):
        print(f"출금 가능 잔액: [{self.getBalance()}원]")
        amount = int(input("출금 금액을 입력해 주세요 (숫자만): "))
        if amount > self.__balance:
            print("잔액이 모자라 출금할 수 없습니다.")
        else:
            self.__balance -= amount
            print(f"계좌에서 {amount}원이 출금되었습니다.")

    def sendMoney(self):
        print(f"송금 가능 잔액: [{self.getBalance()}원]")
        amount = int(input("송금 금액을 입력해 주세요 (숫자만): "))
        if amount > self.__balance:
            print("잔액이 모자라 송금할 수 없습니다.")
        else:
            self.__balance -= amount
            receiver = input("송금하실 분의 이름을 입력해 주세요: ")
            print(f"계좌에서 {amount}원이 {receiver}님께 송금되었습니다.")
            print(f"송금 후 잔액: [{self.getBalance()}원]")

    def getBalance(self):
        return self.__balance

# Bank_account 클래스 상속한 ATM 클래스 생성
class ATM(Bank_account):
    def display_menu(self):
        print("1. 계좌 생성")
        print("2. 입금")
        print("3. 출금")
        print("4. 송금")
        print("5. 잔액 확인")
        print("6. 종료")
        menu = int(input("메뉴를 선택해 주세요: "))
        return menu

    def main(self):
        while True:
            try:
                menu = self.display_menu()
                if menu == 1:
                    name = input("이름을 입력해 주십시오.: ")
                    print(f"{name}님, 계좌가 생성되었습니다.")
                elif menu == 2:
                    self.deposit()
                elif menu == 3:
                    self.withdraw()
                elif menu == 4:
                    self.sendMoney()
                elif menu == 5:
                    print(f"현재 잔액: [{self.getBalance()}원]") 
                elif menu == 6:
                    print("프로그램을 종료합니다.")
                    break
            except ValueError:
                print("잘못된 숫자를 입력하였습니다.")
            finally:
                print("저희 은행을 이용해 주셔서 감사합니다.")

# 인스턴스 생성
customer_1 = ATM()
customer_1.main()

위의 코드를 실행해보면

 

 

동작이 잘 되는 것을 확인할 수 있다.


다음 내용

 

[파이썬] 파이썬 기초 - 주사위 보드 게임 만들기

이전 내용 [파이썬] 파이썬 기초 - 클래스 보완 (은행 계좌, ATM 프로그램 만들기)이전 내용 [파이썬] 파이썬 기초 - 클래스 보완클래스 이전 내용 [파이썬] 파이썬기초: 클래스 - 1클래스(Class) 와

puppy-foot-it.tistory.com

 

 

728x90
반응형