함수형 인터페이스

2022. 4. 11. 13:46·자바/람다식

1. 함수형 인터페이스

- 람다식을 다루기 위한 인터페이스를 함수형 인터페이스라고 한다.

 

 

- 일단 먼저 람다식으로 정의된 익명 객체의 메서드를 호출하는 방법의 순서를 알아보자.

 

1. 첫 번째, 메서드를 정의한 클래스 또는 인터페이스가 무엇인지 확인한다.

( a라는 인터페이스에 max 추상메서드로 정의되어 있다. )

 

 

2. 두 번째, 해당 클래스 또는 인터페이스의 이름을 사용하여 참조변수를 생성한다.

 

 

3. 세 번째, 마지막으로 참조변수에 람다식을 써 준다.

 

 

( 만약 익명클래스의 객체로 작성하면 아래와 같이 생성된다. )

 

 

( 또한 함수형 인터페이스에는 오직 하나의 추상 메서드만 정의되어 있어야 한다는 제약이 있다. )

( 그렇게 해야 1:1로 매칭될 수 있기 때문이다. )

 

( 반면 static과 default을 사용한 메서드의 개수는 제약이 없다. )

 

 

- 추가적으로 함수형 인터페이스 위에 '@FunctionalInterface'를 붙이면 컴파일러가 올바르게 작성되었는지

확인해주므로, 꼭 붙여주자.

 

 

 

1-1. 함수형 인터페이스를 이해하기 위한 예제(1)

: Collections.sort()에서 compare() 구현을 람다식으로 표현한 예제이다.

 

( list1은 원래 우리가 람다식을 배우기 전에 사용했지만, list2부터는 람다식을 이용해서

간단하게 표현할 수 있다. )

 

 

 

 

1-2. 함수형 인터페이스를 이해하기 위한 예제(2)

: 람다식을 매개변수, 반환타입으로 쓰는 예제이다.

 

( 우리가 객체를 주고받을 수 있듯이 람다식 또한 가능하다. )

 

 

 

 

2. 함수형 인터페이스의 람다식의 타입과 형변환

- 람다식은 익명 객체이고 익명 객체는 타입이 없다.

( 정확히 타입은 있지만, 컴파일러가 임의로 이름을 정하기 때문에 알 수 없는 것이다. )

 

- 또한 람다식은 오직 함수형 인터페이스로만 형변환이 가능하다.

 

 

- 아래의 코드를 보자.

 

 

 

 

 

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

- 람다식 또한 익명 객체이므로, 외부에 선언된 변수를 접근 할 수 있다. 

 

- 아래의 코드를 보고 이해하자.

( 람다식 내에서 참조하는 지역변수는 final이 붙지 않았어도 상수로 간주된다. )

( 그러므러, i와 val은 람다식 내에서 또는 다른 어느 곳에서도 값을 변경하는 것을 허용하지 않는다. )

 

( 그러나, Outer 클래스와 Inner 클래스 내에 있는 인스턴스 변수는 상수로 간주하지 않는다. )

'자바 > 람다식' 카테고리의 다른 글

메서드 참조  (0) 2022.04.12
Function의 합성과 Predicate의 결합  (0) 2022.04.12
java.util.function 패키지  (0) 2022.04.11
람다식의 기본 개념  (0) 2022.04.11
'자바/람다식' 카테고리의 다른 글
  • 메서드 참조
  • Function의 합성과 Predicate의 결합
  • java.util.function 패키지
  • 람다식의 기본 개념
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Arrays
      제자리 정렬
      자바 개념
      안정 정렬
      유용한 클래스
      문자 기반 스트림
      InputStream
      알고스팟
      안드로이드 스튜디오
      outputstream
      중간연산
      map()
      다형성
      코드트리
      java.time 패키지
      소켓 프로그래밍
      코딩테스트
      선택 정렬
      snail
      스트림
      file
      Collections Framework
      TCP 소켓 프로그래밍
      ServerSocket
      serializable
      java.lang패키지
      람다식
      불안정 정렬
      역직렬화
      코딩트리조별과제
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    함수형 인터페이스
    상단으로

    티스토리툴바