자바에서 람다(Lambda)는 기존의 클래스에 메소드를 만들고
객체화 한 뒤에 끌어쓰는 방식이 아니라
그때 바로 만들어서 사용하는 식인데
위 예제를 보면 인터페이스를 통해
메소드를 만들 수 있도록 만들어 두고
인터페이스명 메소드명 = (파라미터) -> {수행할 코드;};
를 람다 메소드를 만들고 사용하는 것이 보이는데
딱 보면 알겠지만 저거 쓰느니
그냥 일반 메소드 끌어다 쓰는 게 나아 보일거다
람다의 핵심은
(파라미터) -> {수행할 코드}
를 통해 메소드를 정의하지 않고도
메소드처럼 사용할 수 있다는 것인데
메소드와 같은 기능이지만
정의하지 않고도 사용하는 것이
람다의 핵심이 되겠다
다음 예제를 보면
list와 map에 값을 넣어놓고
forEach를 이용해 코드를 수행하는 형태인데
파라미터, 코드가 하나일 경우에는
파라미터 -> 코드
이렇게 사용해도 되지만
파라미터나 코드가 늘어날수록
(파라미터1, 파라미터2) -> {코드..}
이런 식으로 사용하게 된다
Lambda는 아무 곳에서나 사용이 불가능하기 때문에
대부분은 스트림(Stream), forEach 등을 사용할 때
람다를 주로 사용하게 되는데
이때는 한번만 쓰면 되는 경우가 대부분이라
한번 쓰자고 메소드를 만드는 것보다
람다 함수를 한번 쓰고 버리는 형태가 훨씬 편하기 때문에
이런 경우에 람다식을 주로 사용하게 된다
정리해보자면
람다식을 통해 메소드를 정의하지 않고
메소드와 동일한 기능을 하게 만들 수 있고
파라미터 -> 코드
이런 식으로 동작하고
대부분은 자바 스트림(Stream) 혹은 forEach 사용 시
같이 사용하게 된다
마지막으로 예제에 사용한 코드는 아래와 같다
public class Test2 {
// 람다 메소드 사용 시
interface methodIf {
public String call(String val); // 반환 안하려고 void
}
// 일반 메소드 사용 시
public String call(String val) {
return val;
}
public static void main(String[] args) {
// LAMBDA
// (파라미터명) -> { 수행할 코드 }
methodIf Lambda = (val) -> { return val; }; // 메소드 내용 정의
//System.out.println(Lambda.call("람다를 이용한 메소드 호출")); // 람다 메소드 호출
Test2 t2 = new Test2(); // 객체화
//System.out.println(t2.call("일반 메소드 호출")); // 일반 메소드 호출
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.forEach(val -> System.out.println(val)); // 람다를 이용한 List 출력
Map<String, Integer> map = new HashMap<>();
map.put("zebra", 30);
map.put("dog", 10);
map.put("bird", 20);
// 람다를 이용한 map 출력
map.forEach((name, number) ->
{
if(number > 20) {
System.out.println(name + " is 20 over!");
} else {
System.out.println(name + " number : " + number);
}
});
}
}
'Language > Java' 카테고리의 다른 글
자바 int 배열 Integer 배열로 변경방법 (0) | 2020.12.07 |
---|---|
자바 스트림(Stream) 예제부터 사용법까지 정리 (5) | 2020.12.06 |
자바 Pattern을 이용해 오라클 IN 처럼 사용방법 (0) | 2020.12.04 |
자바 Timestamp를 이용한 현재 시간 구하는 방법 (0) | 2020.11.19 |
자바 JDK JRE 차이 정리 (0) | 2020.11.10 |
댓글