티스토리 뷰

Java

jshell 이용하기

LichKing 2018. 7. 1. 14:10
SMALL

java를 이용하여 개발하다보면 단순 테스트 차원의 짧은 코드를 확인해보고싶을때가 있다. 가령 String#substring 메서드가 첫번째인자를 0부터 받는지.. 두번째인자에 들어가는 인덱스를 포함하는지 제외한는지... 등등 같은 상황이다.

나같은 경우는 이럴때 사용하기위한 테스트 프로젝트를 하나 만들어놓고 필요할때마다 main 메서드에 코드를 작성해 돌려보곤한다. 아마 다 비슷하지않을까 생각하는데 java9부터는 jshell 이라는 java shell을 제공해주게됐다.


jshell 은 REPL(Read Evaluate Print Loop)을 제공해주기때문에 즉석으로 테스트코드를 터미널에서 작성해보고, 코드결과를 바로 확인할 수 있는 편리함이 있다.


java9 이상을 설치하고 환경변수를 잡아주면 bin/ 아래에 jshell이 있다. jshell을 실행하고나면 main 메서드없이 자바코드를 넣으면 즉석에서 바로 실행된다.


(난 현재 java10을 이용하고있어서 version 10이라고 뜬다. jshell은 9부터 지원한다.)



아무런 변수도 선언하지않고 "hello" 라는 문자열만 친 상태. 이런경우 $1 변수에 "hello" 가 할당되어 $1 변수를 이용할 수 있다.



$1에 할당된 String 변수를 이용하여 equals 메서드를 실행. 그 결과값은 별다른 변수가 없다면 다시 $3에 할당된다.


그냥 자바 문법을 넣어주면 되니 어려울건 없는데 IDE와는 달리 코드를 일일이 다 타이핑해야하는게 부담이 된다. 그리고 일일이 치다보면 차라리 기존처럼 테스트 프로젝트를 이용하는게 낫다고 생각할 수도있다. LocalDate 클래스를 이용하여 오늘날짜를 출력해보자.


(LocalDate가 import 되어있지 않아 에러가 발생한다. import부터 하나씩 치느니 IDE가는게 낫다.)


하지만 jshell에서도 자동완성, auto import 같은 기능들을 제공해준다.


1. shift+tab, i: auto import

LocalDate 를 입력한 상태에서 shift+tab을 누르고 i를 누르자(i까지 같이 입력하지말자).



이렇게 선택창이 나타나면 1을 선택하면 된다.



import 문구와 함께 now() 메서드를 출력하면 정상적으로 결과가 출력된다.


2. shift+tab, v: 타입 자동완성

할당할 값을 먼저 타이핑하고 타입을 자동완성 하는 기능이다.



이상태에서 shift+tab, v 를 입력하면



이렇게 타입이 자동완성 되고 변수명부분으로 커서가 이동되니 변수명만 입력해주면 된다.


3. shift+tab, m: 메서드 자동완성

표현식을 넣은 상태에서 shift+tab, m 을 입력하면 메서드 반환값으로 자동완성 시켜준다. return type까지 명시해준상태에서 자동완성해주니 타입 자동완성시 변수명만 넣으면 되는것처럼 메서드명만 넣어주면 된다.



음..아직 jshell을 많이 사용해보진않았지만 이 기능은 많이 쓸일이 있을까 싶다.


4. tab

기본적인 자동완성 기능이다. 후보들을 보여주는데 메서드같은경우 (로 시작한다.



필드들은 필드명으로, 메서드들은 (로 끝나는걸 볼 수 있다.


이런 단축키들을 활용하면 jshell을 좀 더 윤택하게 쓸수있을것 같아 정리해본다. 오랜만에 포스팅하나 할 생각으로 정리하긴 했는데 /help shortcuts 을 이용하면 다 나오는 내용들이다.

LIST
댓글
  • 프로필사진 pooding 안녕하세요
    jshell 에서 Shift + Tab 눌렀을때 Unexpected Character after Shift-Tba:Use "i" for auto-import, ... 라고 뜰때
    어떤것을 바꾸어야 하는지 아시나요??
    2018.08.25 22:27
  • 프로필사진 LichKing 일단 한글영어 한번 확인해보시고요. 그 뭐라해야하지 타이밍? 을 한번 조정해보시겠어요? 예를들어 LocalDate localDate = LocalDate.now(); 이 상태에서 한다고치면 저걸 다 친다음 단축키 쓰지마시고 LocalDate 여기까지만 타이핑해놓고 해보세요. 2018.09.01 16:56 신고
댓글쓰기 폼