Archive: 2018

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

연봉 높은 프로그래밍 언어 순위 2018

이번 포스팅에서는 연봉 많이 받는 프로그래밍 언어 세계 순위를 알아보고 몇 가지 언어들에 대해서 살펴보겠습니다. 순위는 stackoverflow Developer Survey Results 2018 을 참고했습니다. 순위 언어가 많으므로 TOP 10 까지만 보겠습니다. 세계 순위와 미국 순위에 모두 올라가 있는 언어는 굵게 표시하였고, 환율은 KRW 1,1

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

변경된 MySQL 설치 방법 (5.7 이상)

요즘 ansible 로 MySQL 프로비저닝 스크립트를 짜고 있습니다. 기존 작성되어 있던 MariaDB 스크립트를 참고해서 작성 중인데 MySQL 에서는 동작하지 않는 부분이 좀 있었습니다. 아무래도 둘이 비슷하다고는 해도 각자 버전 업이 계속 되면서 차이점이 생긴 것 같습니다. 이번 포스팅에서는 Unix/Linux 시스템에 바이너리 파일을 이용해서 설

Java Lambda (2) 타입 추론과 함수형 인터페이스

타입 추론 Type Inference 타입 추론이란 타입이 정해지지 않은 변수의 타입을 컴파일러가 유추하는 기능입니다. 자바에서는 일반 변수에 대해 차입 추론을 지원하지 않기 때문에 자바에서의 타입 추론은 제네릭과 람다에 대한 타입 추론을 말합니다. 12345// 일반 변수에 대해 타입 추론을 지원하는 스칼라는 타입 생략 가능var name = "