자바은행 - 인터페이스 적용

인터페이스는 컴포넌트 기능을 정의한다고 했다.
Bank 클래스를 은행 컴포넌트 기능을 정의하는 인터페이스로 수정한다.
Bank.java를 열고 File - Save As 메뉴를 선택하여 MyBank.java로 저장하고 컴파일 오류를 수정한다. Bank.java를 다시 열고 아래와 같이 수정한다.

Bank.java
package net.java_school.bank;

import java.util.List;

public interface Bank {
        
  //계좌를 생성한다.
  publlic void addAccount(String accountNo, String name);

  //계좌를 생성한다.
  publlic void addAccount(String accountNo, String name, double balance);

  //계좌를 생성한다.
  public void addAccount(String accountNo, String name, String kind);

  //계좌를 생성한다.
  public void addAccount(String accountNo, String name, double balance, String kind);
    
  //계좌번호로 계좌를 찾는다.
  public Account getAccount(String accountNo);
    
  //소유자명으로 계좌를 찾는다.
  public List<Account> findAccountByName(String name);
    
  //모든 계좌를 반환한다.
  public List<Account> getAccounts();
  
}

MyBank.java 파일을 열고 강조된 부분을 참고하여 수정한다.

MyBank.java
package net.java_school.bank;
import java.util.ArrayList;
import java.util.List;

public class MyBank implements Bank {
  private List<Account> accounts = new ArrayList<Account>();

  @Override
  public void addAccount(String accountNo, String name) {
    Account account = getAccount(accountNo);
    if (account != null) throw new DuplicateAccountException("중복된 계좌입니다.");
    accounts.add(new NormalAccount(accountNo, name));
  }

  @Override
  public void addAccount(String accountNo, String name, double balance) {
    Account account = getAccount(accountNo);
    if (account != null) throw new DuplicateAccountException("중복된 계좌입니다.");
    accounts.add(new NormalAccount(accountNo, name, balance));
  }

  @Override
  public void addAccount(String accountNo, String name, String kind) {
    Account account = this.getAccount(accountNo);
    if (account != null) throw new DuplicateAccountException("중복된 계좌입니다.");
    if (kind != null && kind.equals("-")) {
      accounts.add(new MinuslAccount(accountNo, name));
    } else {
      accounts.add(new NormalAccount(accountNo, name));
    }
  }

  @Override
  public void addAccount(String accountNo, String name, double balance, String kind) {
    Account account = this.getAccount(accountNo);
    if (account != null) throw new DuplicateAccountException("중복된 계좌입니다.");
    if (kind != null && kind.equals("-")) {
      accounts.add(new MinusAccount(accountNo, name, balance));
    } else {
      accounts.add(new NormalAccount(accountNo, name, balance));
    }
  }
    
  @Override
  public Account getAccount(String accountNo) {
    int totalAccount = accounts.size();
    for (int i = 0; i < totalAccount; i++) {
      if (accountNo.equals(accounts.get(i).getAccountNo())) {
        return accounts.get(i);
      }
    }
        
    return null;
  }
    
  @Override
  public List<Account> findAccountByName(String name) {
    List<Account> matched = new ArrayList<Account>();
    int totalAccount = accounts.size();
    for (int i = 0; i < totalAccount; i++) {
      if (name.equals(accounts.get(i).getName())) {
        matched.add(accounts.get(i));
      }
    }
        
    return matched;
  }
    
  @Override
  public List<Account> getAccounts() {
    return accounts;
  }

}

메인 메소드의 다음 부분만 수정하면 테스트할 수 있다.

Test.java
Bank bank = new MyBank();
참고
  • New 알기쉬운 자바2(개정판) 저자: 김철회 출판사: 정보문화사