Java 클래스 구현 및 설계

본 문서는 Java를 이용한 클래스 구현 및 설계 연습을 다룹니다. 첫 번째 연습에서는 은행 계좌를 나타내는 Account 클래스를 완성하고, 두 번째 연습에서는 주민등록번호를 기반으로 생년월일과 나이를 계산하는 IdentityCard 클래스를 설계합니다.

연습 1: 은행 계좌 클래스 구현

1. Account 클래스 완성

Account.java 파일은 은행 계좌를 표현하는 클래스입니다. 다음 요구사항에 맞춰 클래스의 일부 메서드를 완성하세요. 이 연습에서는 프로그램 실행 및 테스트는 포함되지 않습니다.

  • toString() 메서드: 계좌 소유주 이름, 계좌 번호, 잔액 정보를 포함하는 문자열을 반환하도록 구현합니다.
  • chargeFee() 메서드: 계좌에서 서비스 수수료를 차감하도록 구현합니다.
  • chargeFee() 메서드 수정: 서비스 수수료 차감 후 변경된 계좌 잔액을 반환하도록 수정합니다.
  • changeName() 메서드: 계좌 소유주의 이름을 변경하는 기능을 구현합니다. 이 메서드는 새로운 이름을 문자열 매개변수로 받습니다.

2. ManageAccounts 클래스 활용

ManageAccounts.java 파일은 Account 클래스를 사용하는 예제 프로그램입니다. 주석에 따라 코드를 완성하여 Account 클래스의 기능을 테스트하세요.

Account.java (완성된 코드)


package J08;

public class Account {
    private double balance;
    private String name;
    private long acctNum;

    public Account(double initBal, String owner, long number) {
        balance = initBal;
        name = owner;
        acctNum = number;
    }

    public void withdraw(double amount) {
        if (balance >= amount) {
            balance -= amount;
        } else {
            System.out.println("잔액이 부족합니다.");
        }
    }

    public void deposit(double amount) {
        balance += amount;
    }

    public double getBalance() {
        return balance;
    }

    public String toString() {
        return "이름: " + name + ", 계좌 번호: " + acctNum + ", 잔액: " + balance;
    }

    public void chargeFee(double fee) {
        balance -= fee;
    }
    
    public double chargeFeeAndReturnBalance(double fee) {
        balance -= fee;
        return balance;
    }

    public void changeName(String newName) {
        name = newName;
    }
}

ManageAccounts.java (완성된 코드)


package J08;

public class ManageAccounts {

    public static void main(String[] args) {
        Account acct1 = new Account(1000, "Sally", 1111);
        Account acct2 = new Account(500, "Joe", 1112);

        acct2.deposit(100);
        System.out.println("Joe의 계좌 잔액: " + acct2.getBalance());

        acct1.withdraw(50);
        System.out.println("Sally의 계좌 잔액: " + acct1.getBalance());

        acct1.chargeFee(15);
        acct2.chargeFee(15);

        System.out.println("Sally의 계좌 잔액 (수수료 차감 후): " + acct1.getBalance());
        System.out.println("Joe의 계좌 잔액 (수수료 차감 후): " + acct2.getBalance());

        acct2.changeName("Joseph");
        System.out.println(acct2.toString());
        System.out.println(acct1.toString());
    }
}

연습 2: 신분증 정보 추출 설계

주어진 주민등록번호에서 생년월일과 나이를 추출하는 Java 프로그램을 작성합니다. ReadIdCard 클래스와 IdentityCard 클래스를 활용하며, 다음 요구사항을 만족하도록 코드를 완성해야 합니다.

  • 주민등록번호의 6번째부터 14번째 자리까지는 생년월일을 나타냅니다.

IdentityCard.java (완성된 코드)


package J08;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class IdentityCard {

    public static void main(String[] args) throws ParseException {
        ReadIdCard idReader = new ReadIdCard();
        String idNumber = idReader.getIdCard();
        System.out.println("주민등록번호: " + idNumber);

        String year = idNumber.substring(6, 10);
        String month = idNumber.substring(10, 12);
        String day = idNumber.substring(12, 14);
        
        System.out.println("생년월일: " + year + "년 " + month + "월 " + day + "일");

        int age = calculateAge(year, month, day);
        System.out.println("나이: " + age);
    }

    public static int calculateAge(String birthYear, String birthMonth, String birthDay) {
        Calendar today = Calendar.getInstance();
        Calendar birthDate = Calendar.getInstance();

        birthDate.set(Integer.parseInt(birthYear), 
                      Integer.parseInt(birthMonth) - 1, // 월은 0부터 시작
                      Integer.parseInt(birthDay));

        int age = today.get(Calendar.YEAR) - birthDate.get(Calendar.YEAR);

        // 생일이 지나지 않았으면 나이에서 1을 뺌
        if (today.get(Calendar.DAY_OF_YEAR) < birthDate.get(Calendar.DAY_OF_YEAR)) {
            age--;
        }
        
        return age;
    }
}

ReadIdCard.java (완성된 코드)


package J08;
import java.util.Scanner;

public class ReadIdCard {
    private String idCardNumber;

    public String getIdCard() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("주민등록번호를 입력하세요: ");
        this.idCardNumber = scanner.nextLine();
        // TODO: 입력된 주민등록번호의 유효성 검사 로직 추가 (선택 사항)
        return this.idCardNumber;
    }
}

태그: java 객체 지향 프로그래밍 클래스 메서드 문자열 처리

8월 12일 04:39에 게시됨