Java - Java Version

  • 자바 버전 별 핵심 내용 정리

Java 버전별 핵심 내용

  • 우선 자바는 1995년 5월 처음 Oak이라는 이름으로 발표되었지만, 1996냔 1월 안정화를 거쳐서 Java로 이름이 바뀜


  • JDK 1.1
    • 이너 클래스, 유니코드 지원, Bean 규약(기본 생성자 존재, getter setter 구성 등)


  • J2SE 1.2
    • 명칭 표기를 J2SE로 함 (5까지)
    • Swing GUI
    • JIT 컴파일러 추가
    • Collection Framework


  • J2SE 1.3
    • HotSpot JVM
    • JNDI
    • JPDA


  • J2SE 1.4
    • 정규표현식 추가
    • IPv6
    • XML API


  • J2SE 5
    • 버전에 1을 뺌
    • 제네릭 추가
    • 어노테이션 추가
    • Concurrency API ( 멀티스레드를 쉽게 구현 )
    • Enum
    • 오토박싱/오토언박싱


  • Java SE 6
    • 표기방식이 Java SE로 바뀜 ( 그 외 Java SE, Java EE 등이 있는데 우리가 사용하는 일반적인 Java가 Java SE임 )
    • G1 GC를 테스트용으로만 사용하도록 추가
    • JVM 면에서 퍼포먼스 향상


  • Java SE 7
    • 본격적으로 G1 GC 추가
    • 다이아몬드 오퍼레이터 지원 ( List list = new ArrayList<>(); )
    • switch문에서 String 사용 가능
    • switch문에서 자원들을 자동으로 close 해줌
    • String Constant Pool의 위치를 Heap 내부로 이동
    • NIO2 추가
    • 숫자 표현법 추가
      • 0b, 0, 0x 로 2,8,16 진법의 숫자를 나타낼 수 있게되었다. 그리고 숫자와 숫자사이에 _ 를 넣을 수 있게되었다. 이제 100000000 대신 100_000_000 이렇게 작성해서 0이 몇개인지 잘 확인할 수 있다.
    • File의 확장 버전인 Files 추가


  • Java SE 8
    • 오라클 인수 후 첫 버전이며 Oracle JDK와 Open JDK로 나뉨
    • 람다식 추가
    • 인터페이스에 Default Method와 static Method 추가
    • 스트림 API 추가
    • Null처리 Optional 추가
    • Thread-Safe 한 날짜 관련 클래스들 추가


  • Java SE 9
    • Java용 REPL, JShell 등장 (대화식 REPL(Read Eval print Loop) 도구 제공)
    • Modular System (Jigsaw)지원
    • 불변 Collection(immutable collection)제공
    • Java 9는 익명 클래스에 대한 Diamond Operator를 허용 (anonymous inner 클래스에서 diamond operator 사용 가능)
    • try-with-resources 개선
    • 인터페이스 내 private 메소드 사용 가능
    • Reactive Stream API 추가
    • Optional To Stream


  • Java SE 10
    • var 키워드를 이용한 지역변수 선언 및 타입추론 가능
    • 불변(Unmodifiable) Collection 향상
    • 병렬 처리 가비지 컬렉션 도입으로 인한 성능 향상
    • 개별 쓰레드로 분리된 Stop-The-World
    • 루트 CA 목록 등 추가
    • JDK의 Repository가 하나로 통합
    • JVM 힙 영역을 시스템 메모리가 아닌 다른 종류의 메모리에도 할당 가능
    • Deprecated된 API는 Java SE 10에서 모두 삭제


  • Java SE 11
    • Oracle JDK와 OpenJDK가 통합되었으며 Oracle JDK 가 유료 모델로 전환되었음.
    • 람다 파라미터에 대한 지역변수 문법 간소화
    • HTTP 클라이언트 표준화 기능 추가 : Java 9, 10에 사용되었던 jdk.incubator.http 패키지가 표준화되어 java.net.http 패키지로 추가
    • 네스트 기반 액세스 컨트롤(Nest-based access controls)
    • 액세스 가능성을 확장하는 브릿지 메소드 삽입 지원 컴파일러의 필요성 제거
    • 다이나믹 클래스-파일 콘스탄스(Dynamic class-file constans)
    • 새로운 형태의 구체화 가능한 클래스파일 상수를 만드는데 요구되는 비용과 간섭을 줄이고, 표현력과 성능을 위한 보다 다양한 옵션 제공
    • 엡실론(Epsilon) 가지비 컬렉터 : 오버헤드의 최저지연과 할당 제한이 가능한 완전한 수동 가비지 컬렉터 적용


  • Java SE 12
    • switch문 확장
        //기존 방식
        switch (day) {
            case MONDAY:
            case FRIDAY:
            case SUNDAY:
                System.out.println(6);
                break;
            case TUESDAY:
                System.out.println(7);
                break;
            case THURSDAY:
            case SATURDAY:
                System.out.println(8);
                break;
            case WEDNESDAY:
                System.out.println(9);
                break;
        }
      		
        //Java SE 12 부터의 방식
        switch (day) {
            case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
            case TUESDAY                -> System.out.println(7);
            case THURSDAY, SATURDAY     -> System.out.println(8);
            case WEDNESDAY              -> System.out.println(9);
        }
      


  • Java SE 13
    • switch문 개선을 위해 yield 예약어 추가
        var a = switch (day) {
            case MONDAY, FRIDAY, SUNDAY:
                yield 6;
            case TUESDAY:
                yield 7;
            case THURSDAY, SATURDAY:
                yield 8;
            case WEDNESDAY:
                yield 9;
        };
      
    • Text Block 줄 바꿈 문자가 자동으로 포함. (preview로 정식 지원은 아님)
        String text = *"""
                    Lorem ipsum dolor sit amet, consectetur adipiscing \
                    elit, sed do eiusmod tempor incididunt ut labore \
                    et dolore magna aliqua.\
                    """*;
      


  • Java SE 14
    • switch 확장된 버전이 이제 표준화되어 사용됨. (정식)
    • 새로운 클래스 형태인 record가 preview로 등장
      • getter, setter, toString, equals, hashcode 자동 지원 + 불변 클래스임 ```java public record Person(String name, int age) { }

      // 사용 예제 Person person = new Person(“John”, 25); System.out.println(person); // toString() 메서드 자동 생성 ```

    • 유용한 NullPointerExceptions
      • NullPointerExceptions은 정확히 어떤 변수가 null인지 설명 해 줌.


  • Java SE 15
    • 13에서 preview였던 여러줄 문자열이 정식으로 됨.
    • 상속 가능한 클래스의 범위를 지정할 수 있는 봉인 클래스가 제공된다. sealed 예약어 추가 (preview)
        public abstract sealed class Shape
            permits Circle, Rectangle, Square {
            // 코드
        }
      
      • 이렇게 만들면 Shape를 상속받을 수 있는 클래스는 Circle Rectangle Square 뿐이다.


  • Java SE 16
    • Open JDK 버전관리가 Git으로 바뀜


  • Java SE 17
    • RandomGenerator ( 의사 난수 생성기 ): 어려운 난수를 생성해주는 API가 정식 출시 됨.






results matching ""

    No results matching ""