티스토리 뷰

Java

[자바] Currying In Java 8

§무명소졸§ 2017. 12. 6. 18:18

자바8 에서 함수형 언어의 장점을 채용 하면서 함수형 언어에서 주로 사용되는 

Currying(위키피디아기법을 사용할수 있게 되었습니다. 

Currying 은 쉽게 말하면 N개 이상의 인자를 받는 함수를 조합(chaining) 해서 

재사용성을 높여주는 기법 입니다.


이하 아주 간단(유치한?)한 예제로 자바8 에서 currying 을 사용하는 코드 입니다.

(아래 코드에 이해를 돕기 위해서는 자바8 에 람다식에 대한 이해가 필요 합니다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package function;
import java.util.function.BiFunction;
import java.util.function.Function;
public class CurryJava {
    public static void main(String[] args) {
        Function<String, BiFunction<StringString, Function<StringString>>> fn
                = text -> (prefix, sufix) -> tail -> prefix + text + sufix + tail;
        //사자를 만들자
        BiFunction<StringString, Function<StringString>> 사자 = fn.apply("Lion");
        //별사자
        Function<StringString> 별사자 = 사자.apply("★ "" ★");
        //원사자
        Function<StringString> 원사자 = 사자.apply("● "" ●");
        //별사자에는 별꼬리를 달자
        String 별꼬리달린사자 = 별사자.apply(" ☆☆☆☆☆☆");
        //원사자에는 원꼬리를 달자
        String 원형꼬리달린사자 = 원사자.apply(" ○○○○○○○○");
        System.out.println(별꼬리달린사자);
        System.out.println(원형꼬리달린사자);
        //그런데 별사자한테 원꼬리를 달아주면 어떨까?
        String 품종개량사자 = 별사자.apply(" ○○○○○○○○");
        System.out.println(품종개량사자);
        /*
            OUTPUT:
             ★ Lion ★ ☆☆☆☆☆☆
            ● Lion ● ○○○○○○○○
            ★ Lion ★ ○○○○○○○○
        */
    }
}
cs


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크