JShell이란 무엇인가?
JShell은 명령줄에서 자바 코드를 입력하는 즉시 실행 결과를 화면에 출력해 주는 대화형 자바 셸 도구입니다. JShell은 REPL(Read Evaluate Print Loop) 방식으로 동작하며 명령 프롬프트에서 바로 실행할 수 있습니다. 명령 프롬프트에 "jshell"이라고 입력하면 JShell이 시작되고, "/exit" 명령을 입력하면 종료됩니다.
특히 JShell에서는 간단한 코드 조각을 테스트할 때 별도의 main() 메서드를 작성할 필요가 없습니다. 클래스 파일을 만들고 컴파일하는 과정 없이 코드를 한 줄씩 입력하며 곧바로 결과를 확인할 수 있어, 문법 학습이나 아이디어 검증에 매우 유용합니다.
JShell에서 컬렉션 다루기
JShell을 활용하면 List, Map, Set과 같은 주요 컬렉션도 손쉽게 테스트할 수 있습니다. 아래 예제에서는 ArrayList를 다양한 시나리오별로 구현해 봅니다.
예제
C:\Users\User\Desktop\Java 9 QNA>jshell
| Welcome to JShell -- Version 9.0.4
| For an introduction type: /help intro
jshell> ArrayList<String> list = new ArrayList<String>();
list ==> []
jshell> list.add("Jai");list.add("Adithya");list.add("Raja");list.add("Chaitanya");
$2 ==> true
$3 ==> true
$4 ==> true
$5 ==> true
jshell> list
list ==> [Jai, Adithya, Raja, Chaitanya]
jshell> list.isEmpty()
$7 ==> false
jshell> list.get(3)
$8 ==> "Chaitanya"
jshell> list.get(9)
| java.lang.IndexOutOfBoundsException thrown: Index 9 out-of-bounds for length 4
| at Preconditions.outOfBounds (Preconditions.java:64)
| at Preconditions.outOfBoundsCheckIndex (Preconditions.java:70)
| at Preconditions.checkIndex (Preconditions.java:248)
| at Objects.checkIndex (Objects.java:372)
| at ArrayList.get (ArrayList.java:440)
| at (#9:1)
jshell> list.size()
$10 ==> 4
jshell> if(list.isEmpty()) System.out.println("Empty"); else System.out.println("Not Empty");
Not Empty실행 결과 단계별 해설
1. ArrayList 생성: ArrayList<String> 타입의 객체를 생성합니다. 변수 list는 비어 있는 상태([])로 초기화됩니다.
2. 요소 추가: add() 메서드로 "Jai", "Adithya", "Raja", "Chaitanya" 네 개의 문자열을 순서대로 추가합니다. 각 호출은 성공 여부를 나타내는 true를 반환하며, JShell은 사용자가 입력한 값마다 $2, $3처럼 자동 참조 번호를 부여합니다.
3. 전체 목록 확인: 변수 이름만 입력하면 현재 저장된 요소 목록 [Jai, Adithya, Raja, Chaitanya]를 바로 확인할 수 있습니다.
4. 빈 리스트 검사: isEmpty() 메서드는 리스트가 비어 있는지 검사하며, 요소가 있으므로 false를 반환합니다.
5. 특정 요소 조회: get(3)은 인덱스 3(네 번째) 위치의 요소인 "Chaitanya"를 반환합니다. 인덱스는 0부터 시작한다는 점에 유의하세요.
6. 범위를 벗어난 인덱스 접근: get(9)처럼 존재하지 않는 인덱스에 접근하면 java.lang.IndexOutOfBoundsException이 발생합니다. JShell은 예외 발생 시 스택 트레이스까지 상세하게 출력해 주므로 오류 원인을 파악하기 쉽습니다.
7. 크기 확인: size() 메서드는 리스트에 저장된 요소 개수인 4를 반환합니다.
8. 조건문 실행: isEmpty() 결과에 따라 "Empty" 또는 "Not Empty"를 출력하는 if-else 문도 JShell에서 정상적으로 동작하며, 여기서는 "Not Empty"가 출력됩니다.
정리
이처럼 JShell을 사용하면 컴파일과 실행 과정 없이 ArrayList의 생성, 요소 추가·조회, 예외 발생 상황까지 빠르게 실험해 볼 수 있습니다. 자바 컬렉션 API를 익히거나 짧은 코드를 검증할 때 JShell을 적극적으로 활용해 보세요.