-
[JAVA] 람다식과 함수형 인터페이스JAVA 2018. 11. 11. 23:00
람다식은 익명클래스의 객체와 동등하다.
1타입 변수 = (int a, int b) -> a>b?a:b;cs 여기서 람다식의 참조변수의 타입은 뭘로해야할까?
참조형 이니까 클래스 or 인터페이스로 타입을 정 할 수 있을 것이다.
여기서는 함수형 인터페이스로 사용 하였다
123456789package test_java;@FunctionalInterfacepublic interface Member{public int getMemberAge(int age);}cs @FunctionalInterface를 붙이면 컴파일러가 함수형 인터페이스를 올바르게 정의하였는지 확인해 줌으로 꼭 붙이는게 좋다.
주의사항으로는 함수형 인터페이스에는 오직 1개의 추상메소드만 있어야 한다는 제약이 있다....
하지만 static 메서드랑 defaut메서드의 개수에는 제약이 없다1234567891011121314151617181920package test_java;import java.io.IOException;public class Main{public static void main(String[] args) throws IOException{Member memberAge = (int age)->{return age;};int age = memberAge.getMemberAge(3);System.out.println(age); // 3}}//CLASS ENDcs 이 처럼 Member인터페이스를 구현한 익명객체를 람다식으로 대체 가능한 이유는
람다식은 실제로 익명객체이고,
Member인터페이스를 구현한 익명객체의 메서드 getMemberAge와 람다식의 매개변수의 타입,개수,반환값이 같기 때문이다.
기존에 인터페이스의 메서드를 구현하는 방법을 보자
1234567891011121314151617181920212223242526package test_java;import java.io.IOException;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;public class Main{public static void main(String[] args) throws IOException{List<String> list = Arrays.asList("a", "b","c","d");Collections.sort(list, new Comparator<String>(){public int compare(String a, String b){return b.compareTo(a);}});System.out.println(list); // d c b a}}//CLASS ENDcs 람다식으로 표현
1234567891011121314151617181920package test_java;import java.io.IOException;import java.util.Arrays;import java.util.Collections;import java.util.List;public class Main{public static void main(String[] args) throws IOException{List<String> list = Arrays.asList("a", "b","c","d");Collections.sort(list, (a, b)->b.compareTo(a));System.out.println(list); // d c b a}}//CLASS ENDcs 훨씬 간결해지는 것을 볼 수 있다.
람다식을 매개변수로 던지는 방법이다
123456789package test_java;@FunctionalInterfacepublic interface Member{public void showMessage();}cs 1234567891011121314151617181920package test_java;import java.io.IOException;public class Main{public static void main(String[] args) throws IOException{getMessage(()->{System.out.println("안녕하세요!!");});}public static void getMessage(Member message){message.showMessage(); // 안녕하세요 출력}}//CLASS ENDcs 'JAVA' 카테고리의 다른 글
[JAVA] JSON 다루기 정리 (JACKSON - ObjectMapper) (0) 2018.11.25 [JAVA] 함수형 인터페이스 Predicate (0) 2018.11.12 [JAVA] 람다식이란? 그리고 사용법! (0) 2018.11.11 [JAVA] LocalDate, LocalDateTime 사용법 (0) 2018.11.05 [JAVA] final 멤버 변수는 상수가 아니다 (0) 2018.10.25