자바 8과 같은 일부 버전을 왜 1.8 이라고 할까?
9 이전의 JAVA 버전은 단순히 다른 명명 체계를 사용했습니다.
따라서 Java 8 은 1.8, Java 5 는 1.5 등으로 불릴 수 있습니다.
'java -version' 명령을 실행하면 아래와 같이 출력됩니다.
c:\Program Files\Java\jdk1.8.0_191\bin>java -version
java version "1.8.0_191" (1)
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
이는 단순히 Java 8 을 의미합니다. Java 9 이후부터는 Java version 에는 더이상 접두사 1.x 가 붙지 않습니다.
c:\Program Files\Java\jdk11\bin>java -version
openjdk version "11" 2018-09-25 (1)
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
자바 버전별 특징
- Java 8 - |
- Java 11 - |
|
|
- Java 8 -
- 람다
- Stream
- Optional 클래스
- 기본 인터페이스 메서드(Default Methos)
람다(Lambda Expressions)
함수를 간단한 식으로 표현하는 방법, 메서드의 이름과 반환값(return) 이 생략된다는 점에서 '익명 함수(anonymous function)' 라고도 불립니다.
int max(int a, int b) {
return a > b ? a : b;
}
//람다식으로 변환
(a, b) -> a > b ? a : b;
Stream API
스트림은 컬렉션의 저장 요소를 하나씩 순회하면서 처리할 수 있는 코드 패턴입니다.
람다식을 지원한다는 점과 내부 반복자를 사용하기 때문에 병렬 처리가 쉽다는 특징이 있습니다.
List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd");
list.stream()
.filter(name -> name.startsWith("f"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
Optional Class
Optional<T> 는 null 이 올 수 있는 값을 감싸서 Wrapper 클래스로 참조하더라도NPE(Null Pointer Exception) 가 발생하지 않도록 도와주는 역할 입니다.
java 8 이후 부터는 Optional 클래스의 메소드를 통해 null 을 컨트롤 할 수 있습니다.
// Java 8 이전
public String logic() {
User user = getUser();
if (user != null) {
Address address = user.getAddress();
if (address != null) {
String street = address.getStreet();
if (street != null) {
return street;
}
}
}
return "not specified";
}
// Java 8 이후
public String logic() {
Optional<User> user = Optional.ofNullable(getUser());
String result = user
.map(User::getAddress)
.map(Address::getStreet)
.orElse("not specified");
return result;
}
Interface default method
Java8 이전의 인터페이스는 메서드를 정의만 할 수 있었고 구현은 할 수 없었는데요.
8버전부터는 default method 라는 개념이 생기면서 구현 내용도 인터페이스에 포함시킬 수 있게 되었습니다.
String> lispublic interface TestInterface {
void doSomething();
default void doSomethingDefault() {
System.out.println("doing something default");
}
}
//implements the interface
public class TestClass implements TestInterface {
@Override
public void doSomething() {
System.out.println("doing something");
}
}
TestClass testClass = new TestClass();
testClass.doSomething(); // Output: "doing something"
testClass.doSomethingDefault(); // Output: "doing something default"
- Java 11 -
- 새로운 String 메서드
- 람다에서 로컬변수 Var 사용
- 자바파일 실행
새로운 String 메서드
isBlank, repeat 와 같은 유용한 메서드들이 추가되었습니다.
- strip(): 문자열 앞, 뒤의 공백 제거.
- stripLeading(): 문자열 앞의 공백 제거.
- stripTrailing(): 문자열 뒤의 공백 제거.
- isBlank(): 문자열이 비어있거나, 공백만 포함되어 있을 경우 true를 반환한다.
- String.trim().isEmpty() 와 결과가 동일함.
- repeat(n): n개만큼 문자열을 반복하여 붙여서 반환함.
람다에서 로컬변수 Var 사용
람다식에서 Var 을 사용할 수 있게 되었다.
(var firstName, var lastName) -> firstName + lastName
자바 파일 실행
javac 를 통해 컴파일하지 않고도, 바로 java 파일을 실행할 수 있게되었다.
// Java 11 이전
$ javac HelloWorld.java
$ java Helloworld
Hello Java 8!
// Java 11 이후
$ java HelloWorld.java
Hello Java 11!
'JAVA' 카테고리의 다른 글
[JAVA] staic 과 final (1) | 2024.10.29 |
---|---|
== 와 equals 차이 , hashcode (0) | 2024.10.24 |
[Java] Call by Value 와 Call by Reference (6) | 2024.10.21 |
[자바의 신] 정리해봅시다 [1장~ 10장] (0) | 2024.10.19 |
[JAVA] ORM 이란? MyBatis 와 JPA 차이 (4) | 2024.10.11 |