Backend/Java

JAVA 버전별 특징(Java7~10)

야뤼송 2022. 3. 10. 10:46
반응형

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 사용 가능
    출처 :&amp;nbsp;https://java2blog.com/java-9-anonymous-inner-classes-and-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 등등의 기능들이 추가됨

 

 

 

반응형