250119TIL

유은호·2025년 1월 20일

System.out.Print

문제

현재로서는 크게 와닿지 않지만 System.out.print을 사용하지 않는것을 권장받고 이유에 관해 찾아보았습니다. 가장 큰 이유로는 스레드간 락이 발생한다는 점과 휘발성이라 로그가 남지 않고 로그레벨도 지정 할 수 없어 현업에는 쓰이지 않는 다는 점이 있었습니다.

해결방안

System.out.print를 사용을 지양하고 Logger를 이용. Java Library에서 제공하는 Logger가 아닌 SLF4J를 의존성에 추가하고 logback.xml을 이용하여 System.out.print처럼 사용할수 있도록 설정함.

결과

타임스탬프, 로그 수준, 스레드 등 다양한 정보와 빨간색으로 로그가 뜨던 것이 제대로 기존의 sout가 동일하게 콘솔에 찍히는 것이 확인되었습니다.

이중 While

문제

기본적으로 프로그램을 돌리기 위한 루프 While문 내에서 제대로 된 유저의 인풋을 받을 때까지 다시 한번 While문이 돌아가는 것은 유지관리 및 코드 가독성이 떨어지고, 성능 마저도 떨어트릴 위험이 있었습니다.

해결방안

프로그램의 기본 루틴을 "1. 화면출력" & "2. 유저입력처리" 두가지로만 제어
유저입력처리를 받으면 그에 맞는 화면출력을 하도록하면 유저의 입력이 유효하지 않은 입력이라고 하여도 그에 맞춰 처리하고 다시 화면출력을 하여 이중 While로 빠지지 않도록 수정하였습니다.
또한 현재 출력할 화면이 어떤 것인지 제어하기 위해 KioskStatus enum으로 관리하도록 하였습니다.

결과

이중 While문이 제거되었고, 프로그램의 플로우는 의도한 대로 유지가 되도록 수정되었습니다.

코딩 Depth

문제

함수가 함수를 부르고 그 함수가 또 다른 함수를 부르고...
고쳐야하는데... 쉽지않네...

0개의 댓글