9버전 주요 특징
인터페이스 private 메서드
public interface Client {
void exchange();
default void get() {
logging2("before");
exchange();
logging("call get");
}
private void logging(String message){
System.out.println(message);
}
private static void logging2(String message){
System.out.println(message);
}
}
try - with -resource
BufferedReader br = Files.newBufferedReader(Paths.get("a.txt"));
try{
String line = br.readLine();
} catch (IOException e){
e.printStackTrace();
} finally {
br.close();
}
자바 7 이전에서는 다음과 같이 회수해야 하는 자원이 있을 때, finally를 사용해서 회수해주었다.
자바 7에서는 try-with-resource 구문이 추가되어 finally를 사용하지 않고도 자원 해제를 시켜주었다.
try-with-resource을 사용하기 위해서는 AutoCloseable 인터페이스를 구현하며 close() 메소드를 정의해주어야 한다.
try(BufferedReader br = Files.newBufferedReader(Paths.get("a.txt"))){
br.readLine();
}catch (IOException e){
e.printStackTrace();
}
자바9에서는 try - with -resource 에서 try() 속에, final 변수 혹은 실질적인 final 변수이면 넣을 수 있게 만들었다.
BufferedReader br = Files.newBufferedReader(Paths.get("a.txt"));
try(br){
br.readLine();
}catch (IOException e){
e.printStackTrace();
}
콜렉션 팩토리 메서드 (of)
List<Integer> list = List.of(1,2,3);
Map<String , Integer> map = Map.of("k1",1, "k2",2);
Set<Integer> set = Set.of(1,2,3);
Arrays에 compare, mismatch 추가
int comp = Arrays.compare(a, b);
int firstIdx = Arrays.mismatch(a, b);
compare : 논리적인 비교, a가 작으면 음수, 같으면 0, b가 작으면 양수를 리턴
mismatch : 두 배열이 어디에서 다른지 비교
10버전 주요 특징
var - 로컬 변수 타입 추론 (필드나 파라미터는 불가능)
var a = 10; //a는 int 타입
var result = new ArrayList<Integer>();
자바 11에서는 람다식에 사용 가능.
11버전 주요 특징
String
isBlank() : 공백문자만 포함했는지 여부 (" ")와 같이 공백으로만 이루어진 문자열인지 판단
lines() : 각 라인을 Steam으로 반환. Stream<String> lines = name.lines();
repeat() : "1".repeat(10) -> 1111111111
strip(), stripLeading(), stripTrailing() : 문자열 앞뒤의 공백 제거, 문자열 앞의 공백 제거, 문자열 뒤의 공백 제거
12버전 주요 특징
String
indent(int n) : 줄바꿈을 기준으로 n만큼 들여쓰기 (음수인 경우 내어쓰기), 맨 마지막에 \n이 추가됨.
<R> R transform(Function <? super String, ? extends R> f) : "20011231".transform(DateUtil::toLocalDate);
14버전 주요 특징
switch 식
switch식으로 값을 만들어낼 수 있다.
String grade = switch (mark) {
case 10 -> "A";
case 9 -> "B";
case 8 -> "C";
case 7 -> "D";
default -> "F";
}
15버전 주요 특징
텍스트 블록
""" 를 통해 텍스트 블록을 만들어낼 수 있다.
String json = """
{
"name" : "feature",
"pubdate" : "2021-01-01"
}""";
// {
// "name": "feature",
// "pubdate": "2021-01-01"
// }
String json = """
{\
"name" : "feature",\
"pubdate" : "2021-01-01"\
}\
""";
// {"name": "feature", "pubdate": "2021-01-01"}
16버전 주요 특징
Stream
toList()
List<Integer> nos1 = Stream.of(1, 2, 3).filter(n -> n % 2 ==0).toList();
mapMulti() : 값 하나를 받아서, 여러 Map을 생성할 수 있음.
List<Integer> result = Stream.of(1, 2, 3)
.mapMulti((Integer no, Consumer<Integer> consumer) -> {
consumer.accept(no);
consumer.accept(-no);
}).toList();
//[1, -1, 2, -2, 3, -3]
instanceof와 패턴 매칭
if(a instanceof String s){
System.out.println(s);
}
if(a instanceof String t && t.isBlank()){
System.out.println("blank");
}
if(!(a instanceof String b)){
return; //b를 사용할 수 있어짐, 단 ! 로 이루어진 조건문에서만 가능
}
b.toUpperCase(Locale.ROOT);
record 클래스
public record FullName(String first, String last) {
}
FullName fn = new FullName("f","l");
fn.first();
fn.last();
first, last 에 대해
- private final 필드
- 파라미터를 가진 생성자
- 같은 이름의 메서드(getter) ->(first(), last())
- hashCode, equals, toString
특징
- 기본 생성자 없음
- 값 변경 메서드 없음
- final 클래스 (추상 클래스 아님)
- 다른 클래스 상속 불가
17버전 주요 특징
sealed 타입
상속할 수 있는 타입을 제한.
public sealed interface FList<T> permits Cons, Empty {}
final class Cons<T> implements FList<T>{
private T head;
private FList<T> tail;
public Cons(T head, FList<T> tail) {
this.head = head;
this.tail = tail;
}
}
sealed : class나 interface를 실드 타입으로 지정
permits : 상속을 허용하는 타입 목록 지정, 하위 타입이 존재해야 한다.
sealed와 permits은 한 몸이다.
sealed 타입을 상속한 타입의 제약
클래스를 다음 중 하나를 지정해야 함.
- final : 상속을 못하게 막거나
- sealed (+permits) : 다시 상속할 수 있는 타입을 제한하거나
- non-sealed : 제한하지 않음
- record
sealed 타입과 같은 패키지 혹은 같은 모듈에 위치해야 함
같은 자바 파일에 위치하면 permits 생략하고 사용 가능
switch에서 패턴 매칭 (프리뷰)
return switch(first) {
case Cons c -> 1 + c.getTail().size();
default -> 0;
};
📔 Reference
https://www.youtube.com/watch?v=GJB-RyHKHjY&list=PLwouWTPuIjUgr29uSrSkVo8PRmem6HRDE&index=10
'☕️ Java > 기본' 카테고리의 다른 글
[JAVA] List 정렬하기 (ArrayList, LinkedList 등) (0) | 2021.12.16 |
---|---|
[JAVA] Stream의 toList()를 사용하여 ArrayList로 형변환할 때 발생하는 오류 (0) | 2021.12.16 |
[JAVA] 배열에서 ArrayList, ArrayList에서 배열로 (0) | 2021.12.16 |
[JAVA] 자바 Date to LocalDateTime (& Inversion) (0) | 2021.12.16 |
[JAVA] 형식화 클래스 - DecimalFormat, SimpleDateFormat (0) | 2021.12.16 |