lambda
[Java] Java 8 특징
[Java] Java 8 특징
2023.04.13Java SE 8 (LTS) 2014년 3월에 공개했으며 대표적인 변경 사항은 다음과 같다. 람다 표현식(Lambda Expression) 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다. Predicate p = (Apple a) -> a.getWeight(); 자세한 내용은 [람다 표현식 소개], [람다 타입/검사/추론] 이 글들을 참고하자 메서드 참조(Method Reference) 메서드 참조는 람다 표현식을 축약한 형태이다. 메서드 참조를 사용하면 람다 표현식을 더 줄일 수 있는데, 상황에 따라 가독성이 더 좋아보일 수 있다. Predicate p = Apple..
[Java] 메서드 참조
[Java] 메서드 참조
2023.04.04메서드 참조? 메서드 참조는 람다 표현식을 축약한 형태이다. 메서드 참조를 사용하면 람다 표현식을 더 줄일 수 있는데, 상황에 따라 가독성이 더 좋아보일 수 있다. 다음은 람다 표현식을 메서드 참조로 바꾼 예시이다 inventory.sort((Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())); inventory.sort(comparing(Apple::getWeight)); 메서드 참조는 실제로 메서드를 호출하는 것이 아니기 때문에 괄호는 적지 않는다. 메서드 참조 형태 메서드 참조는 크게 3가지 형태가 있는데, 한 번 살펴보자. 정적 메서드 참조 예를 들어 Integer의 parseInt 정적 메서드를 다음과 같이 메서드 참조 형태로 바꿀..
[Java] 람다 타입 검사/추론/제약
[Java] 람다 타입 검사/추론/제약
2023.04.04타입 검사 람다가 사용되는 context를 이용해서 람다의 형식(type)을 추론할 수 있다. 어떤 context에서 기대되는 람다 표현식의 형식을 대상 형식(target type)이라고 부른다. 타입 검사 과정 다음 예시를 통해 타입 검사 과정을 확인해보자. filter(inventory, (Apple apple) -> apple.getWeight() > 150); filter 메서드의 선언을 확인한다. filter 메서드는 두 번째 파라미터로 Predicate 형식(target type)을 기대한다. Predicate은 test라는 한 개의 추상 메서드를 정의하는 함수형 인터페이스이다. test 메서드는 Apple을 받아 boolean을 반환하는 함수 디스크립터를 묘사한다. filter 메서드로 전달..
[Java] 함수형 인터페이스
[Java] 함수형 인터페이스
2023.04.03함수형 인터페이스? 함수형 인터페이스는 오직 하나의 추상 메서드를 가지고 있는 인터페이스이다. 함수 디스크립터 함수형 인터페이스의 추상 메서드는 람다 표현식의 시그니처를 묘사한다. 함수형 인터페이스의 추상 메서드 시그니처를 함수 디스크립터라고 한다. 다양한 람다 표현식을 사용하려면 공통의 함수 디스크립터를 기술하는 함수형 인터페이스 집합이 필요하다. 자바 API는 Comparable, Runnable, Callable 등의 다양한 함수형 인터페이스를 포함하고 있다. 여기서 Java 8 라이브러리는 java.util.function 패키지에서 새로운 함수형 인터페이스를 제공하는데, 그 중에서 Predicate, Consumer, Function 인터페이스를 살펴보자. Predicate java.util.f..
[Java] 동작 파라미터화 코드 전달하기
[Java] 동작 파라미터화 코드 전달하기
2023.03.28동작 파라미터화? 동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드블록을 의미한다. 이 코드 블록은 나중에 프로그램에서 호출한다. 예를 들어, 나중에 실행될 메서드의 인수로 코드 블록을 전달할 수 있다. 결과적으로 코드 블록에 따라 메서드의 동작이 파라미터화 된다. 변화하는 요구사항마다 새로운 파라미터를 받는 메서드를 만들어야 하는 상황이 생길 수 있다. 하지만 동작 파라미터화 코드를 전달하면 해결이 가능하다. 변화하는 요구사항에 대응하기 농장 재고목록 애플리케이션에서 재고 파악하는 예제를 통해 요구사항의 변화에 대응해보자. 요구사항 1. 녹색 사과만 필터링 사과 색을 정의하는 다음과 같은 Color enum이 존재한다고 가정하자 enum Color { RED, GREEN } public..