JShell이란 무엇인가?
JShell은 Java 9에 새롭게 도입된 Java 셸(Read-Eval-Print Loop, REPL) 도구입니다. 커맨드 라인(command-line) 환경에서 사용자의 입력을 읽어들이고, 즉시 실행한 후 그 결과를 화면에 출력해 주는 대화형(interactive) 도구입니다.
일반적인 Java 클래스를 실행할 때처럼 main() 메서드를 작성하거나 별도의 컴파일 과정을 거칠 필요가 없기 때문에, 간단한 코드 조각이나 API 동작을 빠르게 실험하고 학습하기에 매우 유용합니다.
Map 인터페이스의 특징
JShell에서는 Set, List, Map 등 다양한 컬렉션(Collection)을 손쉽게 구현하고 테스트할 수 있습니다. 그중에서도 Map 인터페이스는 가장 중요하게 다뤄지는 컬렉션 중 하나로, 데이터를 키(key)-값(value) 쌍 형태로 저장합니다.
Map의 핵심 특징은 다음과 같습니다.
- 중복 키 허용 안 함: 같은 키가 두 개 이상 존재할 수 없습니다.
- 키당 최대 하나의 값: 각 키는 최대 하나의 값에만 매핑됩니다.
- 값의 중복은 허용: 서로 다른 키가 같은 값을 가질 수는 있습니다.
예제: 비어 있지 않은(non-empty) Map 만들기
아래 예제는 JShell에서 HashMap을 생성하고 여러 키-값 쌍을 추가한 뒤, 이를 Collections.unmodifiableMap() 메서드를 통해 변경 불가능한(immutable) 맵으로 변환하는 과정을 보여줍니다.
C:\Users\User>jshell
| Welcome to JShell -- Version 9.0.4
| For an introduction type: /help intro
jshell> Map<String, String> map = new HashMap<String, String>();
map ==> {}
jshell> map.put("raja", "ramesh");
$2 ==> null
jshell> map.put("adithya", "sai");
$3 ==> null
jshell> map.put("jai", "dev");
$4 ==> null
jshell> map.put("chaintaya", "krishna");
$5 ==> null
jshell> Map<String, String> immutableMap = Collections.unmodifiableMap(map);
immutableMap ==> {raja=ramesh, jai=dev, chaintaya=krishna, adithya=sai}
jshell>
코드 설명
1. jshell 명령어로 JShell 세션을 시작합니다.
2. HashMap 객체를 생성하여 문자열 타입의 키와 값을 저장할 준비를 합니다. 처음에는 비어 있는 상태({})입니다.
3. put() 메서드를 사용해 네 개의 키-값 쌍을 차례대로 추가합니다. 이때 반환되는 null은 해당 키가 기존에 없었음을 의미합니다.
4. 마지막으로 Collections.unmodifiableMap(map)을 호출하면 원본 맵의 읽기 전용 뷰인 불변 맵(immutable map)이 생성됩니다. 이 맵에 요소를 추가하거나 수정하려 하면 UnsupportedOperationException이 발생합니다.
이처럼 JShell을 활용하면 별도의 프로젝트 설정 없이도 Map과 같은 컬렉션의 동작을 즉석에서 확인할 수 있어 학습과 디버깅에 큰 도움이 됩니다.