Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 알고리즘
- 운영체제
- 자바
- OS
- programmers
- Brute-force
- lambda
- kotlin
- 스프링
- baekjoon
- Spring
- 백트래킹
- backtracking
- 그래프
- DFS
- BFS
- 코틀린
- 프로젝트
- 모던자바
- LEVEL2
- Java8
- java
- DP
- back-end
- 자료구조
- 프로그래머스
- 백준
- algorithm
- 네트워크
- TDD
Archives
- Today
- Total
요깨비's LAB
[Modern Java] Chapter 3. Cumstom Functional Interface 본문
1. Functional Interface Example
public class FunctionalInterfaceExamples {
public static void main(String[] args) {
//(i1 + i2 + i3) -> 여기에서 '+'가 들어가는 순간 자동으로 Auto Unboxing이 일어나면서 primitive int가 되기 때문에 String.valueOf()로 변환
println("Area is ",12,20, (message,height,width) -> String.valueOf((message + (width * height)))); // Area is 240
println(1L,"JYS", "email.test.com",(id,name,email) -> "User info: ID=" + id + ", NAME=" + name +", EMAIL=" + email); //User info: ID=1, NAME=JYS, EMAIL=email.test.com
}
private static <T1, T2, T3> void println(T1 t1, T2 t2, T3 t3, Function3<T1, T2, T3, String> function) {
System.out.println(function.apply(t1, t2, t3));
}
}
interface Function3<T1, T2, T3, R> { // 파라미터 3개를 받아서 연산 후 R을 리턴함
R apply(T1 t1, T2 t2, T3 t3); // Abstract Method가 하나만 있으면 이름이 apply든 apply2든 상관 없다.
}
위의 코드에서 interface 부분을 보겠습니다. apply외의 다른 abstract method를 추가하려고 합니다.
interface Function3<T1, T2, T3, R> { // 파라미터 3개를 받아서 연산 후 R을 리턴함
R apply(T1 t1, T2 t2, T3 t3);
void print(int i); // Error
}
당연히 잘 돌아갈 것처럼 보이는 코드입니다. 하지만 에러가 납니다. 왜일까요?
이유는 Abstract Method가 하나만 있어야하는데 2개가 있어서 발생하는 것 입니다. 이러한 에러를 컴파일 타임에서
찾기 위해서 우리는 "이 인터페이스는 Abstract Method를 하나만 있어야 하는 것을 보증한다"는 의미의 표식이 필요합니다.
그것이 바로 @FunctionalInterface입니다.
@FunctionalInterface
interface Function3<T1, T2, T3, R> { // 파라미터 3개를 받아서 연산 후 R을 리턴함
R apply(T1 t1, T2 t2, T3 t3); // Abstract Method가 하나만 있으면 이름이 apply든 apply2든 상관 없다.
// void print(int i);
}
'Java > 모던 자바' 카테고리의 다른 글
[Modern Java] Chapter 5. Stream API - 시작하기 전에 (0) | 2020.01.20 |
---|---|
[Modern Java] Chapter 2. Function, The Transformer (0) | 2019.12.23 |
[Modern Java] Chapter 1. 왜 자바 8이 필요한 것일까? (0) | 2019.12.19 |
Comments