15. 람다식과 함수형 프로그래밍

zza·2023년 9월 26일
0

Java

목록 보기
15/19
post-thumbnail

람다식

기초

  • 원래는 함수를 호출한 곳에서 함수를 정의한 곳으로 갔다가 기능을 다 하면 함수 호출부로 돌아와서 밑에 코드를 읽어간다.

  • 왔다 갔다 하지 않는다 = 외부 영향 x = 안정적

  • 람다식은 익명함수.
    이름 없이 (매개변수) -> {함수} 로 적는다.

ex)

  • { }, ( ), return 등 생략 가능하다.
  • print 했으니까 return 없음.
  • 매개변수 없을 수 있음.
  • 인터페이스 Negative, Printable은 원래 객체 생성 불가능하나, 람다식으로 n 객체를 구현했다.

문제

  1. o
    : 매개변수 없이 Hi 구현
  1. x
  1. 2
    : 다른 곳에 전달한다 = 매개변수로 사용된다.
    : 객체 지향 특징 = class가 있다
    but 람다식은 class가 없어도 쓸 수 있다.
    즉, 자바의 객체 성질과 상반된다.
    js에서 많이 사용된다.
  1. String 클래스에 있는 substring을 참조하고 있다. -> String 클래스에 의존적인 코드이다.
    :substring은 string이 제공하는 문자열 절단 메서드

유의사항

활용

  • 인터페이스에 정의해야 하는 메서드가 하나일때만 사용되고, 람다식을 이용한다고 @FunctionalInterface를 붙여 컴파일에게 알려준다.

문제

  1. 3
    : return 쓰면 { } 필수

  1. : 인터페이스가 메서드를 하나 가졌을때만, 람다식으로 구현 가능
Computable c = ( ) -> { };
  1. x
    :Predicate는 리턴타입이 bool타입이나, getHeight는 정수를 리턴하므로 오류 발생한다.
  1. x
    : 반환타입 int. return 필요
  1. x
    : A는 람다식으로 구현 가능하나, AA는 a와 aa 두개의 메서드를 구현해야 하므로 람다식 사용 x
  1. pass
  1. pass

  1. n = 3에서 오류 발생
    : 인터페이스의 변수는 모두 상수이므로 변수값을 바꾸는 순간 람다식의 (from + n) 에 대입 시 오류가 생긴다.
  1. pass
profile
zza

0개의 댓글