210302_B책_이어붙이기 대신 서식화

정재현·2021년 3월 2일
0

TIL2

목록 보기
2/79

후~ 오늘은 살짝 복잡한 챕터이다.
2.7 <이어붙이기 대신 서식화>
서식화를 사용하라는 챕터인데, 예제코드를 먼저 보자면

class Mission {
 Logbook logbook;
 LocalDate start;
 
 void update(String author, String message) {
  LocalDate today = LocalDate.now();
  String month = String.valueOf(today.getMonthValue());
  String formattedMonth = month.length() < 2 ? "0" + month : month;
  String entry = author.toUpperCase() + ": [" + formattedMonth + "-" +
          todat.getDayOfMonth() + "-" + today.getYear() + "](Day " +
          (ChronoUnit.DAYS.between(start, today) + 1) + ")> " +
          message + System.lineSeparator();
  logbook.write(entry);
 }
}

어후 치는데 힘들었다.
코드 자체는 별로 복잡하지 않으나 엄청 복잡해보이고.
깊은 중첩도, 조건 분기도 없고 심지어 변수명이나 메서드명도 의미를 지닌다.
그런데도 읽기 어려운 이유는 더하기와 따옴표, 공백, 각종 기호들이 많아 실제로 어떻게 처리되는지
읽기 너무 너무 너무 혼란스럽다.
그런만큼 실수하기도 더 가능성이 높아지는 것이다.

class Mission {
 Logbook logbook;
 LocalDate start;
 
 void update(String author, String message) {
  final LocalDate today = LocalDate.now();
  String entry = String.format("%S: [%tm-%<te-%tY](Day %d)> %s%n",
  author, today,
  ChronoUnit)
  logbook.write(entry);
 }
}

=>(참고로 ChronoUnit.DAYS.between(start, today)은 두 개의 특정 날짜 사이의 차이를 일수(days)로 구하려 사용한다. 정말 다양한거 많다. 좋네)

위처럼 서식문자열을 사용하면 문제를 해결하는데 있어 자바뿐만 아니라 대부분의 현대 프로그래밍 언어에서
사용할 수 있다고 한다.
핵심은! String 레이아웃(String을 어떻게 출력할지)과 데이터(무엇을 출력할지)를 분리하는 것.
서식문자열은 %로 표기하는 특수 위치 지정자(placeholder) 문자를 사용해 하나의 블록으로
일관된 String을 정의한다.
예를들어 String.format()이나 System.out.printf()와 같은 포맷 메서드는 위치 지정자가 문자가 포함된
데이터를 String 뒤에 나열한 순서대로 받아들입니다.

특수 지정자를 보자면,

위 예제에서 
%S는 toString() 메서드를 사용해 객체를 대문자 String으로 변환. => 매개변수인 author을 처리.
월을 나타내는 %tm, 날짜를 나타내는 %te, 연도를 나타내는 %tY => 날짜 변수인 today을 처리.
< 문자를 추가함으로써 위치 지정자 세 개가 같은 입력 데이터를 읽게 함.
%d => 십진 값 처리, %s => String을 받아들임. n% => 은 행 바꿈.

확실히 이렇게 서식화하여 나열해도 어렵긴 마찬가지다.

"%S: [%tm-%<te-%tY](Day %d)> %s%n"

난 사실 이렇게 봐도 단번에 알아내지 못한다. 초보자들은 다 그렇지 않을까..?
하지만 이 방식은 문서화가 잘 된 표준이자 어수선한 코드를 해결할 훌륭한 대안이라고 한다.
그렇다면 앞으로 관련된 작업을 할 때는 자바 API를 살펴보고 그렇게 행해야겠지..?

오늘의 코멘트: 이해는 했지만 이렇게 써야한다니..

profile
"돈받고 일하면 프로다"

0개의 댓글