JShell 도구에서 작업을 수행하면 명령 실행 성공 여부, 오류 발생 여부, 생성된 변수의 타입과 값 등이 반환 메시지로 화면에 표시됩니다. 이러한 피드백 방식은 "/set feedback" 명령을 통해 사용자가 원하는 대로 설정할 수 있습니다.
이 명령을 실행하면 현재 설정되어 있는 피드백 모드와 함께 사용 가능한 모든 피드백 모드 목록이 표시됩니다.
jshell> /set feedback | /set feedback normal | | Available feedback modes: | concise | normal | silent | verbose
JShell에는 총 네 가지 피드백 모드가 제공되며, 각각의 특징은 아래와 같습니다.
1) /set feedback normal — 기본 피드백 모드
normal 모드는 JShell의 기본값(default)으로 설정된 피드백 방식입니다. 표현식을 평가하면 JShell은 해당 결과값과 그 값이 저장된 내부 변수를 함께 반환합니다. 변수를 생성하는 경우에는 변수 이름과 저장된 값을 출력하고, 메서드나 클래스 같은 데이터 타입을 생성할 때는 어떤 타입이 만들어졌는지 알려주는 메시지를 표시합니다.
jshell> /set feedback normal
| Feedback mode: normal
jshell> 5 + 5
$1 ==> 10
jshell> int i = 20
i ==> 20
jshell> int sum(int a, int b) {
...> return a + b;
...> }
| created method sum(int,int)
2) /set feedback verbose — 가장 상세한 피드백 모드
verbose 모드는 네 가지 모드 중 가장 많은 정보를 제공하는 방식입니다. 명령문을 평가하면 결과값과 내부 변수 이름뿐만 아니라 해당 표현식의 타입까지 함께 출력합니다. 변수 생성 시에도 마찬가지로 변수명, 값, 타입 정보가 모두 표시됩니다. 반면 메서드나 클래스 같은 데이터 타입을 생성할 때의 출력은 normal 모드와 동일합니다.
jshell> /set feedback verbose
| Feedback mode: verbose
jshell> 2 + 2
$1 ==> 4
| created scratch variable $1 : int
jshell> String str = "Tutorix"
str ==> "Tutorix"
| created variable str : String
jshell> int div(int a, int b) {
...> return a/b;
...> }
| created method div(int,int)
3) /set feedback concise — 최소한의 정보만 표시하는 모드
concise 모드는 최소한의 정보만 화면에 보여주는 방식입니다. 표현식을 평가하면 생성된 내부 변수의 이름과 계산 결과만 출력합니다. 반면 변수, 메서드, 클래스 같은 데이터 타입을 생성할 때는 JShell이 별도의 확인 메시지를 표시하지 않습니다(단, 코드에 오류가 있는 경우는 예외).
jshell> /set feedback concise jshell> 2 + 2 $1 ==> 4 jshell> int i = 10; jshell> float y = "xyz"; | Error: | incompatible types: java.lang.String cannot be converted to float | float y = "xyz"; | ^---^
4) /set feedback silent — 아무것도 표시하지 않는 모드
silent 모드는 어떠한 정보도 화면에 출력하지 않는 방식입니다. 평가할 표현식을 입력하면 JShell은 결과를 내부 변수에 저장하지만, 그 결과를 화면에 보여주지 않습니다. 데이터 타입(변수, 메서드, 클래스) 생성 시에도 마찬가지로 모든 처리가 내부적으로만 이루어집니다. 오류가 발생한 경우에만 에러 메시지가 출력됩니다.
jshell> /set feedback silent
-> 3+3
-> int x = 7
-> int sum(int x, int y) {
>> return x + y;
>> }
-> double y = "abc";
| Error:
| incompatible types: java.lang.String cannot be converted to double
| double y = "abc";
| ^---^
->
이처럼 JShell의 피드백 모드를 상황에 맞게 활용하면 학습 시에는 verbose 모드로 자세한 정보를 확인하고, 실제 개발 환경에서는 concise나 silent 모드로 깔끔하게 작업할 수 있습니다.