4th Oracle Developer Meetup

Oracle Developer Meetup - 미래의 Java와 손에 잡히는 Microservice!


[4th] Oracle Developer Meetup | 미래의 Java와 손에 잡히는 Microservice! 세미나에 다녀왔습니다.

한국에서 가장 많이 사용하는 프로그래밍 언어는 자바라고 생각한다. 하지만 많은 사람들이 이제 자바는 그 수명을 다했다고 말한다. 정말 그런 것일까? 미래의 Java는 어떻게 변화할 것이고 어떤 방향으로 나아갈지에 대한 궁금증을 해소하기 위해 이번 세미나에 참여하게 되었다.

Java.next() - 우아한형제들 박성철님.

먼저 자기소개가 이루어졌다.

  • 우아한 형제들의 인프라 서비스실을 담당
  • 한국스프링사용자모임(KSUG) 고문
  • 자바를 주로 사용하였고 스칼라를 좋아함
  • 등등..

Java 란?

  • java = 언어 + VM + 라이브러리
  • 자바백서 : The java Language Enviroment
  • java = 개방형 혁신(open Innovation) => 오픈소스 & 커뮤니티 & 업계
  • 블루 칼라의 언어 (단순 & 친숙) - 누구나 배울 수 있는 언어, 박사 등의 학위를 딸 필요가없다.(자바의 설계 목표)

언어관점에서 openJDK의 진행중인 프로젝트 살펴 보기 먼저 OpenJDK란?

  • 오픈소스 자바 SE와 관련 프로젝트를 중심으로 한 커뮤니티

OpenJDK는 어떻게 흘러가고 있나?

  • 언어의 현대화 (표현 간소화 & 함수형 특성 도입, 다중 코어 시대 대응 (동시성), System 자바)
  • 클라우드 (시스템 통합, 성능 향상, 경량화, GC 개선, 관측성 개선)
  • 다언어 범용 VM (강한 추상화와 시스템 통합을 양 방향으로 동시에 진행)
  • micro services - java th unix way - james Lewis <- 마이크로 서비스 이해하는데 좋은 발표자료
  • micro services는 꼭 해야하는 거 아니다. 비용이 많이들고 힘들다. 그걸 안하면 죽으면 해야함.. 굳이 필요없는데 할 필요없음

OpenJDK 프로젝트

  • Amber: 언어 문법 간소화
  • Valhalla: 값 타입 & 특화 제네릭
  • 기타 등등…

첫번째 프로젝트, Amber(엠버)

  • 자바 언어를 개선하는 프로젝트

지역변수_타입_추론(JEP-286)

  • 자바 5: 제네릭 메서드 타입 추론
  • 자바 7: 다이아몬드 연산자(<>)
  • 자바 8 람다식
  • 자바 10 지역변수 타입 추론 - var의 사용
  • 자바10에 var까지만 들어감.
    • var - 변수
    • val - 상수
    • let - 상수(val대신 쓰임.) -> 쓰고싶으면 final var

미가공_문자열(JEP-326)

  • 특수기호 후처리 없는 문자열
  • \\n 사용의 불편함 > ‘ 사용
  • 짝 맞춤을 통해 미처리 문자열 내 “ ‘ “ 문자 허용.
  • 개행문자를 제외한 모든 문자를 처리 없이 그대로 사용.
  • 후처리를 위한 String 클래스에 escape() 메서드 추가

Switch식(JEP-325) (핵심)

  • 식 == 연산 후 값 반환
  • if문 자체는 값을 반환할 수 없음 따라서 var result = if(조건식) {} else {} //(x)
  • 삼항연산자를 이용한 식 var result = ___ ? 1 : 2; // (o)
  • 지금까지 자바는 switch는 문이었으나 식으로도 사용 가능.

패천매칭 (정규식x, 함수형언어의 특징)- 엠버프로젝트의 목표

  • 패턴매칭 :: 데이터_클래스
  • dto는 값, oop는 행위가 중요
  • 컴포넌트 - 여러개의 클래스가 모여서 하나의 기능을 제공하는 것.
  • 스칼라의 case, 코틀린의 data, 자바 -> recodr Cordinate(double lat, double len){}
  • 튜플 - 언어에서 이름도 안지어도 되는것
  • 패턴매칭 == switch식 + 타입비교 + 객체 분해 + 값 비교
  • 객체를 분해해서 생성자 인자값을 다시 꺼내서 변수에 할당.
  • 객체를 분해해서 얻는 생성자 인자값과 패턴에 주어진 값을 비교.
  • 솔직히 이 부분은 조금 이해하기 힘들었다. 자세한 예제는 아래 박성철님의 슬라이드쉐어 자료에서 확인하면서 이해하길 바람.

두번째 프로젝트, vAhAllA(발할라)

  • 자바 제네릭의 한계를 극복하고 참조 타입 때문에 발생하는 자바 성능을 개선

기존 자바 타입

  • 자바의 타입 = {원시타입, 참조 타입}
    • 원시타입 - 시스템에서 가지고있는 타입
    • 참조타입 - 모든객체, 배열
  • 비효율적인 참조 타입에 의존
  • unboxing / boxing 비용 발생
  • 변수도 메모리 적지않게 씀..

값타입

  • 참조에 값이 들어가버림. (참조와 값 따로가 아닌)
  • 코드는 클래스 같지만 동작은 값처럼..
    • 데이터의 일렬, 밀집 배열
    • 원시타입과 참조타입의 간극 채움
  • 문법
    • value class Rational{
      final int number;
      final int denom;
      }

제네릭 특화

  • 값타입에 맞게 동적으로 클래스 변조
  • c++의 템플릿과 차이는 c++은 컴파일타임에 생성.
  • 참조 타입만 허용하는 자바 제네릭
    • List primeNums = new ArrayList<>(); // compile error
  • 자바 제네릭은 컴파일러 기술, 타입 매개변수 값은 소거되어 VM은 정보를 알지 못함(하위호환성)
    • ArrayList(); -> ArrayList.class
    • ArrayList(); -> ArrayList.class
  • 값 타입에 맞게 동적으로 클래스 변조
    • ArrayList(); -> ArrayList{T=int}.Class

기타…

  • 값 기반 클래스
  • 최소 값 타입
  • VCC & DVC

세번째 프로젝트, lOOm(룸)

화이버(Fiber)

  • 동시성 프로그래밍을 누구나 할 수 있도록 (Rxjava 등을 사용하지 않아도~)

후기

아쉽지만 첫 번째 강의만 듣고 두 번째 Microservice 실습은 개인 사정으로 참석을 못 하였습니다..
이번 세미나는 근미래의 자바가 언어 관점에서 어떻게 변화가 될지, OpenJDK의 앰버(Amber), 바할라(Valhalla), 룸(Loom) 프로젝트를 중심으로 진행 되었습니다.
솔직히 아직 주니어 개발자의 입장에서 완벽하게 와닿지는 않지만 그래도 제 주력 언어인 자바가 어떻게 나아갈지 조금이라도 알게 되는 좋은 경험이었던 것 같습니다.
앞으로 자바를 조금 더 열심히 공부해야겠다는 생각으로 이번 포스팅을 마치겠습니다.

Links

  • https://www.slideshare.net/gyumee/javanext?qid=3af9457d-2ecf-45dc-a23a-32571bcfbd15&v=&b=&from_search=1

본문의 내용은 제가 이해한 대로 작성하였기 때문에 틀린 부분이 있다면 댓글로 피드백을 부탁드리겠습니다. 감사합니다.

facebook share twitter share
0%