JAVA

여섯번 째, 람다란?

seung_ho_choi.s 2022. 11. 23. 00:14
728x90

개요: 필자가 람다와 스트림을 공부하면서 정리하기 위해 쓴 게시물이다.  참고로 구글링을 많이 참고했다. 

 

람다식 

 

정의 및 특징

- 클래스를 생성하지 않고 함수의 호출만으로 기능을 수행한다. 

-  함수를 하나식으로 표현한 것이다. 

- 메소드의 이름이 필요 없기 때문에 익명함수의 한종류라고 볼 수 있다. 

- 메소드 이름은 왜 없을까? : 함수형 인터페이스의 인스턴스를 생성하여 함수를 변수처럼 선언하기 때문이다. 

- 람다식 내에서 사용되는 지역변수는 final 붙지 않아도 상수로 간주 된다. 

- 람다식으로 선언된 변수명은 다른 변수명과 중복되지 않는다. 

 

EX) (매개변수) -> {실행문}

(x, y) -> (x >= y) ? x : y;

사용이유 

- 불필요한 코드를 줄여주기 위함이다.

- 가독성을 높이기 위함이다. 

 

장점

- 코드를 간결하게 만들 수 있다.

- 개발자의 의도가 명확해 가독성이 높아진다. 

- 함수를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아진다. 

- 다중cpu를 활용하는 형태로 구현되어 병렬 프로그래밍에 유리하다. 

 

단점

- 디버깅이 어렵다.

- 람다를 통해 만들어진 무명함수는 재사용이 불가능하다. 

- 비슷한 함수가 중복 생성되어 코드가 지저분해질 수 있다. 

- 재귀로 만들경우에 부적합하다. 

 

함수형인터페이스 

- 람다식을 선언하기 위한 인터페이스이다.

- 익명함수와 매개 변수만으로 구현되므로 단 하나의 메서드만을 가져야 한다.

- @Functionallnterface -> 함수형 인터페이스라는 의미이다. 

 

다음은 예시문이다. 

package lambda;

@FunctionalInterface
public interface MyNumber {
    int getMaxNumber(int num1, int num2);

}
package lambda;

public class TestMyNumber {
    public static void main(String[] args) {

        MyNumber maxNum = (x, y) -> ((x >= y) ? x : y);
        System.out.println(maxNum.getMaxNumber(10, 5));

    }

}

 

 

느낀점: 람다라는 개념을 배웠는데 역시 어렵다.... 그치만 언젠가는 익숙해질거다. 이 친구는 뭔가 많이 쓸거 같다. 그러니 잘 이해해 보도록 하자. 

void 인터페이스는 한쪽으로 sout 해주고 반환값있는 인터페이스는 나중에 sout 해주자 

 

728x90