JShell은 Java 및 Java API를 빠르게 프로토타이핑하고 디버깅하며 학습할 수 있는 대화형 셸을 제공합니다. 별도의 main() 메서드를 작성하거나 코드를 실행 전에 컴파일할 필요가 없다는 점이 가장 큰 장점입니다.
클래스 선언 방법
클래스는 일반적인 Java 코드를 작성하는 것과 동일한 방식으로 선언할 수 있습니다. JShell은 클래스 선언이 완료되는 시점을 자동으로 감지하여 처리해 줍니다.
아래 코드 예제에서는 두 개의 필드(매개변수)와 하나의 메서드를 가진 Employee 클래스를 선언합니다.
C:\Users\User>jshell
| Welcome to JShell -- Version 9.0.4
| For an introduction type: /help intro
jshell> class Employee {
...> String empName;
...> int age;
...>
...> public void empData() {
...> System.out.println("Employee Name is: " + empName);
...> }
...> }
| created class Employee다음 코드 예제에서는 Employee 클래스의 객체를 생성하고, empName과 age 필드에 값을 할당한 후 메서드를 호출하는 과정을 보여줍니다.
jshell> Employee emp = new Employee() emp ==> Employee@73846619 jshell> emp.empName = "Adithya" $3 ==> "Adithya" jshell> emp.age = 20 $4 ==> 20 jshell> emp.empData() Employee Name is: Adithya
인터페이스 선언 방법
인터페이스도 클래스 선언과 유사한 방식으로 선언할 수 있습니다. 인터페이스 선언이 완료되면 JShell이 이를 자동으로 감지하여 등록해 줍니다.
아래 코드 예제에서는 세 개의 추상 메서드를 포함하는 Animal 인터페이스를 선언합니다.
jshell> interface Animal {
...> public void eat();
...> public void move();
...> public void sleep();
...> }
| created interface Animal다음 코드 예제에서는 Cat 클래스가 Animal 인터페이스에서 정의한 추상 메서드들을 구현하지 않아 오류가 발생하는 모습을 확인할 수 있습니다. 이는 일반적인 Java 언어에서 클래스가 인터페이스를 구현할 때와 동일한 규칙이 적용되기 때문입니다.
jshell> class Cat implements Animal {
...> }
| Error:
| Cat is not abstract and does not override abstract method sleep() in Animal
| class Cat implements Animal {
| ^----------------------------