하효닝
log(hahyun ^ B)
하효닝
전체 방문자
오늘
어제
  • 분류 전체보기 (140)
    • Diary (0)
    • Web (7)
    • Frontend (8)
    • Python (44)
      • Python (1)
      • Algorithm (13)
      • Coding Test (30)
    • Django (3)
      • Django (2)
      • Django Rest (1)
    • Java (14)
      • Java (10)
      • Java Tuning (4)
    • Spring (34)
      • Spring (7)
      • Spring MVC (5)
      • DB 접근기술 (1)
      • JPA (10)
      • Spring Security (3)
      • Rest API (8)
    • Computer Science (26)
      • Operating System (8)
      • Linux (2)
      • Network (2)
      • Database (9)
      • SQL Tuning (5)
    • AWS (2)
    • Git (0)
    • etc (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
하효닝

log(hahyun ^ B)

Java/Java

람다 표현식

2022. 3. 28. 18:56

람다 표현식

  • 람다식은 메서드를 하나의 식으로 표현한 것으로, 람다식으로 메서드의 역할을 대신할 수 있다.
  • 또한 람다식은 메서드의 매개변수로 전달되거나 메서드의 결과로 반환될 수도 있으므로, 메서드를 변수처럼 다루는 것이 가능하다.
(x, y) -> x < y ? x : y;

 

작성 규칙

(매개변수 목록) -> {함수 몸체}
  1. 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략할 수 있다.
  2. 매개변수가 하나인 경우에는 ()를 생략할 수 있다.
  3. 함수의 몸체가 하나의 명령문으로 이루어진 경우에는 {}를 생략할 수 있다. (세미콜론 X)
  4. 함수의 몸체가 하나의 return 문으로 이루어진 경우에는 {}를 생략할 수 없다.
  5. return 문 대신 표현식을 사용할 수 있으며, 이때 반환값은 표현식의 결과값이 된다. (세미콜론 X)
  6. 람다식 내에서 참조하는 지역변수는 final이 붙지 않았어도 상수로 간주된다.

 

 

함수형 인터페이스

  • 함다식을 하나의 변수에 대입할 때 사용하는 참조변수 타입을 말하며, 람다식과 인터페이스의 메서드가 1:1로 연결된다.
  • 따라서 함수형 인터페이스에는 오직 하나의 추상 메서드만 가지며, java.util.function 패키지에 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 정의해 놓았다.

 

선언과 사용

  • @FunctionalInterface 어노테이션을 인터페이스 선언 앞에 붙이면, 컴파일러는 해당 인터페이스를 함수형 인터페이스로 인식한다.
  • 컴파일러는 명시된 함수형 인터페이스에 두 개 이상의 추상 메서드가 선언되면 오류를 발생시킨다.
@FunctionalInterface
interface Calc { // 함수형 인터페이스의 선언
    public int min(int x, int y);
}

public class Lambda02 {
	public static void main(String[] args){
        Calc minNum = (x, y) -> x < y ? x : y; // 추상 메소드의 구현
        System.out.println(minNum.min(3, 4));  // 함수형 인터페이스의 사용
    }
}

 

메서드 참조

  • 람다식이 단 하나의 메서드만 호출하는 경우 메서드 참조라는 방법으로 람다식을 간단하게 처리할 수 있다.
  • 메서드 참조를 사용하면 불필요한 매개변수를 제거하고 다음과 같이 :: 기호를 사용하여 표현할 수 있다.
클래스이름::메서드이름
또는 
참조변수::메서드이름
DoubleUnaryOperator oper;

oper = (n) -> Math.abs(n); // 람다 표현식

oper = Math::abs; // 메소드 참조

 

생성자 참조

  • 생성자를 호출하는 람다식도 메서드 참조로 변환할 수 있으며, 배열을 생성할 때에도 생성자 참조를 사용할 수 있다.
Supplier<MyClass> s = MyClass::new;

// 배열 생성
Function<Integer, int[]> f = int[]::new;

'Java > Java' 카테고리의 다른 글

Optional 클래스  (0) 2022.03.28
스트림 (Stream)  (0) 2022.03.28
Enum 클래스  (0) 2022.03.28
Arrays, Collections  (0) 2022.03.28
Comparable과 Comparator  (0) 2022.03.28
    'Java/Java' 카테고리의 다른 글
    • Optional 클래스
    • 스트림 (Stream)
    • Enum 클래스
    • Arrays, Collections
    하효닝
    하효닝

    티스토리툴바