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..
블랙박스라는 이름이라고 익숙하게 알려진 비행기록장치(Flight recorder)는 항공 사고시 원인을 파악하기 위한 중요한 장치이다. JFR 을 풀어쓰면 Java Flight Recorder 인데 아마도 블랙박스에서 네이밍 영감을 얻었을까? 어쨌든 JFR 은 JVM 의 상태를 확인할 수 있는 프로파일링 유틸리티 소프트웨어이다. Java8 에서는 유료였지만, Java11에 와서 JMC 와 함께 무료로 사용할 수 있다. 용도로만 봤을 때 웹 형태로 지원하는 제니퍼와 같은 국산 상용 툴이 나 Scouter 와 같은 국산 오픈소스, SASS 형태로 제공하는 APM 툴, 설치형으로 VisaulVM 과 같은 무료 CS 프로그램등 과 비슷한 역할을 한다. 하지만 위에서 언급한 Tool은 이용할 경우 설치가 필요하거..
코틀린은 IntelliJ 라는 유명한 유료IDE를 만든 JetBrains라는 회사에서 만든 프로그램 언어이다. JVM에서 동작하고 JAVA와 친척쯤 되는 느낌이 있다. 실제로 몇 가지 디펜던시를 포함하면 하나의 프로젝트에서 동시에 2가지 언어를 사용해서개발이 가능하다. 오늘은 이런 Kotlin 에 대해서 간략히 소개하고 코드에서 Java 와 어떤 차이점이 있는지 확인해보겠다. Kotlin Island 코틀린은 발트해 있는 러시아의 한 섬의 이름을 따서 만들었다고 한다. 자바가 자바섬에서 따서 만들었다는것에 영감을 얻었다는데 사실 여부는 잘 모르겠다. 아래 사진은 코들린이라는 섬의 위치인데 젯브레인은 체코 회사이다. 하지만 지도의 표시된 위치는 러시아 발트해 앞인데 그 곳에 젯브레인사의 R&D 본부가 있다..
자바 개발자로서 함수형 프로그래밍을 익숙하지 않고 잘 모른다. 하지만 내가 이해하고 있는 수준내에서 함수형 프로그래밍을 자바 코드를 예제로 설명해보려한다. 함수형 프로그래밍 자바 코드를 예제로 들기 전에 먼저 함수형 프로그래밍에 대해서 알아보자. 함수형 프로그래밍이라고 특별할 건 없고 우리가 익숙하게 알고 있는 객체지향프로그래밍이나 절차지향적 프로그래밍과 같은 프로그래밍 패러다임중 하나이다. 객체지향프로그래밍이 객체간 메세지와 협력 관계의 정의로 이루어졌다면 함수형 프로그래밍은 단순히 함수들의 조합으로 이루어진다. 그 함수들은 외부와의 관계는 없고 단지 함수 자신만으로 존재한다. 하지만 함수들의 조합이라는 말은 쉽지만 실제로 함수형 코딩을 잘 하는데는 꽤 높은 러닝 커브를 요구한다. 개인적인 생각에는 객..
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처럼 연..
Java 8 에서 람다표현식나 Collection Stream API가 추가 되면서 인터페이스에 필연적인 변화가 생겼다. 인터페이스에도 defaut, static 메서드를 통해 구현된 메서드를 추가할 수 있는 방법이 생긴 것이다. 예제를 통해 한번 알아보자 1.default method java8 에 default method 가 추가 됐다. default method 가 추가된 이유는 기존 인터페이스들의 호환성을 위해서다. 특정 인터페이스에 메서드를 추가하면 해당 인터페이스를 구현하고 있는 모든 클래스의 변경이 필요하다. 그렇기 때문에 구현체가 있는 default 메서드를 정의하면 하위 클래스에서 오버라이드 할 필요가 없기 때문에 기존 인터페이스에 안전하게 추가할 수 있다. 아래는 인터페이스에 추가된 ..
기술 면접을 보면 가끔 자바8의 new features에 무엇이 있는지 질문 받을 때가 있다. 이제 자바 8을 실무에서 많이 사용하고 있는데도 정작 답변을 하려면 말문이 막힌다. 2014년도에 자바8 이 소개됐으니 6년이란 시간이 지났지만 commerical support 도 2030년까지 연장됐고 하니 정리를 하는 기분으로 대표적 기능을 한 개씩 작성해 봐야겠다. 람다표현식 (Lambda Expressions) 1. 무엇? 람다의 어원은 수학에서 왔다. 자세한 내용은 잘 모른다. 어쨌든 프로그래밍에서 말하는 람다는 익명 함수를 말한다. 람다 표현식은 익명 함수를 나타내는 표현식이다. 빠르고 간결하게 선언해서 사용할 수 있는 기능 블록이다. 밑에 코드는 자바스크립트(ES6+)의 Arrow Function..
Fork/Join Framework 는 효율적인 병렬처리를 위해 자바 7에서 소개된 새로운 기능이다. Fork/Join은 자바에서만 쓰이는 용어는 아니고 병렬 처리를 위한 공통된 모델이고 분할 정복 알고리즘을 통해서 재귀적으로 처리된다. 괜히 어려워지는 것 같은데 간단한 예제를 통해 Java에서 Fork/Join Framework 을 사용 하는법을 알아보자 Fork/Join 나눴다/합쳐지다 Fork/Join 을 네이버에서 영어 뜻을 찾아보면 아래와 같다. Fork Join 단어 뜻대로 보면 일을 나누고 합치는 것이다. 더 풀어 쓰면 어떤 작업을 여러개의 쓰레드가 나누어 처리하게 하고 작업이 끝나면 작업들을 합치는 것이다. 만약 100개의 랜덤한 숫자가 있고 이를 합산하는 프로그램을 Fork/Join을 통..
- Total
- Today
- Yesterday