승귤입니다

Java17을 쓰면 좋을까?

자바17은 왜이리 인기가 없나

2021년 9월 14일에 자바의 새로운 LTS(Long-Term-Support)버전인 17이 나왔다. 그런데, 아직까지는 사람들이 많이 도입을 꺼리는 것 같다.

보통 새로운 버전이 나오면 와 신난다. 새로운기능이 뭐지? 어서 써보고싶다! 이래야 맞는거 아닌가 싶은데, 우리회사 기준으로 주위에 쓰는 팀이 없다.

그래서 그런지, 오라클에서 이런글도 써줬다. 왜 옮겨야 하는지, 어떻게 하면 좋은지... 글쓴이는 JDK8에서 JDK11로 갈때보다 JDK11에서 JDK17로 옮기는것이 훨씬 쉬웠다고 한다.

읽어보면 업글하는데 노력이 좀 드는데... 쓸만해... 정도다... 좀 더 분발하시라 오라클 형님들

이제는 Java17로 옮길 때(why and how)

자바17로 바꿀려면, 주의해야되는 것들

글을 잠깐 읽어보니 업그레이드에 노력(effort)이 필요하다고 되어 있다. 이게 인기가 없는 원인이구나 싶었다.

업그레이드 내용을 잠깐 보면 변경되는게 꽤 있다.

  • JavaFX가 없어진다. gluon 이나 OpenJFX를 사용하라고 가이드가 되어있다.
  • 폰트들 : 자바는 원래 폰트가 별로 없지만, Java11에 완전 삭제했다. Apache POI를 사용하라고 한다.
  • Java Mission Control : 모니터링과 프로파일링에 사용하는 녀석인데, 요녀석도 JDK에 포함되어 있었으나, 이제 따로 받아야한다. JDK Mission Control
  • Java EE : 자바11에서 Java EE모듈을 삭제했다. JAXB 이런 것 들이다. Java EE는 많으니 표로 알려주고 있다. 아마도... artifactId만 바꾸면 될 것이다.. 아마도..
모듈 바꿔야하는 artifactId
java.activation jakarta.activation
java.xml.ws.annotation jakarta.anotation-api
java.transcation jakarta.transcation-api
java.xml.bind jakarta.xml.bind-api, jaxb-impl
java.xml.ws jakarta.xml.ws-api, jaxws-rt
  • CORBA : 요녀석도 Java11에 삭제당했다!
  • Nashorn : 자바 15에 삭제됐다. nashorn-core를 쓰면 된다. 나름 관심있는 기능이었는데 아쉽다.
  • 시험용 컴파일러들 : 자바17에는 GraalVM의 AOT(ahead-of-time), JIT(just-in-time)컴파일러가 제거된다. 자세한것은 JEP410을 보라고..

마리안 차이코프스키라는 사람의 글도 보자.

자바8과 자바17비교 모던 자바는 자바8보다 얼마나 좋은가?

자바17에서 변하는 것들 (자바8부터의 변경점)

자바의 새로운 피쳐들의 특징은 아래 3가지라고 한다.

  • 코드의 재사용을 방지
  • 장황한 코드를 줄이기 (잘했다.)
  • Object같은 shared type 인자를 받는 메서드를 오버로딩 하는 메서드들을 사용안함 (shared type 뭔지 정확하게는 모르겠지만, Object같이 어떤 타입이라도 메서드에 넣을수 있는 것은 무겁고 코드 작성 및 읽기에도 좋지 않다고 생각하는데 그런 부분을 얘기하는 것 같다.)

캡슐화

  • 모듈 : 모듈은 자바9에 새로 생겼고, 내부코드를 애플리케이션에서 숨기기 위해 사용됨
  • Sealed Type : 자바15에 추가됨. final 클래스 대신 사용

코드의 간결성

  • 지역 변수의 타입 추론 : var 키워드를 쓰면 타입추론을 해준다. (코틀린에 있던거 아님?)
  • Switch 표현식 : 자바12에 스위치 표현식이 들어갔다. 이제 break 그만 써도 된다. (이런건 자바스크립트에도 없는거라고 자랑함)
  • 텍스트 블럭: 다른 언어에는 당연한거지만 자바13에 들어갔다. """ """ 으로 감싸서 여러줄로 문자열을 쓸 수 있다.
  • Records : 불변데이터를 전송할때 편하게 사용할 수 있는 Record 라는 녀석이 생겼다. DB에서 부터 Record 데이터가 건너온다고 하면 불변이니 안심하고 쓸 수 있을 것 같다. (다른데는 원래 다 있던거...)

타입캐스팅

  • instanceof의 패턴매칭 가능. JDK14에 추가됐다.
  • switch문에서 패턴매칭가능 (어? 이거 코틀린에 있던건데?)

결론

모던 자바는 확실히 예전 자바보다 기능이 쓸만한 것 같다. 코틀린의 영향인지 다른 언어의 영향인지 모르겠으나, 언어차원에서 제공해주는 편의 기능들이 코틀린과 거의 유사해지고 있다. 이제야 자바가 정신차리고 언어를 좀 개선하는구나 하는 생각이든다. 자바가 이렇게 열심히 하면 애매해지는게 코틀린의 포지션일 것 같다. 코틀린은 어차피 자바를 한번 감싼 녀석이니 순정 좋아하는 사람들은 그냥 자바17을 쓰는게 좋지 않을까. 어쨌거나 새로운 언어를 배우는 것 보다는 원래 있던 자바에 조금 더 편한 기능을 추가하는게 편하긴 할거니까.

나의 개인적인 결론은 일단 자바부터 잘하자 이다.

왜냐면 앞으로 내가 해야하는 업무의 70%이상이 자바일테니까...ㅎㅎ


이전글: 넷플릭스와 함께한 추석
(2019.5.13) made by seungkyoo