Category: Java

Java 11 릴리즈!

자바 11이 릴리즈됐습니다. 자바 10이 출시된지 6개월만입니다. 오라클은 6개월마다 새 버전을 출시한다고 했고, 특정 버전만 장기간 지원(Long-term support; LTS)한다고 밝혔는데요. 자바 11은 첫 번째 LTS 버전입니다. 오라클이 이런 버전 정책을 가져가는 이유는 두 가지입니다. 자바 생태계가 빠르게 발전할 수 있도록 6개월마다 새로

Java 스트림 Stream (2) 고급

살펴볼 내용 동작 순서 성능 향상 스트림 재사용 지연 처리(Lazy Invocation) Null-safe 스트림 생성하기 줄여쓰기(Simplified) 동작 순서 다음 스트림에서는 최종 작업인 findFirst 메소드를 호출합니다. 과연 출력 결과는 어떨까요? 12345678910list.stream() .filter(el -> {

Java 스트림 Stream (1) 총정리

살펴볼 내용 생성하기 배열 / 컬렉션 / 빈 스트림 Stream.builder() / Stream.generate() / Stream.iterate() 기본 타입형 / String / 파일 스트림 병렬 스트림 / 스트림 연결하기 가공하기 Filtering Mapping Sorting Iterating 결과 만들기 Calculating Redu

Java 8 옵셔널 Optional

개발할 때 개발자를 괴롭히는 예외 중 하나는 NullPointerException 입니다. NullPointerException 을 피하고 null 체크하는 로직을 줄이기 위해 빈 값일 때 null 대신 초기값을 사용하길 권장하곤 합니다. 12List<String> names = getNames();names.sort(); // names 가 n

Java 제네릭 Generics DEEP DIVE

JDK API 를 살펴보면 다음과 같은 코드를 흔히 볼 수 있습니다. 1default <V> Function<V, R> compose(Function<? super V, ? extends T> before) 위 코드는 자바 8에 추가된 함수형 인터페이스 Function 의 compose 라는 디폴트 메소드의 시그니쳐입니다.

Java Lambda (7) 람다와 클로저

람다와 클로저 자바 커뮤니티에서는 클로저와 람다를 혼용하면서 개념 상 혼란이 있었습니다. 그래서 자바 8부터 클로저를 지원한다는 글을 보기도 합니다. 이번 포스트에서는 자바에서의 람다와 클로저를 명확히 구분해보고자 합니다. 먼저 일반적인 클로저부터 살펴보겠습니다. 클로저 Closure 보통의 함수는 외부에서 인자를 받아서 로직을 처리합니다. 그런데 클로저는

Java Lambda (6) 예외 처리

예외처리 람다 예외처리에서 주의할 점을 람다 작성 및 호출하는 입장으로 나눠서 살펴보겠습니다. 람다를 작성해서 넘겨주는 입장 : 해당 람다가 어떤 환경에서 실행될 지 알 수 없다. 람다를 받아서 호출(실행)하는 입장 : 람다에서 어떤 예외가 던져질 지 알 수 없다. 예제 다음 예제는 Runnable 을 순서대로 실행하는 메소드입니다. 1234public

Java Lambda (5) 변수 범위

변수 범위 람다는 새로운 변수 범위를 생성하지 않습니다. 람다 내에서 변수 사용은 둘러싸고 있는 환경의 변수들을 참조합니다. this 나 super 키워드도 마찬가지입니다. 따라서 복잡해지지 않습니다. 아래 예제에서 i 는 단순히 람다를 둘러싸고 있는 클래스의 필드를 가리키게 됩니다. 12345678910111213141516171819public stat

Java Lambda (4) 기본으로 제공되는 함수형 인터페이스

이전 포스트에서 함수형 인터페이스에 대해서 살펴봤습니다. 이번 포스트에서는 자바에서 기본적으로 제공하는 함수형 인터페이스를 살펴보겠습니다. 기본 API 에서 함수형 인터페이스는 java.util.function 패키지에 정의되어 있습니다. Functions Suppliers Consumers Predicates Operators Legacy Functio

Java Lambda (3) 메소드 참조

메소드 참조 Method References 메소드 참조는 메소드를 간결하게 지칭할 수 있는 방법으로 람다가 쓰이는 곳 어디서나 사용할 수 있습니다. '참조’라는 말에서 알 수 있듯이 이미 존재하는 이름을 가진 메소드를 람다로써 사용할 수 있도록 참조하는(가리키는) 역할을 합니다. 즉, 일반 함수를 람다 형태로 사용할 수 있도록 해줍니다. 그리고 메소드를