![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bKFKgJ/btrTa4b5oiA/ko7ccY0finwnOep564ekFK/img.png)
Java 17 이 2021년 9월에 Release 됐고 최신 LTS 버전이 됐다. 아직도 Java 11, 8 등이 가장 많이 쓰이긴 하지만 Spring 6 부터는 최소 권장하는 자바 버전이 17 이상이고 다음 세대를 준비하기 위해 Java 17을 적극적으로 도입해야 하지 않을까 생각한다. JVM 성능 향상이나 기타 유틸리티등은 제외하고 코드를 작성할 때 자바 8 과 비교해서 자바 17일 선택할 경우 쓸 수 있는 주요 feature 들만 정리해보겠다. var keyword (java 10+) 가변형 변수 type 이다. 동적 타이핑 되는 python, 코틀린과 같은 언어에서 사용되고 있으면 java 에서도 도입했다. 멤버 변수로는 사용할 수 없으면 지역 스코프에서만 사용 가능하다. public void s..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/p5Vl1/btrSsSBRCUc/BF3mF6A1h9Yau4i5zLpc81/img.jpg)
블랙박스라는 이름이라고 익숙하게 알려진 비행기록장치(Flight recorder)는 항공 사고시 원인을 파악하기 위한 중요한 장치이다. JFR 을 풀어쓰면 Java Flight Recorder 인데 아마도 블랙박스에서 네이밍 영감을 얻었을까? 어쨌든 JFR 은 JVM 의 상태를 확인할 수 있는 프로파일링 유틸리티 소프트웨어이다. Java8 에서는 유료였지만, Java11에 와서 JMC 와 함께 무료로 사용할 수 있다. 용도로만 봤을 때 웹 형태로 지원하는 제니퍼와 같은 국산 상용 툴이 나 Scouter 와 같은 국산 오픈소스, SASS 형태로 제공하는 APM 툴, 설치형으로 VisaulVM 과 같은 무료 CS 프로그램등 과 비슷한 역할을 한다. 하지만 위에서 언급한 Tool은 이용할 경우 설치가 필요하거..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/xUycH/btraeytZSi4/3XoIsaHQvUO2J7lHAMgb8K/img.png)
코틀린은 IntelliJ 라는 유명한 유료IDE를 만든 JetBrains라는 회사에서 만든 프로그램 언어이다. JVM에서 동작하고 JAVA와 친척쯤 되는 느낌이 있다. 실제로 몇 가지 디펜던시를 포함하면 하나의 프로젝트에서 동시에 2가지 언어를 사용해서개발이 가능하다. 오늘은 이런 Kotlin 에 대해서 간략히 소개하고 코드에서 Java 와 어떤 차이점이 있는지 확인해보겠다. Kotlin Island 코틀린은 발트해 있는 러시아의 한 섬의 이름을 따서 만들었다고 한다. 자바가 자바섬에서 따서 만들었다는것에 영감을 얻었다는데 사실 여부는 잘 모르겠다. 아래 사진은 코들린이라는 섬의 위치인데 젯브레인은 체코 회사이다. 하지만 지도의 표시된 위치는 러시아 발트해 앞인데 그 곳에 젯브레인사의 R&D 본부가 있다..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bPk31F/btq8KblvqPP/gDRSRuasc0GKmeUCkIMAC0/img.png)
자바 개발자로서 함수형 프로그래밍을 익숙하지 않고 잘 모른다. 하지만 내가 이해하고 있는 수준내에서 함수형 프로그래밍을 자바 코드를 예제로 설명해보려한다. 함수형 프로그래밍 자바 코드를 예제로 들기 전에 먼저 함수형 프로그래밍에 대해서 알아보자. 함수형 프로그래밍이라고 특별할 건 없고 우리가 익숙하게 알고 있는 객체지향프로그래밍이나 절차지향적 프로그래밍과 같은 프로그래밍 패러다임중 하나이다. 객체지향프로그래밍이 객체간 메세지와 협력 관계의 정의로 이루어졌다면 함수형 프로그래밍은 단순히 함수들의 조합으로 이루어진다. 그 함수들은 외부와의 관계는 없고 단지 함수 자신만으로 존재한다. 하지만 함수들의 조합이라는 말은 쉽지만 실제로 함수형 코딩을 잘 하는데는 꽤 높은 러닝 커브를 요구한다. 개인적인 생각에는 객..
Optional 클래스는 Java 8 의 새로운 기능 중 마지막으로 작성할 내용이다. 자바8 이전에도 Google Guava 같은 유틸 라이브러리 지원을 받아 사용할 수 있었는데 자바 8에 와서는 공식적으로 지원하게 됐다. 오늘은 이 Optional 클래스에 대해서 간단하게 알아보자. Optional 무엇인가? Optional 클래스는 Wrapping 클래스이다. 자바는 객체 지향 언어이기 때문에 모든 type 에 클래스를 제공한다. int, long, char 같은 Primitive data type 도 Integer 나 Long , Character 같은 Wrapping 클래스를 제공한다. 물론 목적의 차이가 있지만 값을 Wrapping 하거나 편의 메서드를 제공하는등 기능적으로 볼때는 비슷한 맥락이..
Java8 이전 버전에서는 날짜,시간 등의 작업을 위해서 java.util.Date 나 Time 클래스를 이용했다. 하지만 이 클래스들은 동시성 부분이나 TimeZone 으로 인한 어려움이 있었다. 그래서 자바 8 부터는 날짜 시간 작업을 위해 개선된 클래스가 소개됐는데 LocalTime , LocalDate 그리고 LocalDateTIme 클래스이다. LocalTime LocalTime 클래스는 오직 시간을 위한 클래스이다. 날짜 정보는 없고 시간 작업시 사용한다. 예를 들어 현재 시간이나 현재 시간 부터 몇 시간 후 등이다. 몇 가지 예제로 사용법을 알아보자. LocalTime now = LocalTime.now(); System.out.println(now); //16:11:24.625 now = ..
랜덤한 int를 원소로 같는 리스트가 있다. 이 리스트에 원소들의 합을 구하기 위해서는 보통은 아래와 같은 코드로 작성할 것이다. List numbers = Lists.newArrayList(11, 21, 45, 69, 10, 24, 12, 51, 22, 31, 20); int sum = 0; for (Integer number : numbers) { sum += number; } 하지만 자바 8+ 에서는 아래와 같은 코드 작성이 가능하다. int sum = numbers.stream() .mapToInt(Integer::intValue) .sum(); 어쩌면 더 복잡하게 느껴질 수도 있는 코드이다. 뭐 어쨌든 위와 같은 코드 형태가 자바 8에서 소개된 Stream API이다. Collection처럼 연..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bOR5EN/btqGRQ3kuYz/KtvxeYR5NfAl7uHdcMK1W1/img.png)
Java 8 에서 람다표현식나 Collection Stream API가 추가 되면서 인터페이스에 필연적인 변화가 생겼다. 인터페이스에도 defaut, static 메서드를 통해 구현된 메서드를 추가할 수 있는 방법이 생긴 것이다. 예제를 통해 한번 알아보자 1.default method java8 에 default method 가 추가 됐다. default method 가 추가된 이유는 기존 인터페이스들의 호환성을 위해서다. 특정 인터페이스에 메서드를 추가하면 해당 인터페이스를 구현하고 있는 모든 클래스의 변경이 필요하다. 그렇기 때문에 구현체가 있는 default 메서드를 정의하면 하위 클래스에서 오버라이드 할 필요가 없기 때문에 기존 인터페이스에 안전하게 추가할 수 있다. 아래는 인터페이스에 추가된 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/djjx4E/btqGAV5UQSU/6bImZHTrBrsqKCQgOJBLaK/img.png)
기술 면접을 보면 가끔 자바8의 new features에 무엇이 있는지 질문 받을 때가 있다. 이제 자바 8을 실무에서 많이 사용하고 있는데도 정작 답변을 하려면 말문이 막힌다. 2014년도에 자바8 이 소개됐으니 6년이란 시간이 지났지만 commerical support 도 2030년까지 연장됐고 하니 정리를 하는 기분으로 대표적 기능을 한 개씩 작성해 봐야겠다. 람다표현식 (Lambda Expressions) 1. 무엇? 람다의 어원은 수학에서 왔다. 자세한 내용은 잘 모른다. 어쨌든 프로그래밍에서 말하는 람다는 익명 함수를 말한다. 람다 표현식은 익명 함수를 나타내는 표현식이다. 빠르고 간결하게 선언해서 사용할 수 있는 기능 블록이다. 밑에 코드는 자바스크립트(ES6+)의 Arrow Function..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cWLTiz/btqETYxfnPY/cmtF3Qgyn9O3toZHnyB2rK/img.png)
Fork/Join Framework 는 효율적인 병렬처리를 위해 자바 7에서 소개된 새로운 기능이다. Fork/Join은 자바에서만 쓰이는 용어는 아니고 병렬 처리를 위한 공통된 모델이고 분할 정복 알고리즘을 통해서 재귀적으로 처리된다. 괜히 어려워지는 것 같은데 간단한 예제를 통해 Java에서 Fork/Join Framework 을 사용 하는법을 알아보자 Fork/Join 나눴다/합쳐지다 Fork/Join 을 네이버에서 영어 뜻을 찾아보면 아래와 같다. Fork Join 단어 뜻대로 보면 일을 나누고 합치는 것이다. 더 풀어 쓰면 어떤 작업을 여러개의 쓰레드가 나누어 처리하게 하고 작업이 끝나면 작업들을 합치는 것이다. 만약 100개의 랜덤한 숫자가 있고 이를 합산하는 프로그램을 Fork/Join을 통..
- Total
- Today
- Yesterday