람다 (Ramda)
람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어
함수를 보다 단순하게 표현하는 방법
특징
람다 대수는 이름을 가질 필요가 없음 - 익명 함수 (Anonymous functions)
두 개 이상의 입력이 있는 함수는 최종적으로 1개의 입력만 받는 람다 대수로 단순화 가능 - 커링 (Curring)
장점
1. 코드의 간결성 - 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현 가능
2. 지연연산 수행 - 람다는 지연연상을 수행 함으로써 불필요한 연산을 최소화 할 수 있음
3. 병렬처리 가능 - 멀티쓰레디를 활용하여 병렬처리를 사용 할 수 있음
단점
1. 람다식의 호출이 까다롭습니다
2. 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어짐
3. 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수 있음
@FunctionalInterface
함수 인터페이스는 함수가 한개만 존재
함수인터페이스를 사용하면 람다식 사용가능
@FunctionalInterface
interface MyInfo{ int f1(); }
// …
m1( () → System.out.println(0) ); //람다
한줄의 명령문만 있을경우 {}, ; 생략
m1( () → System.out.println(0));
리턴이 있을 경우 return 생략
m1( (a, b) → a+b);
파라미터가 한개라면 괄호 생략 가능 int m1(MyInfo info) {}
m1( a → a );
// 람다식 미사용
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return -(o1-o2);
}
});
// 람다식 사용
Collections.sort(list, (o1, o2) -> -(o1-o2));
// 람다식 미사용
Thread trd = new Thread(new Runnable() {
public void run() {
System.out.println();
}
});
// 람다식 사용
Thread trd = new Thread(() -> System.out.println());
trd.start();
new Thread(() -> System.out.println()).start();
*collection에서의 Stream은 하나씩 확인하면서 작업을 수행 가능 인자가 하나 → 람다함수로 사용 가능
더블 클론 ( :: )
사용하는 람다식이 기존에 있는 인스턴스의 메소드와 동일하면 메소드 레퍼런스로 대체 가능
스태틱 메소드, 인스턴스의 메소드의 메소드 레퍼런스로 사용가능
Stream<Integer> stream = list.stream();
stream.forEach( a -> System.out.println(a));
stream.forEach(System.out::println);
stream.map(Math::abs);
'Java' 카테고리의 다른 글
[Java] 파싱, XML, SAX (1) | 2023.02.01 |
---|---|
[Java] String 메서드 (0) | 2023.02.01 |
[Java] I/O와 Stream (0) | 2023.02.01 |
[Java] List, Set, Map, Sort (0) | 2023.02.01 |
[Java] try~catch, throws , 사용자 정의 예외 (0) | 2023.01.31 |