자바 람다/스트림 활용
1.람다(lambda)와 익명 함수
람다는 자바8부터 사용 가능하고 익명함수를 사용한다.
익명함수란 무엇일까?
전통적으로 함수 또는 메소드를 만들 때 메소드를 선언하고 선언한 메소드를 호출하는 2단계를 거치게 된다.
//선언
public String makeCurrentStr(int amt, String currencyType){
return amt+currencyType;
}
//...생략...
//호출
String goodsAmt = makeCurrentStr(10000, "WON");
만약 한번만 사용할 메소드를 위와같이 처리해야한다면 굉장히 귀찮은 과정이다. 왜냐하면 메소드를 구현하고 사용할 때 아래 세 단계를 거친다.
- 메소드명을 고민한다.
- 메소드를 선언/구현한다.
- 메소드를 호출한다.
1번 과정은 개발자에게 상당한 스트레스를 준다. 인자와 리턴값의 자료형을 확인하여 사용해야하는 부분도 성가시다.
그리고 유지보수 할 때 해당 메소드 내용을 보기위해 호출 부분을 확인하고, 다시 메소드 선언 부분 소스를 찾아 어떤 동작을 하는지 확인한다.
익명함수란 별도의 메소드 선언없이 하나의 소스 블록이라고 이해하면 되겠다. 위 문제를 익명함수를 사용하여 해결할 수 있다.
람다는 이러한 익명함수를 기본으로 사용하여, 간결하고 보기 좋은 소스를 작성할 수 있게 해준다.
아래소스를 보면 한줄로 해결이 가능하고 선언부를 찾을 것도 없기 때문에 보자마자 어떤 동작을 하는지 이해할 수 있다.
//AS-IS
//선언 - 기존방식
public String makeCurrentStrAsIs(int amt, String currencyType){
return amt+currencyType;
}
//...생략...
//호출
String goodsAmt = makeCurrentStrAsIs(10000, "WON");
//TO-BE 람다식 사용
//선언부 필요없음
//...생략...
//호출
String goodsAmt = (int amt, String currencyType) -> return amt+currencyType;
이외에도 스트림과 사용 시 병렬프로그램에 용이하다. 여러개의 쓰레드를 활용하여 수행시간을 단축시킬 수 있다.