반응형
1. Java 7
- Type Inference(타입 추론) : 타입이 정해지지 않은 변수의 타입을 자바 컴파일러가 유추하는 기능
//Java6 List<String> list1 = new ArrayList<String>(); //Java7 //별도 제네릭 없이도 String 타입임을 추론할 수 있게됨. List<String> list2 = new ArrayList<>();
- String in switch : switch-case문 에서 문자열이 가능
//case 문에 문자열 가능 swith (a){ case "test1": System.out.println("test1"); break; case "test2": System.out.println("test2"); break; default break; }
- Automatic Resource Management : 1.6에서는 리소스(DB Connection, 파일, 네트웍 등등) 사용 후 별도로 close() 처리를 해줘야 했으나 1.7부터는 자동으로 닫아주는 기능이 추가됨.
//Java6 try{ BufferedReader. br = new BufferedReader.... .. return br.realLine() }finally{ if(br !=null){ br.close(); } } //Java7 - finally에서 close영역 구현 필요 없음 try{ BufferedReader. br = new BufferedReader.... .. return br.realLine() }
- Catching Multiple Exception Type in Single Catch Block : 단일 catch 블럭에서 여러개의 Exception 처리가 가능
//Java6 try{ ... }catch(ClassNotFoundException ex){ .... }catch(SQLException ex1){ ... } //Java7 try{ ... }catch(ClassNotFoundException | SQLException ex){ .... }
2. Java8
- Lambda : 메소드를 하나의 식으로 표현한 Lambda 표현식 사용 가능.
//Java7 int add(int a, int b){ return a+b; } //Java8 -Lambda (a,b) -> a+ b;
- interface 클래스에 구현체 작성 : Java 7 이전에는 실행 블록이 없는 추상메소드로만 선언, Java8부터는 실행 블록이 존재하는 디폴트 메소드, 정적 메소드도 선언이 가능해짐
//Java7 public interface MemberInterface{ public abstract void memMethod(); } //Java 1.8 public interface MemberInterface{ public abstract void memMethod(); public default void memMethod2(){ System.out.println(...); } public static void memMethod3(){ System.out.println(...); } }
- Optional : NPE(NullPointException)을 방지하기 위해 추가된 클래스
//Java7 String userName = getUserName(); if(userName != null){ .... } //Java 8 String userName = getUserName(); Optional<String> optStr = Optional.ofNullable(userName); ...
- Stream : 컬렉션, 배열등 저장되어 있는 요소들을 하나씩 참조하여 반복처리를 가능하게 하는 기능
//Java7 List<Integer> list = .... Iterator<Integer> it = list.iterator(); while(it.hasNext()){ ... ... } //Java8-Stream List<Integer> list = .... list.stream().filter(i - i ....).
- 다양한 DateTime 추가 : LocalDateTime, LocalDate, LocalTime
- GC 성능 개선 : PerManet영역이 Metaspace 영역으로 변경, OOM 에러가 발생되는 현상이 개선됨.
3. Java9
- Interface의 개선 : 특정 기능을 처리하는 내부 method임에도 외부에 공개되는 public method로 생성해야함에 따라 캡슐화 유지를 위해 private method 기능이 추가됨
public interface MemberInterface { private static void myPrivateMethod(){ System.out.println(....); } }
- 불변 Collection 생성 메소드 제공 : 불변 Collection 생성할 수 있는 메소드가 추가됨
//Java8 List<String> arr = new ArrayList<>(); arr.add(...); arr.add(...); arr = Collection.unmodifiableList(arr); //Java9 //1.List List<String> arr = List.of("...", "..."); //2.Set Set<String> st = Set.of("...", "..."); //3.Map Map<Integer, String> st = Map.of("...", "...");
- Stream 및 Optional 개선 : Stream - iterate(), takeWhile(), dropWhile()m ofNullable()
Optional - isPresentOrElse() - try-with-resources 개선 : 기존 Java7에서는 자원 할당을 try 밖에서 하면 그 변수를 가지고 try 안에서 사용이 불가하여 내부에서 리소스를 선언해야하였지만 Java9에서는 바로 사용가능해짐
//Java8 BufferedReader br = new BufferedReader(inputString); try (BufferedReader br1 = br) { return br1.readLine(); } //Java9 BufferedReader br = new BufferedReader(inputString); try (br) { return br.readLine(); }
- Improve Diamond Operator : 익명 클래스에 Diamond Operator 사용 가능
- Java 플랫폼 모듈 시스템(Jigsaw) : 유연한 런타임 이미지를 만들기 위해 Java 플랫폼의 모듈화하여 필요한 모듈만으로 경량화된 이미지를 만들 수 있게 됨
- Process API Updates, JShell 추가, HTML5 Javadoc, UTF-8 Property Files, Unicode8.0, 다중 릴리즈 Jar files 등등의 기능들이 추가됨
4. Java10
- Local-variable Type inference : var를 사용, 생성할 변수의 타입을 추론할 수 있도록 기능이 추가됨. var 사용 시 지역변수는 type 을 명시하지 않아도 된다.
//Java6 List<String> arr =new ArrayList<String>(); //Java7 List<String> arr =new ArrayList<>(); //Java10 var arr =new ArrayList<>();
- Optional 개선 : orElseThrow() method 추가
- 불변 Collection 기능 개선
- copyOf() 메소드 추가하여 수정할 수 없는 복사본을 컬렉션으로 만들 수 있다.
- List, Map, Set 별로 toUnmodifiable*() 메소드 추가하여 수정할 수 없는 컬렉션으로 직접 스트리밍이 가능하다. - Pareallel Full GC for G1, Application Class-Data Sharing, Additional Unicode Language-Tag Extensions, Time-Based Release versioning, Root Certificates 등등의 기능들이 추가됨
반응형
'Backend > Java' 카테고리의 다른 글
Java - Generic(제네릭) 2편 - 제네릭제약(와일드카드, extends, super) (0) | 2022.05.13 |
---|---|
Java - Generic(제네릭) 1편 (0) | 2022.04.22 |
래퍼 클래스(wrapper class)? (0) | 2022.03.03 |
인터페이스를 사용하는 이유 (0) | 2016.12.13 |
serializer/deserialization (0) | 2016.02.14 |