람다식 (Lambda Expression)

  • 근본적으로는 동일한 용어이나 이제 이해가간다
  • 함수 = 클래스에 독립적 (일반적용어)
  • 메서드 = 클래스에 종속적 ( 객체지향개념 용어)
  • 함수(메서드를) 간단한 식(expression) 으로 표현하는 방법

-함수(메서드)

int max(int a , int b) {
    return a > b ? a : b ; 
}

-람다식,이름이없는함수(anonymous function)반환타입 이름지움

(int a , int b) -> {
    return a > b ? a : b ; 
}


# (a, b) -> a > b ? a:b

람다식 작성하기

1.메서드의 이름,반환타입제거후 -> 를 블록{} 앞에 추가함

//함수(메서드)
int max(int a , int b) { 
    return a > b ? a : b ; 
}


//람다식
(int a , int b) -> {
    return a > b ? a : b ; 
}

2.반환값이 있는경우 , 식이나 값만적고 return 문생략가능 끝에(;안붙임)

(int a , int b) -> {
    return a > b ? a : b ; 
}


(int a, int b) -> a > b ? a:b

3.매개변수의 타입이 추론가능하면 생략가능 (대부분의경우 생략가능)

(a, b) -> a > b ? a:b

람다식 주의사항

-매개변수가 하나인경우 ,괄호() 생략가능 (타입이없을때만)

(a) - > a * a  

a- > a * a // OK

(int a ) - > a * a 

int a -> a * a //애러

-블록안의 문장이 하나뿐일때, 블록{} 생략가능 ( 끝에 ; 안붙임)

(int i) -> {
    System.out.println(i);
}

(int i) - > System.out.println(i)

-단, 하나의 문장이 return문이면 블록{}생략불가

람다식은 익명객체 !

  • 익명함수가 아니라 익명개체이다
  • 익명객체인이유는 (함수형인터페이스의 추상메서드를 사용하고있는중)
  • 참조변수 (함수형인터페이스의 오버라이딩규칙도.)

함수형 인터페이스

  • 단 하난의 추상메서드만 선언된 인터페이스

Predicate 의 결합

  • and(), or(), negate()로 두 Predicate를 하나로 결합 (default)메서드

스트림 (JDK 1.8 부터 통일)

  • 데이터의 연속적인 흐름
  • 다양한 데이터 소스(컬렉션 ,배열) 를 표준화 된 방법으로 다루기위한것
  • 컬렉션 프레임워크 List , Set , Map , 배열 > stream

  • (데이터소스) > 스트림만들기 > 중간연산 0~N번 > 최종연산,스트림의요소 사용다하면끝 (결과1번) 3단계
  • 스트림은 1회용 최종연산후 닫힘 , 새로 생성자를 만들어야함 , 원본은건드리지않는다 읽기만할뿐
  • 지연된연산 ( 최종연산전까지 , 중복된연산이 적용되지않음)

스트림의 최종연산

  • reduce 스트림의 요소를 하나씩 줄여가면서 ( 리듀싱 ) 계산한다

스트림의 중간연산

  • 중간연산은 요소를 소비하지않는다

Optional

  • Null을 직접다루면 위험 , Null을 체크하려고 (if문 쓰면 지저분하니까)
  • null point exception ..
  • null > Optional 객체에 집어넣기위함

Categories:

Updated:

Leave a comment