youngfromnowhere

[Java] 의도한대로 작동하지 않은 clearScreen() 본문

Java

[Java] 의도한대로 작동하지 않은 clearScreen()

곽일땡 2022. 11. 30. 05:27

팀 프로젝트의 요구사항중 정규표현식을 이용하여 예외처리를 하라는 것이 있었다.

이에따라 위와 같이 먼저 regEx 패키지에 여러 형식들을 저장한 뒤, 입력값들이 해당 형식에 부합하는지 확인하고 부합하지 않으면 예외를 던지도록 해두었다.

 

형식에 맞지 않는 값을 입력했을 경우,

팀원들의 테스트에서는 에러메세지가 정상적으로 출력되었다.

 

그러나 터미널에서 내가 테스트했을 때는 에러메세지가 뜨지 않고 화면만 초기화되었다.

원인은 Menu를 화면에 출력하기 전에 화면을 청소하기 위해 MainMenu()에서 호출하는 clearScreen()이었다.

화면에 메인 메뉴를 출력하기 전에 콘솔화면을 청소하기 위해 clearScreen() 메소드가 추가되어 있다.

 

https://www.javatpoint.com/how-to-clear-screen-in-java

 

How to Clear Screen in Java - Javatpoint

How to Clear Screen in Java with Delimiter with java tutorial, features, history, variables, object, programs, operators, oops concept, array, string, map, math, methods, examples etc.

www.javatpoint.com

print() 안의 문자열은 ANSI escape code라는 것으로.. 정확히 뭔지는 아직 잘 모르지만 링크한 자료에 의하면
\033[H는 콘솔의 커서를 왼쪽 맨 위로 이동시키며, \033[2J는 커서부터 screen의 끝까지를 clear한다고 한다.

 

아무튼, 에러메세지가 보이지 않은 이유는 에러메세지를 출력한 다음에 clearScreen()이 호출되면서 화면을 지웠기 때문이었다.

 

따라서 clearScreen()을 주석처리한 뒤에는 정상적으로 에러메세지가 출력되는 것을 볼 수 있었다.

 

그렇다면 왜 팀 동료들의 화면에는 clearScreen()이 호출된 뒤에도 에러메세지가 남아있었던 것일까?

그것은 팀원들의 개발환경인 IntelliJ에서 제공하는 console은 터미널이 아니라 일종의 log file이기 때문이다.

https://stackoverflow.com/questions/46242330/clearing-console-in-intellij-idea

 

Clearing console in Intellij-idea

Could anyone tell me if it's possible to clear console in intellij-idea and how? So far I have tried: System.out.print("\033[H\033[2J"); System.out.flush(); and: Runtime.getRuntime().exec("cle...

stackoverflow.com

위 링크를 보면 질문자는 java code를 이용해 intelliJ-IDEA의 콘솔을 clear할 방법을 찾고 있다. 그 또한 우리가
사용한 clearScreen()과 같은 방법을 쓰려 했다.

System.out.print("\033[H\033[2J");
System.out.flush();

질문자는 원하는 결과를 얻지 못했다. (화면이 청소되지 않았다.) 답변자의 말을 인용하면,
"IntelliJ IDEA console is not a real terminal, so there is no command to clear it from your Java code."

이러한 IntelliJ console의 특성 때문에, 여기에만 의존할 경우 "정확히 내가 의도한 시점 (에러 메세지를 출력하기 이전)에 화면이 청소되는지"를 확인할 수가 없었던 것이다.