[JAVA] 함수형 인터페이스, 람다식

하이초·2024년 1월 15일

JAVA

목록 보기
6/7
post-thumbnail

1️⃣ 함수형 인터페이스

함수형 인터페이스란 단 1개의 추상 메서드를 갖는 인터페이스를 말한다.
JAVA 8 부터는 기본 구현체를 포함한 default method 및 static method도 포함할 수 있다.
그러나 추상 메서드는 딱 1개!!만 있어야 한다.

그리고 자바의 람다 표현식함수형 인터페이스로만 사용이 가능하다

@FunctionalInterface

함수형 인터페이스를 만들 때 해당 어노테이션을 달지 않아도 추상 메서드가 1개라면 함수형 인터페이스로 활용할 수 있이나, 해당 어노테이션을 활용하면 문법 검사를 할 수 있기 때문에 유지보수 등의 측면에서 어노테이션을 달아주는 것이 좋다.

2️⃣ 자바 기본 제공 함수형 인터페이스

내가 기억해야 하는 것은 바로 이것!!
내가 직접 만들어서 함수형 인터페이스를 활용할 수도 있으나, 다양한 람다식의 활용을 위해서 기본적으로 자바에서 제공하는 함수형 인터페이스를 알아야 한다.

많은 기본 함수형 인테페이스들이 있지만, 그 중 자주 사용되는 대표적인 것들만 몇개 정리해보겠다.

함수형 인터페이스설명추상메소드
PredicateT -> booleanboolean test(T t)
ConsumerT -> voidvoid accept(T t)
Supplier() -> TT get()
Function<T, R>T -> RR apply(T t)
Comparator(T, T) -> intint compare(T o1, T o2)
Runnable() -> voidvoid run()

Predicate

매개값을 받아 검사하고 true or false를 반환한다.

Consumer

매개값을 전달받아 소비하고 아무것도 반환하지 않는다.

Supplier

매개값 없이 호출한 곳으로 함수에 지정된 값을 반환한다.

Function

주로 매개값을 반환값으로 매핑할 때 즉, 타입 변환이 목적일 때 사용한다.

Comparator

매개값 두 개를 전달받아 o1 > o2일 경우 양수, o1 < o2일 경우 음수, o1 == 02일 경우 0을 반환한다.

Runnable

thread에서 많이 사용된다.

2️⃣ 람다식

람다식이란 메서드를 하나의 식으로 표현한 것으로, 코드를 간결하면서 명확하게 표현할 수 있도록 한다.

(인자 리스트) -> {바디}

  • 인자리스트
    - 인자가 없을 때: ()
    - 인자가 한 개일 때: a 또는 (a)로 괄호 생략 가능
    - 인자가 여러개일 때: (a, b) 괄호 생략 불가능
    - 인자의 타입은 생략/명시 모두 가능하다
  • 바디
    - 화살표 오른쪽에 함수 본문을 정의한다
    - 여러 줄인 경우 {}를 사용해서 묶는다
    - return도 생략할 수 있다

람다식 내부에서 외부의 변수를 참조할 경우 해당 변수는 final이거나 effective final인 경우에만 참조할 수 있다

  • effective final이란, final 키워드를 붙이지 않아도 java 8 이후 해당 변수의 값을 변경하지 않는다면 사실상 final로 보는 것인데, 명확한 표기를 위하여 final 키워드를 붙여주는 것이 좋다

메서드 레퍼런스

타입포맷
스태틱 메서드타입::스태틱 메서드
특정 객체의 인스턴스 메소드객체 레퍼런스::인스턴스 메소드
임의 객체의 인스턴스 메소드타입::인스턴스 메소드
생성자 참조타입::new

🥲 알쏭달쏭..
솔직히 지금까지 알쏭달쏭하다.. 여러 예제를 보고 있는데 코드에서 실제로 언제 사용해야하는지 감이 잘 오지 않는다.
스트림에 대해서 공부해야 좀 더 확실하게 사용처를 잘 습득할 것 같은 느낌..?
계속해서 더 찾아볼 예정! 그때마다 이 포스트에 업데이트해야겠다.

profile
개발국대가 되는 그 날까지. 지금은 개발 응애.

0개의 댓글