개발자의 공부방/자바

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

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

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.