모든 거래 내역의 합 계산하기

2024. 6. 21. 22:05WebBack/Software 코드 분석

입출금 내역 분석기 요구 사항  경로
CSV + 입출금 내역 분석기 요구 사항 https://ycraah.tistory.com/25

 

기능: 모든 거래 내역의 합 계산하기
클래스 이름 : BankTransactionAnalyzerSimple
구현 계획: 
1. CSV 파일이 존재하는 디렉터리 경로를 변수 RESOURCE에 저장한다. 
2. CSV 파일 이름을 사용자가 직접 입력한다. 
3. 파일의 내용을 한 줄 씩 읽어 변수 lines에 저장한다.
4. 변수 lines를 반복문을 통해 ' , '을 기준으로  파싱한다.
5. 파싱한 내용 중에 금액만 따로 변수 amount에 저장한다. 
6. 변수 amount에 저장된 값을 모두 total에 저장하여 합한다. 
7. total에 저장된 값을 출력한다. 

 

1. CSV 파일이 존재하는 디렉터리 경로를 변수 RESOURCE에 저장한다. 

private static final String RESOURCES = "src/main/resources/";

 

 

기본 디렉터리 경로이다. 기존의 예제와 달리 절대경로와 상대경로가 아니라 뜬금없이 src부터 경로를 시작해서 의아했는데 maven에서는 위와 같은 경로가 가능한 것 같다. (추정)

 

2. CSV 파일 이름을 사용자가 직접 입력한다. 

public static void main(final String...args) throws IOException {
  final Path path = Paths.get(RESOURCES + args[0]);

 

메인 메서드의 매개변수가 평소처럼 String[] args이 아니라 String ... args라는 처음보는 형식을 사용하였다. 이는 가변인자(varargs)라는 것으로 인자가 몇 개 입력될 지 알 수 없을 때에 사용한다. 

 

커맨드 라인으로 입력받는 내용에 관해서는 다음을 참조하기 바란다. (<<정석 기초편>>, p.145)

 

Path와 Paths는 이 코드에서 처음 보는 내용이다. 사용하는 방식은 다음과 같다. 

Path path = Paths.get("경로")

이를 통해 변수 path에 파일의 경로를 저장할 수 있다. 

 

3. 파일의 내용을 한 줄 씩 읽어 변수 lines에 저장한다.

final List<String> lines = Files.readAllLines(path);

 

 

Files.readAllLines("Path 객체")은 파일의 내용을 한 줄씩 읽어낸다. 

이를 변수 lines에 저장한다. 파일의 내용이 어떻게 바뀔지 알 수 없으므로 List를 활용하여 저장하도록 하였다.

 

4. 변수 lines를 반복문을 통해 ' , '을 기준으로  파싱한다.

5. 파싱한 내용 중에 금액만 따로 변수 amount에 저장한다. 
6. 변수 amount에 저장된 값을 모두 total에 저장하여 합한다. 

double total = 0d;
for(final String line: lines){ //예시 2024-01-30, -10, 교통비
  final String[] columns = line.split(",");
  final double amount = Double.parseDouble(columns[1]);
  total += amount;
}

 

먼저, total 값을 계속 변환시킬 예정이므로 for문 밖에서 변수를 선언하였다. 

for문은 다음과 같은 과정으로 진행한다. 

 

lines의 배열을 하나씩 읽는다. -> 그 내용을 line에 저장한다 -> line을 ','을 기준으로 나눈다 -> 3등분으로 나누어 각각 columns 배열에 넣는다 -> 그 중에 금액이 저장된 columns[1]의 값을 amount에 저장한다 -> total이 amount 값에 계속 더한다.  

 

7. total에 저장된 값을 출력한다. 

System.out.println("은행 입출금 내역의 총합은 " + total + "(만원)입니다.");

 

 

출력 결과:
은행 입출금 내역의 총합은 102.0(만원)입니다.

 

 

더 알아보기 경로
Paths 사용법 https://ycraah.tistory.com/20
Files.readAllLines 사용법 https://ycraah.tistory.com/21

 

 

public class BankTransactionAnalyzerSimple {
  private static final String RESOURCES = "src/main/resources/";
  public static void main(final String...args) throws IOException {
    final Path path = Paths.get(RESOURCES + args[0]);
    final List<String> lines = Files.readAllLines(path);
    double total = 0d;
    for(final String line: lines){ //예시 2024-01-30, -10, 교통비
      final String[] columns = line.split(",");
      final double amount = Double.parseDouble(columns[1]);
      total += amount;
    }
    System.out.println("은행 입출금 내역의 총합은 " + total + "(만원)입니다.");
  }
}