자바를 오랜만에 하니깐 개짜증납니다.
맥으로 인텔리제이를 하니깐 더 짜증납니다.
단축키의 노예인데 윈도우로만 작업했다가 간만에 맥으로 하려니 너무 짜증납니다람쥐
항상 자바스크립트를 이용하면서 함수형 프로그래밍에 익숙해지고 있는 와중에
다시 자바를 하려니깐 기억이 잘 안나서 기초적인 부분을 다시 학습하고 있습니다.
그 중에 하나인 람다 표현식을 간단하게 알아보려고 합니다.
아래는 뻔하디 뻔한 인터페이스와 추상 메서드입니다.
이녀석을 이용한 익명 클래스를 한번 만들어볼까 합니다.
public interface FunctionalTest {
void dodo();
}
보통 아래와 같은 형태를 사용하고는 합니다.
하지만 자바8의 기능인 람다를 사용해서 간결하게 표현해보도록 하겠습니다.
import java.util.NoSuchElementException;
public class Foo {
public static void main(String[] args) {
FunctionalTest functionalTest = new FunctionalTest() {
@Override
public void dodo() {
System.out.println("test");
}
};
}
}
줄어져라, 얍!
짜란, 아래와 같이 만들어졌습니다...
어때요? 참 쉽죠잉?
import java.util.NoSuchElementException;
public class Foo {
public static void main(String[] args) {
FunctionalTest functionalTest = () -> System.out.println("test");
}
}
만약 여러줄을 사용하려면?
{} 괄호를 이용하면 됩니다. 훗
import java.util.NoSuchElementException;
public class Foo {
public static void main(String[] args) {
FunctionalTest functionalTest = () -> {
System.out.println("test01");
System.out.println("test02");
}
}
}
자바를 다시 상기시키기 위한 람다표현식이었습니다.
아래는 함수형 인터페이스의 람다식 표현을 테스트한 것들.
// ! 두번째 람다 표현식
Function<Integer, Integer> plus01 = (num) -> num + 10;
System.out.println("plus01 = " + plus01.apply(1));
// 11
Function<Integer, Integer> mul01 = (num) -> num * 2;
System.out.println("mul01.apply(2) = " + mul01.apply(2));
// 4
// * 고차 함수
Function<Integer, Integer> mulAndSum = plus01.compose(mul01);
System.out.println("mulAndSum = " + mulAndSum.apply(2));
// * mul01을 먼저 실행 후 입력한 값을 plus01을 해준 후 return 한다.
// 14
Function<Integer, Integer> sumAndMul = plus01.andThen(mul01);
System.out.println("sumAndMul.apply(2) = " + sumAndMul.apply(2));
// * compose와는 반대
Plus10 plus10 = new Plus10();
System.out.println("plus10 = " + plus10.apply(1));
// * void accept
Consumer<Integer> prn = (i) -> System.out.println("메롱메롱 : " + i);
prn.accept(10);
// * return 타입 값을 그냥 갖고옴
Supplier<Integer> getSup = () -> 10;
System.out.println("getSup = " + getSup.get());
Predicate<String> startWith = (s) -> s.startsWith("치킨먹고싶다");
System.out.println("startWith = " + startWith.test("치킨먹고싶..."));