Chapter 14 람다와 스트림

Seunghee Ryu·2023년 11월 2일
0

자바의 정석

목록 보기
7/11

람다식

  • 람다의 도입으로 자바는 객체지향언어인 동시에 함수형 언어가 되었다
  • 자바는 oop 언어인 동시에 함수형 언어이다

람다식이란?

  • 메서드를 하나의 식으로 표현한 것
  • 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다
  • 메서드의 이름과 반환값이 없어지므로 익명 함수라고도 한다
  • 람다식 자체만으로도 메서드의 역할을 대신할 수 있다
  • 메서드의 매개변수로 전달되어지는 것이 가능하고, 메서드의 결과로 반환될 수도 있다
  • 메서드를 변수처럼 다루는 것이 가능해짐
  • 익명 함수가 아니라 익명 객체이다

메서드와 함수의 차이

  • 객체지향개념에서는 함수 대신 객체의 행위나 동작을 의미하는 메서드라는 용어를 사용
  • 메서드는 함수와 같은 의미지만, 특정 클래스에 반드시 속해야 한다는 제약이 있기 때문에 기존의 함수와 같은 의미의 다른 용어를 선택해서 사용한 것
  • 람다식을 통해 메서드가 하나의 독립적인 기능을 하기 때문에 함수라는 용어를 사용하게 됨

람다식 작성하기

  • 메서드의 이름과 반환 타입을 제거하고 -> 를 블록 {} 앞에 추가한다
  • 반환값이 있는 경우 식이나 값만 적고 return 문 생략 가능(끝에 ; 안 붙임)
  • 매개 변수의 타입이 추론 가능하면 생략 가능

함수형 인터페이스

  • 람다식은 익명 클래스의 객체와 동등하다
  • 람다식을 다루기 위한 인터페이스를 함수형 인터페이스라고 부르기로 했다
  • 하나의 추상 메서드만 정의되어 있어야 한다는 제약이 있다
    - 그래야 람다식과 인터페이스의 메서드가 1:1로 연결될 수 있기 때문
  • 반명 static 메서드와 defualt 메서드의 개수에는 제약이 없다

함수형 인터페이스 타입의 매개변수와 반환타입

  • 람다식을 참조하는 참조변수를 매개변수로 지정해야 할 때 참조변수 없이 직접 람다식을 매개변수로 지정하는 것도 가능하다

람다식의 타입과 형변환

  • 람다식의 타입이 함수형 인터페이스 타입과 일치하는 것은 아니다
  • 람다식은 익명 객체고 익명 객체는 타입이 없다
    - 정확히는 타입이 있지만 컴파일러가 임의로 이름을 정하기 때문에 알 수 없다
  • 람다식은 Object 타입으로 형변환 할 수 없다
    - 오직 함수형 인터페이스로만 형변환이 가능하다

외부 변수를 참조하는 람다식

  • 람다식 내에서 참조하는 지역 변수는 final이 붙지 않았어도 상수로 간주
  • 외부 지역변수와 같은 이름의 람다식 매개변수는 허용되지 않는다.

0개의 댓글