도입 람다로 함수형 인터페이스의 인스턴스를 만들 수 있다. 하지만 람다 표현식 자체에는 어떤 함수형 인터페이스를 구현하는지의 정보가 포함되어있지 않으므로 람다의 실제 형식을 제대로 파악해야한다. 형식 검사 람다가 사용되는 context를 이용해서 람다의 형식을 추론할 수 있다. 어떤 context에서 기대되는 람다 표현식의 형식을 대상 형식이라고 부른다. 예를 들면 람다가 전달된 메서드 파라미터나 람다가 할당되는 변수에서 추론하는 것이다. List heightThan160cm = filter(inventory, (Height height) -> height.getHeight() > 160); 위 예제는 아래 순서로 형식 확인 과정을 거친다. (1) filter 메서드의 선언을 확인한다. (2) filte..
함수 디스크립터 함수형 인터페이스의 추상 메서드 시그니처 = 람다 표현식의 시그니처 이다. 람다 표현식의 시그니처를 서술하는 메서드를 함수 디스크립터라고 부른다. 여기서 메서드 시그니처란, 메서드명/파라미터 순서/파라미터 타입/파라미터 개수를 의미한다. 왜 함수형 인터페이스를 인수로 받는 메서드에만 람다 표현식을 사용할 수 있을까? 언어 설계자들은 언어를 더 복잡하게 만들지 않는 방법을 선택했다. 대부분의 자바 프로그래머가 하나의 추상 메서드를 갖는 인터페이스에 이미 익숙하다. @FunctionalInterface 함수형 인터페이스에 @FunctionalInterface 어노테이션이 추가되었다. 해당 어노테이션을 선언하면 인터페이스가 함수형 인터페이스가 아니라면 컴파일 에러가 발생한다. 함수형 인터페이스..
람다표현식이란? 람다표현식은 JAVA 8에 등장하였다. 익명 클래스처럼 이름이 없는 함수이면서, 메서드를 인수로 전달할 수 있다. 메서드로 전달할 수 있는 익명함수를 단순화한 것이다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트를 가질 수 있다. 람다표현식의 특징 익명 = 메서드의 이름이 없다. 함수 = 메서드처럼 특정 클래스에 종속되지 않는다. 전달 = 람다 표현식을 메서드 인수로 전달하거나 변수로 저장될 수 있다. 간결성 = 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 람다를 이용해서 간결한 방식으로 코드를 전달할 수 있다. 람다가 기술적으로 자바 8 이전의 자바로 할 수 없었던 일을 제공하는 것은 아니지만, 동작 파라미터를 이용할..