한 걸음 두 걸음

자바 Java ] 람다 표현식 Ramda 본문

Language/Java

자바 Java ] 람다 표현식 Ramda

언제나 변함없이 2019. 11. 20. 18:29
반응형

람다표현식이란?

JAVA8에서 새롭게 등장한 함수형 프로그래밍 기법입니다. 이를 통해 JAVA를 보다 간결하게 작성할 수 있게 되었습니다. 람다 표현식은 함수형 인터페이스와 호환됩니다.  Interface의 형태를 빌려 함수를 변수처럼 사용할수 있는 개념입니다. 

함수형 인터페이스란?

추상 메소드 하나만 갖고 있는 인터페이스를 이르는 말합니다.

1. Comparator 인터페이스의 추상메소드

```
int compare(param1, param2);
```

Comparator인터페이스에는 데이터의 대소를 비교하는 추상메소드가 있습니다.

임의로 한 개의 클래스를 만들어보겠습니다.

class BigNum implements Comparator<Integer> {
    public int compare(int num1, int num2){
            return num1 > num2 ?  num1 : num2;
        }
}

이처럼 Comparator인터페이스를 implements한 BigNum클래스가 있다고 하면, compare함수를 재정의해주어야합니다.

int[] nums = {10, 20, 30, 40, 50};
Arrays.sort(nums , new BigNum()); //정렬할 배열과 정렬기준을 구현한 BigNum클래스 객체를 전달해줍니다.

위와 같은 클래스와 사용예시가 있는데 이에 람다 표현을 적용시켜 보겠습니다.

int[] nums = {10, 20, 30, 40, 50};
BigNum b = (int num1, int num2) -> num1 > num2 ?  num1 : num2;
Arrays.sort(nums , b); 

이처럼 함수를 메소드 매개변수처럼 전달하기 위해 사용하는 방법이 바로 람다입니다.


2. Runnable 인터페이스의 추상메소드

```
void run();
```

3. 사용자 콜백 인터페이스의 추상메소드

```
void handle(ActionEvent e);
```

이 외에도 onClickListener, Predicate,Consumer, Supplier, UnaryOperator, BinaryOperator, BiConsumer, Bifunctuin 등의 함수형 인터페이스가 다양하게 있습니다.

사용이유

사용자 인터페이스를 만들 때는 java swing컴포넌트를 사용했었으나, 이제는 javafx를 사용합니다. 이 때, 사용자의 이벤트에 반응하는 함수를 만든 것이 handle()콜백함수입니다.

공부방법

프로그래밍하다가, 줄일 수 있는 부분은 intellj 개발환경에서 알려줍니다. 람다->를 이용해서 줄일 수 있는 곳 발견할 때마다 바꿔보며 연습해보시면 됩니다.

일반표현

   TextView textview = (TextView)findViewById(R.id.textView_event_ramda);

        textview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //클릭이벤트처리
            }
        });

람다표현

  textview.setOnClickListener(v -> {
              //클릭이벤트 처리
            });
반응형