소개
Java 11 은 2018 년 9 월에 출시되었으며, 플랫폼에 많은 새로운 기능과 변경 사항을 도입했습니다. 이 랩에서는 Java 11 을 시작하고 새로운 기능을 탐색하는 과정을 안내합니다.
Java 11 은 2018 년 9 월에 출시되었으며, 플랫폼에 많은 새로운 기능과 변경 사항을 도입했습니다. 이 랩에서는 Java 11 을 시작하고 새로운 기능을 탐색하는 과정을 안내합니다.
먼저, 시스템에 JDK 11 이 설치되어 있는지 확인하십시오. 터미널에서 다음 명령을 실행하여 확인할 수 있습니다.
java -version
Java 11 이 설치되어 있지 않은 경우, Oracle 웹사이트에서 다운로드하거나 apt-get 또는 yum 과 같은 패키지 관리자를 사용할 수 있습니다.
JDK 가 설정되면 다음 명령으로 Java 파일을 생성합니다.
mkdir -p ~/project && cd ~/project
touch MyFirstJavaProgram.java
이제 Java 파일이 생성되었으므로, 즐겨 사용하는 텍스트 편집기에서 엽니다.
touch MyFirstJavaProgram.java
Java 11 이전에는 javac 명령을 사용하여 Java 파일을 컴파일한 다음 java 명령을 사용하여 실행해야 했습니다. Java 11 에서는 java 명령만 사용하여 Java 파일을 직접 실행할 수 있습니다.
MyFirstJavaProgram.java 파일에 다음 코드를 추가합니다.
public class MyFirstJavaProgram {
public static void main(String[] args) {
System.out.println("Hello, Java 11!");
}
}
파일을 저장하고 다음 명령을 사용하여 실행합니다.
java MyFirstJavaProgram.java
콘솔에 "Hello, Java 11!"이 출력되는 것을 확인할 수 있습니다.
Java 11 은 String 클래스에 몇 가지 새로운 메서드를 도입했습니다. 이 단계에서는 해당 새로운 메서드를 살펴보겠습니다.
isBlank() 메서드는 문자열이 비어 있는지 확인하는 데 사용됩니다. 빈 문자열 또는 공백만 있는 문자열은 비어 있는 것으로 간주됩니다.
MyFirstJavaProgram.java 파일에 다음 코드를 추가합니다.
String s1 = "";
String s2 = " ";
String s3 = "String";
System.out.println("s1 is blank: " + s1.isBlank());
System.out.println("s2 is blank: " + s2.isBlank());
System.out.println("s3 is blank: " + s3.isBlank());
파일을 저장하고 다음 명령을 사용하여 실행합니다.
javac MyFirstJavaProgram.java
java MyFirstJavaProgram
다음 출력을 볼 수 있습니다.
s1 is blank: true
s2 is blank: true
s3 is blank: false
strip(), stripLeading(), 및 stripTrailing() 메서드는 문자열에서 공백을 제거하는 데 사용됩니다. 기존의 trim() 메서드와 유사하지만 유니코드 (Unicode) 를 지원합니다.
MyFirstJavaProgram.java 파일에 다음 코드를 추가합니다.
String s = " String ";
System.out.println("$" + s + "$");
System.out.println("$" + s.strip() + "$");
System.out.println("$" + s.stripLeading() + "$");
System.out.println("$" + s.stripTrailing() + "$");
파일을 저장하고 다음 명령을 사용하여 실행합니다.
javac MyFirstJavaProgram.java
java MyFirstJavaProgram
다음 출력을 볼 수 있습니다.
$ String $
$String$
$String $
$ String$
Java 11 은 Reflection API 를 사용하여 중첩 클래스의 private 멤버에 접근할 수 있도록 하는 새로운 기능을 도입했습니다. 이 단계에서는 이 새로운 기능을 살펴보겠습니다.
MyFirstJavaProgram.java 파일에 다음 코드를 추가합니다.
public class Demo {
private void privateMethod() {
System.out.print("Private Method");
}
class NestedClass {
public void callPrivateMethod() {
privateMethod();
}
}
public static void main(String[] args) {
System.out.println(Demo.class.isNestmateOf(Demo.NestedClass.class));
System.out.println(Demo.NestedClass.class.isNestmateOf(Demo.class));
System.out.println(Demo.NestedClass.class.getNestHost());
System.out.println(Arrays.toString(Demo.class.getNestMembers()));
}
}
파일을 저장하고 다음 명령을 사용하여 실행합니다.
javac MyFirstJavaProgram.java
java MyFirstJavaProgram
다음 출력을 볼 수 있습니다.
true
true
class Demo
[class MyFirstJavaProgram$Demo$NestedClass]
Java 11 은 문자열을 더 쉽게 읽고 쓸 수 있도록 Files 클래스에 몇 가지 새로운 메서드를 도입했습니다. 이 단계에서는 이러한 새로운 메서드를 살펴보겠습니다.
MyFirstJavaProgram.java 파일에 다음 코드를 추가합니다.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class Demo {
public static void main(String[] args) throws IOException {
Path path = Files.createTempFile("temporaryFile", ".txt");
//Writing to the file
Files.writeString(path, "Hello World");
//Reading from the file
String s = Files.readString(path);
System.out.print(s);
}
}
파일을 저장하고 다음 명령을 사용하여 실행합니다.
javac MyFirstJavaProgram.java
java MyFirstJavaProgram
다음 출력을 볼 수 있습니다.
Hello World
Java 11 은 컬렉션을 올바른 타입의 배열로 쉽게 변환할 수 있도록 새로운 기본 toArray() 메서드를 도입했습니다.
MyFirstJavaProgram.java 파일에 다음 코드를 추가합니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(5);
list.add(10);
list.add(15);
Integer[] intArr = list.toArray(Integer[]::new);
System.out.print(Arrays.toString(intArr));
}
}
파일을 저장하고 다음 명령을 사용하여 실행합니다.
javac MyFirstJavaProgram.java
java MyFirstJavaProgram
다음 출력을 볼 수 있습니다.
[5, 10, 15]
Java 11 은 Predicate 인터페이스에 predicate 를 부정하는 데 사용되는 새로운 not() 메서드를 도입했습니다. 이 단계에서는 이 기능을 살펴보겠습니다.
MyFirstJavaProgram.java 파일에 다음 코드를 추가합니다.
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Demo {
public static void main(String[] args) {
Predicate<String> startWithZ = s -> s.charAt(0) == 'z';
Predicate<String> doesNotStartWithZ = Predicate.not(startWithZ);
List<String> list = Arrays.asList("za", "zq", "az", "aq", "zz");
List<String> strsStartingWithZ = list.stream()
.filter(startWithZ)
.collect(Collectors.toList());
List<String> strsNotStartingWithZ = list.stream()
.filter(doesNotStartWithZ)
.collect(Collectors.toList());
System.out.println(strsStartingWithZ);
System.out.println(strsNotStartingWithZ);
}
}
파일을 저장하고 다음 명령을 사용하여 실행합니다.
javac MyFirstJavaProgram.java
java MyFirstJavaProgram
다음 출력을 볼 수 있습니다.
[za, zq, zz]
[az, aq]
HTTP 클라이언트 API 는 Java 9 에 도입되었으며 Java 11 에서 표준으로 채택되었습니다. 이 단계에서는 새로운 HTTP 클라이언트 API 를 사용하는 방법을 살펴보겠습니다.
MyFirstJavaProgram.java 파일에 다음 코드를 추가합니다.
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
public class Demo {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://www.google.com"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
System.out.println(response.body());
}
}
파일을 저장하고 다음 명령을 사용하여 실행합니다.
javac MyFirstJavaProgram.java
java MyFirstJavaProgram
콘솔에서 Google 홈페이지의 HTML 코드를 볼 수 있습니다.
Java 11 은 람다 표현식에 지역 변수 구문을 사용할 수 있도록 var 키워드를 도입했습니다. 이 단계에서는 이 새로운 기능을 살펴보겠습니다.
MyFirstJavaProgram.java 파일에 다음 코드를 추가합니다.
import java.util.function.Predicate;
public class Demo {
public static void main(String[] args) {
Predicate<String> startsWithZ = (@NotNull var str) -> str.charAt(0) == 'z';
System.out.println(startsWithZ.test("zoo"));
}
}
파일을 저장하고 다음 명령을 사용하여 실행합니다.
javac MyFirstJavaProgram.java
java MyFirstJavaProgram
콘솔에 true가 출력되는 것을 볼 수 있습니다.
Java 11 은 엡실론 가비지 컬렉터라는 새로운 실험적 기능을 도입했습니다. 이 기능은 메모리를 할당하지만 가비지를 수집하지 않습니다. 이 단계에서는 이 실험적 기능을 살펴보겠습니다.
MyFirstJavaProgram.java 파일에 다음 코드를 추가합니다.
public class Demo {
public static void main(String[] args) {
byte[] b = new byte[1024 * 1024 * 1024];
System.out.println("Allocated 1GB of memory");
}
}
파일을 저장하고 다음 명령을 사용하여 실행합니다.
java -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC MyFirstJavaProgram.java
콘솔에 "Allocated 1GB of memory"가 출력된 후, 프로그램이 코드 0 으로 종료되는 것을 볼 수 있습니다.
이 랩에서는 Java 11 에 도입된 새로운 기능, 즉 새로운 String 메서드, nest 기반 접근 제어, 새로운 파일 메서드 등을 배웠습니다. 또한 새로운 HTTP 클라이언트 API 와 엡실론 가비지 컬렉터 (Epsilon garbage collector) 를 사용하는 방법도 배웠습니다. 이제 Java 11 과 그 기능에 대해 더 잘 이해하게 되셨을 것입니다.