본문 바로가기
  • Let's study
알고리즘/Java

[Java] Scanner와 System.out 입출력 대체하기

by 코딩고수이고파 2026. 7. 23.

테스트를 위한 입력과 출력 변경

코드를 테스트하려면 매번 키보드로 입력하고 콘솔 출력을 확인하는 것은 번거롭다.

자바에서는 Scanner 입력을 문자열로 변경하고, System.out 출력을 문자열로 받아 자동으로 테스트해볼 수 있다.

Scanner의 입력을 문자열로 변경

기존에는 키보드 입력을 사용했지만 테스트에서는 미리 준비한 문자열을 입력으로 사용할 수 있다.

 

String input = """
        등록
        너 자신을 알라
        """;

Scanner sc = new Scanner(input);

 

이렇게 하면 nextLine()을 호출할 때마다 문자열을 한 줄씩 읽는다.

System.out의 출력을 문자열로 변경

기존에는 모든 출력이 모니터(콘솔)로 전달되지만 테스트에서는 출력 결과를 문자열에 저장하여 비교할 수 있다.

 

System.out.println("하하하");  //콘솔 출력

PrintStream originalOut = System.out; // 기존 콘솔 출력을 저장한다.

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); //출력을 저장할 메모리 공간을 생성
PrintStream printStream = new PrintStream(outputStream); //출력을 메모리 공간으로 보내기 위한 PrintStream을 생성	

System.setOut(printStream); // System.out의 출력 대상을 콘솔에서 메모리로 변경

System.out.print("하하하");

String outStr = outputStream.toString(); //저장된 출력 내용을 문자열로 가져오기

System.setOut(originalOut); // 출력 대상을 다시 콘솔로 복원
printStream.close();

 

출력된 문자열을 원하는 결과와 비교하여 테스트할 수 있다.

 

if (outStr.equals("하하하")) {
    System.out.println("출력 결과가 일치합니다.");
} else {
    System.out.println("출력 결과가 일치하지 않습니다.");
}

 

이처럼 입력과 출력을 문자열로 변경하면 사용자 입력 없이 프로그램을 실행하고, 출력 결과까지 자동으로 검증할 수 있어 테스트 코드를 작성하기 편리하다.

 

 

'알고리즘 > Java' 카테고리의 다른 글

[Java] 오버로딩(Overloading)  (0) 2026.07.23
레이어드 아키텍처  (0) 2026.07.22
[Java] try-catch  (0) 2026.07.21
[Java] 자바 스트림, 람다  (0) 2026.07.20
[Java] 캡슐화(Encapsulation)  (0) 2026.07.15

댓글