람다식
- 람다의 도입으로 자바는 객체지향언어인 동시에 함수형 언어가 되었다
- 자바는 oop 언어인 동시에 함수형 언어이다
람다식이란?
- 메서드를 하나의 식으로 표현한 것
- 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다
- 메서드의 이름과 반환값이 없어지므로 익명 함수라고도 한다
- 람다식 자체만으로도 메서드의 역할을 대신할 수 있다
- 메서드의 매개변수로 전달되어지는 것이 가능하고, 메서드의 결과로 반환될 수도 있다
- 메서드를 변수처럼 다루는 것이 가능해짐
- 익명 함수가 아니라 익명 객체이다
메서드와 함수의 차이
- 객체지향개념에서는 함수 대신 객체의 행위나 동작을 의미하는 메서드라는 용어를 사용
- 메서드는 함수와 같은 의미지만, 특정 클래스에 반드시 속해야 한다는 제약이 있기 때문에 기존의 함수와 같은 의미의 다른 용어를 선택해서 사용한 것
- 람다식을 통해 메서드가 하나의 독립적인 기능을 하기 때문에 함수라는 용어를 사용하게 됨
람다식 작성하기
- 메서드의 이름과 반환 타입을 제거하고 -> 를 블록 {} 앞에 추가한다
- 반환값이 있는 경우 식이나 값만 적고 return 문 생략 가능(끝에 ; 안 붙임)
- 매개 변수의 타입이 추론 가능하면 생략 가능
함수형 인터페이스
- 람다식은 익명 클래스의 객체와 동등하다
- 람다식을 다루기 위한 인터페이스를 함수형 인터페이스라고 부르기로 했다
- 하나의 추상 메서드만 정의되어 있어야 한다는 제약이 있다
- 그래야 람다식과 인터페이스의 메서드가 1:1로 연결될 수 있기 때문
- 반명 static 메서드와 defualt 메서드의 개수에는 제약이 없다
함수형 인터페이스 타입의 매개변수와 반환타입
- 람다식을 참조하는 참조변수를 매개변수로 지정해야 할 때 참조변수 없이 직접 람다식을 매개변수로 지정하는 것도 가능하다
람다식의 타입과 형변환
- 람다식의 타입이 함수형 인터페이스 타입과 일치하는 것은 아니다
- 람다식은 익명 객체고 익명 객체는 타입이 없다
- 정확히는 타입이 있지만 컴파일러가 임의로 이름을 정하기 때문에 알 수 없다
- 람다식은 Object 타입으로 형변환 할 수 없다
- 오직 함수형 인터페이스로만 형변환이 가능하다
외부 변수를 참조하는 람다식
- 람다식 내에서 참조하는 지역 변수는 final이 붙지 않았어도 상수로 간주
- 외부 지역변수와 같은 이름의 람다식 매개변수는 허용되지 않는다.