ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java의 변천사, 추가된 기능은 무엇일까?
    프로그래밍 언어/JAVA 2022. 10. 2. 23:31

    우리 회사는 최신 기술, 버젼 업데이트에 대해 우호적으로 반응하고 우리에게 좋은 인사이트를 줄 수 있는 것이라면 적용하는 편이다.

    내가 회사에 입사했을 때에는 Javs SDK11버전을 사용 중이였고 17버전이 나온지 얼마 안 된 시기였다.

    그러고 입사 한 달쯤 되었을 때에 17버전를 적용했다.

     

    내가 Java17버전을 사용 중에 있지만 보통 흔히 java서적이나 강의에서 접하는 java8버전과 비교하였을 때에 어떠한 피쳐가 추가되었는지, 쓸만한 기능인지는 알아보지 못했기에 이번 기회에 알아보고 정리해보고자 한다.

     

     

    1. Text Blocks

    기존에 한 줄의 텍스트가 아닌 여러 줄의 텍스트를 작성할 때에는 아래와 같이 작성해야했다.

    String text = "{\n" +
                  "  \"name\": \"John Doe\",\n" +
                  "  \"age\": 45,\n" +
                  "  \"address\": \"Doe Street, 23, Java Town\"\n" +
                  "}"

    하지만, Java 14버전에서는 이를 더 가독성있게 쓸 수 있는 기능이 추가되었고 아래와 같이 작성을 하면 된다.

    String text = """
                {
                  "name": "John Doe",
                  "age": 45,
                  "address": "Doe Street, 23, Java Town"
                }
                """;

    불필요한 개행문자를 사용하지 않아도 되고 ""를 여러개 사용하지 않아도 되는 것에 큰 장점이 생겼다고 생각한다.

     

     

    2. Switch Expression

    swith expression은 enum type 변수에 여러 개의 필드가 존재할 때, 해당 변수의 값에 따라 실행문을 분기하고자 할 때에 사용된다.

    기존에는 아래와 같이 사용을 했다.

    switch (fruit) {
        case APPLE, PEAR: 
            System.out.println("Common fruit");
            break;
        case ORANGE, AVOCADO:
            System.out.println("Exotic fruit");
            break;
        default:
            System.out.println("Undefined fruit");
    }

    (하나의 case문에 여러 개의 값을 쓸 수 있는 것은 java 14버전 이후부터 지원)

     

    java 14버전 이후에는 아래와 같이 사용하면 된다.

    switch (fruit) {
            case APPLE, PEAR -> System.out.println("Common fruit");
            case ORANGE, AVOCADO -> System.out.println("Exotic fruit");
            default -> System.out.println("Undefined fruit");
        }

    break문이 빠지면서 개발자의 실수(break미입력)로 인한 오동작을 방지할 수 있고 가독성이 높아졌다.

     

     

    3. Record

    record는 java 14버전에 추가된 기능으로 클래스를 선언하고자할 때에 class라는 이름대신 사용할 수 있는 기능으로 아래와 같이 선언하여 사용할 수 있다.

    public record Point(int x, int y) {
    }

    class에서는 field를 따로 선언해주지만 record는 위와 같이 필드로 사용하고자 하는 것은 argument로 선언해주면 된다.

    기존적으로 getter, setter가 선언되고 allargsconstuctor, HashCode, Equals가 만들어진다.

    기본 class에서 롬복으로 만든 HashCode, Equals보다 record를 선언하여 만든 HashCode, Equals 성능이 좋다는 장점을 가지고 있다.

    개인적으로 생각하는 reocrd의 사용은 DTO나 VO같은 어떠한 값들을 저장하고 전달하는 역할인 곳에 사용하면 적절할 것같다는 생각을 했다.

     

     

    위 3가지 기능 이외에도 많은 피쳐가 추가되었고 흥미롭게 읽어볼만한 것은 ZGC라는 가비지 컬렉터이다.

    ZGC에 대한 내용은 가비지 컬렉터에 대해 따로 정리할 때에 추가해보고자 TODO로 남겨본다.

    (+java17버전에서 추가된 내용은 sealed class이외에는 따로 정리해볼만한 내용은 없다고 생각했다.)

     


    <참고자료>

    https://openjdk.org/projects/jdk/14/

    https://openjdk.org/projects/jdk/17/

    댓글

Designed by Tistory.