이번 게시글에서는 은행입출금관리 프로그램을 만들어보려한다.
[객체지향 프로그래밍 언어 구현 연습]
[accountApp] - 은행입출금관리 프로젝트 생성
[Account class] <<use>> [AccountMgr class]
(dependency)
1. 계좌를 관리할 수 있는 데이터 클래스 Account 클래스를 생성한다.
2. 계좌에 관한 데이터를 처리하는 클래스 AccountMgr 클래스를 생성한다.
**(데이터와 데이터를 처리하는 클래스는 따로 두어야한다.)
===== 은행 입출금 관리 시스템 =====
1. 계좌계설
2. 입금
3. 출금
4. 잔액조회
5. 전체 계좌 조회
6. 종료
항목을 선택하세요.
프로그램 실행 시 콘솔(Console) 화면에서 번호를 누른 후 각 설계에 맞게 동작하도록 구현하세요.
[STEP1] 입출금관리프로그램 기본 틀 및 반복문 종료
· Account 클래스에는 인스턴스 변수, 디폴트 생성자 메소드, 매개변수 생성자 메소드를 생성한다.
· AccountMgr 클래스에는 do ~ while 문을 이용하여 해당번호에 맞는 출력문이 나오도록 코딩을 한다.
1. Scanner 클래스와 isExit 변수는 main() 메소드에서만 사용할 수 있는 로컬(지역) 변수이다.
2. do ~ while 문에 의해 먼저 실행문을 한 번 실행한 후 조건이 true이면 다시 실행문을 반복하고, 조건이 false이면 반복문
에서 빠져나온다.(case 6을 실행했을 때, boolean형 변수 isExit은 true로 값을 변경하고 이후 반복문의 while()
조건식에 true의 반대는 false이기때문에 반복문이 종료된다.
3. int형 변수 menu에 키보드로 입력값을 받고 항목을 선택 시 nextInt()를 사용하지않는 이유는 간혹 에러가나기때문에
일부러 문자열 한줄씩 입력받는 nextLine()을 다시 int형으로 형변환하여 사용한다.
** nextInt() 오류 원인 : Scanner.nextInt() 메소드가 사용자가 입력한 enter(개행문자) 를 제거하지 않기때문이다.
사용자는 콘솔창에 숫자입력 후 enter를 누르는데, 이때 nextInt() 가 숫자는 입력받고,
개행문자는 제거하지않은 채 그대로 남겨둔다.
[STEP2] 계좌개설
· Account[] 클래스 배열을 선언하고 배열의 길이를 100으로 지정한다.
(몇명의 계좌를 개설할지 모르기때문에 100명까지 계좌를 개설할 수 있도록한다.)
· 계좌를 개설하면 배열의 인덱스를 1씩 증가시킨다.
· main() 메소드에 do ~ while 문, switch ~ case 문을 이용하여 키보드로 숫자를 입력받아서 1번일 때, 계좌가 개설되는
메소드를 생성한다.
· createAccount() 메소드 호출부에서 넘어와 계좌를 생성할 때 계좌번호, 이름, 비밀번호, 잔고를 입력받아 데이터를 관리
하는 Account 클래스에 인스턴스 변수에 저장하기위해 인스턴스를 생성하여 계좌정보를 전달한다.
· 계좌개설할 수 있는 배열과 공간의 번호(index)를 클래스 변수로 만들어서 클래스 내에서 모두 사용할 수 있도록 한다.
· 계좌가 개설되면 1차원배열 변수 accounts의 인덱스가 +1 될수있도록 코드를 작성한다.
(accounts 배열의 인덱스가 증가하면서 인스턴스 정보를 저장하기 위함이다.)
[STEP3] 전체 계좌 조회
· 메소드 호출부
· 메소드가 호출되면 여기로 이동되어 반복문을 통해 계좌가 개설된만큼 printAccounts() 메소드를 호출한다.
· 데이터를 관리하는 Account 클래스에 전체 계좌를 조회하는 메소드인 printAccounts() 메소드를 생성한다.
· 정확히 계좌를 개설해서 계좌정보를 저장하고 저장된 전체계좌정보를 불러오는지 테스트한 화면이다.
[STEP4] 입금
· 메소드 호출부
· 입금을 위해서는 등록된 계좌번호와 일치하는지 확인을 해야하기때문에 등록된 계좌를 확인하는 메소드
findAccountByAccountNumber() 메소드를 생성하여 Account 클래스 변수 account에 저장한다.
· 입금을 하기위해 입력한 계좌번호에 해당하는 고객계좌를 조회해서 계좌번호가 등록이 되어있다면 계좌정보를 리턴하고 그렇지
않다면 null값을 리턴한다.
· null값이 리턴되었을 경우 "계좌번호를 정확히 입력해주세요."라는 문구를 출력하고 메소드를 빠져나오는 키워드 return을
사용한다.
· 등록된 계좌번호가 있다면 금액을 입력하고 입금을 처리해주는 메소드인 deposit으로 입금액을 전달한다.
· 그리고 입금처리가 된것을 확인하기위해 "입금이 완료되었습니다."라는 문구를 출력한다.
· Account 클래스에 정의해놓은 입금하다의 메소드 deposit으로 매개인자를 전달하여 잔고를 의미하는 인스턴스 변수
balance에 저장한다.
· 여기서 주의해야할게있는데 입금은 기존 잔고에 금액이 더해지므로 += 연산자를 사용해야한다.
· 입금은 따로 리턴해줘야할게 없기때문에 리턴타입은 void로 한다.
· 계좌를 개설하고, 등록된 계좌인지 아닌지 체크한다음 등록된 계좌이면 입금할 금액을 입력하고 기존 잔고에서 입금액만큼
+(plus)된 금액이 출력되는지 테스트하는 화면이다.
[STEP5] 출금
· 메소드 호출부
· 입금때와 마찬가지로 계좌번호를 입력하여 등록된 계좌에 없다면 "계좌번호를 정확히 입력해주세요."라는 문구가 출력된다.
· 위에서 등록된 계좌번호이면 출금할 금액을 입력 후 출금을 할 수 있는 메소드인 withdraw() 메소드를 호출한다.
· 출력하고 싶은 금액이 매개인자로 전달되면 인스턴스 변수 balance에 매개인자만큼 -= 연산자를 사용한다.
· 계좌를 개설하고, 등록된 계좌인지 아닌지 체크한다음 등록된 계좌이면 출금할 금액을 입력하고 기존 잔고에서 출금액만큼
-(minus)된 금액이 출력되는지 테스트하는 화면이다.
[STEP6] 잔액조회
· 메소드 호출부
· 계좌번호를 입력받아 계좌가 등록된 계좌가 아니면 계좌번호를 다시 입력하고 등록된 계좌이면 잔고에 있는 현재 잔액을 출력한다.
· 잔고에 있는 현재 잔액을 출력하는 메소드인 getBalance()는 Account 클래스에 생성한다.
· 계좌를 개설하고, 등록된 계좌인지 아닌지 체크한다음 등록된 계좌이면 잔고에 있는 잔액이 얼마있지를 테스트하는 화면이다.
※ 이상으로 입출금관리 프로그램을 간단하게 만들어보았다. 프로그램을 만들면서 이전까지 자바라는 언어를 다루는데 어려웠던 부분이 있었지만, 이 게시글을 통해 자바라는 객체지향 프로그래밍 언어를 다루는데 조금은 더 이해한 것 같다.