끄적끄적 코딩
Published 2023. 2. 1. 02:28
[Java] 람다(Ramda) Java

람다 (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

검색 태그