개발자의 공부방/자바

자바) 함수형 인터페이스 및 람다 표현식

쥬니준 2022. 10. 12. 17:55
728x90
반응형

 

자바를 오랜만에 하니깐 개짜증납니다.

맥으로 인텔리제이를 하니깐 더 짜증납니다.

단축키의 노예인데 윈도우로만 작업했다가 간만에 맥으로 하려니 너무 짜증납니다람쥐 

 

항상 자바스크립트를 이용하면서 함수형 프로그래밍에 익숙해지고 있는 와중에 

다시 자바를 하려니깐 기억이 잘 안나서 기초적인 부분을 다시 학습하고 있습니다.

 

그 중에 하나인 람다 표현식을 간단하게 알아보려고 합니다.

 

아래는 뻔하디 뻔한 인터페이스와 추상 메서드입니다.

이녀석을 이용한 익명 클래스를 한번 만들어볼까 합니다.

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("치킨먹고싶..."));

 

반응형