백준을 java로 푸시다 보면, 파일로 입력받고 싶습니다. 결과를 파일로 출력하고 싶습니다. 이런 경우가 정말 많습니다. 그리고 문제 출제를 하다 보면, 명령어 형식으로 프로그램을 실행해야 할 경우가 왕왕 있습니다. 어떻게 해야 하는지 간단하게 알아보겠습니다. intellij 22.03 버전으로 실습했음을 유념해 주시면 되겠습니다.


 먼저 src 폴더에 들어가 보겠습니다.

 

 이 폴더에는 Main.java가 있습니다. 새로운 객체 A를 생성한 다음에, a의 내용을 출력합니다.

 

 다음 A.java를 보겠습니다. 여기에는 그냥 A 객체를 출력하라 했을 때 a = {a의 값} 형태로 출력하게 하는 toString만 재정의 되어 있습니다.

 

 Run/Debug Configurations에 들어갑니다. Build and run 탭에 보시면, 오른쪽에 Modify options가 있습니다. 이 중, 입력을 파일을 통해서 받으려면, Redirect input을 체크표시 해 줍니다.

 

 

 다음에, Redirect input from에서, 입력 파일의 경로를 찾아서 채워줍니다.

 

 

그러면, 콘솔로부터 입력받는 것이 아니라, example의 1.in으로부터 입력받게 됩니다.

 

Main.java를 실행시켰습니다. 그랬더니, a = 5가 나왔습니다.

 

 output도 파일로 떨구고 싶으면 어떻게 하면 될까요? 이번에는 Logs의 Save console output to file에 체크 표시 해 주면 됩니다.

 

 어느 파일에 출력할 것인지를 채워넣은 다음에, 플레이 버튼을 눌러주면 됩니다.

 


 보너스. 명령어 형태로 실행시킬려면 어떻게 해야 할까요? 별로 안 쓰일 것 같지만 문제 출제를 하면 예상 외로 상당히 많이 쓰입니다. 

 

 프로젝트의 루트 폴더에서 src 폴더로 이동한 다음에 javac Main.java를 입력해 보겠습니다.

 

 그러면 A.class와 Main.class가 새로 생성됩니다. 그런데, 사실 더 좋은 방법이 있습니다. 루트 폴더에서 아래와 같이 입력해 보겠습니다.

 

 javac src/*.java는 src 폴더에 있는 모든 java 파일을 컴파일 합니다. A.java와 Main.java가 있었기 때문에, 이 둘을 컴파일 해서, 클래스 파일로 만들어줍니다. 자바로 구현 문제 푸실 때 보통 이렇게 하시지 않나 싶습니다. 그래서 이 정도만 알아두셔도 무난하겠습니다. 다음에, java로 class 파일을 실행시켜 보겠습니다.

 

 옵션을 보면, -classpath 디렉토리가 있습니다. 클래스 검색 경로를 의미하는데, Main은 src에 있으니, -classpath 옵션으로 src를 주겠습니다. 그리고 제가 실행시킬 것은 Main이므로, java -classpath src Main을 입력하겠습니다.

 

 a = 3이 나옵니다.

 

 이제, 입력을 받아서 출력하는 간단한 프로그램을 만들었습니다. Scanner를 이용하여, n 하나를 입력받으면, 7번째 줄에서 a = {n}을 출력합니다. git bash로, <과 > 등으로 매우 손쉽게 redirection이 되므로 이를 이용해 보겠습니다.

 

 

 1.in에는 3이 있습니다. 고로 1.in에서 입력을 받는다면 3이 하나 들어갈 겁니다.

 

 java -classpath src Main < 1.in을 입력해 보겠습니다. 그랬더니 a = 3이 입력되었습니다. 이제, 백준에서 java로 문제를 풀 때, 리다이렉션도 툴로 손쉽게 할 수 있겠네요. 그리고 솔루션만 있다면 test case input과 output도 손쉽게 만들 수 있겠습니다.