JAVA 8 API김윤섭
• Lambda(ƛ)�표현식�
• 함수형�인터페이스�
• stream(�)
• Lambda(ƛ)�표현식
• 함수�정의,�함수�적용,�귀납적�함수를�추상화한�형식�체계�
> ����������������������������������이와�같은�함수를
LAMBDA(ƛ)�표현식
링크 : closure와 currying
• 함수�정의,�함수�적용,�귀납적�함수를�추상화한�형식�체계�
> ����������������������������������이와�같은�함수를�
> ����������������������������������이렇게�축약할�수�있습니다.��(�lambda�표현식�)
LAMBDA(ƛ)�표현식
링크 : closure와 currying
• 함수�정의,�함수�적용,�귀납적�함수를�추상화한�형식�체계�
> ����������������������������������이와�같은�함수를�
> ����������������������������������이렇게�축약할�수�있습니다.��(�lambda�표현식�)�
> ����������������������������������또한,�이렇게도�가능합니다.��(�currying�방식)�
• 프로그래밍에서�->�익명�메소드
LAMBDA(ƛ)�표현식
링크 : closure와 currying
LAMBDA(ƛ)�표현식�-�문법
• 기본문법�
> (�매개변수�)�->�{�실행시킬�구문�}�
• 대상�메소드를�자동으로�찾고,�람다식만�적용
LAMBDA(ƛ)�표현식�-�문법
• 응용문법�
LAMBDA(ƛ)�표현식�-�하급�예제
• 단순한�for문�비교�
• lambda식�
> stream()을�사용하여�0~10미만의�수를�포함한�stream을�생성�
> forEach�(i�->�{�…�}�문법�사용�)�
> 매개변수�i��
LAMBDA(ƛ)�표현식�-�중급�예제
• 장점�
>코드의�수�감소�
>메소드로�행동방식을�전달�
>추상화로�개발자의�의도를�명확하게�하도록�도움�
• 단점�
>람다식을�실행할때에는�인터페이스에�선언된�메소드를�호출하여야�한다.�
> 재귀�람다식의�호출이�까다롭다.�
> 클로저가�지원되지�않는다.
LAMBDA(ƛ)�표현식�-�장/단점
• 함수형�인터페이스�(Functional�Interface)�
> �개념�소개�
> @FunctionalInterface�적용�유무�
> 추상�메소드가�여러개일때�
> default�메소드
함수형�인터페이스
• 추상메소드가�1개�뿐인�인터페이스를�함수형�인터페이스라�합니다.�
• @FunctionalInterface�
>함수형�인터페이스임을�명시�
> 추상메소드가�두개�이상이라면�컴파일�오류를�발생�
> 없어도�함수형�인터페이스로서�사용�가능(�=>�기존�인터페이스도�람다식�사용�가능�)
함수형�인터페이스�-�Annotation�비교
람다식 사용불가
함수형�인터페이스�-�메소드�추가시
함수형�인터페이스�-�예외�메소드
• 구현이�되어있는�default,�static�메소드는�추가로�더�있어도�무방�
• default�메소드�
> JAVA�8�이�되면서�생긴�인터페이스의�메소드�형태�
> Default�methods�are�defined�
with�the�default�modifier�=>�default�메소드는�기본적으로�사용될�형태로�정의�된다.
함수형�인터페이스�-�기타
• http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html�=>�람다표현식을�타겟으로�한�공식제공�인터페이스�
• default�메소드�탄생으로�인한�다중�상속의�모호성이�대두됨
code : https://github.com/yoonsubKim/java-lambda
REFERENCE