본문 바로가기

Language/Java

[Java8] 커스텀 인터페이스 및 제네릭 메소드 만들어 보자.

엄청 헷갈린다.

하나씩 해보자.

 

숫자 세가지를 받고, 그 값들을 조합해 문자열로 출력하고 싶다면 다음과 같이 작성한다.

 

인터페이스에서 추상메소드에 들어갈 타입을 미리 선언하지 않는다. 대신 제네릭을 이용하여 다음과 같이 작성한다.

interface Func<T1,T2,T3,R>{
	public R apply(T1 t1, T2 t2, T3 t3);
}

위 인터페이스는 어떠한 객체타입(R)으로 리턴을 받고, 입력할 파라미터는 각각 어떤타입(T1,T2,T3)를 입력받는다.

public class GenericExample {

	public static void main(String[] args) {
		Func<Integer,Integer,Integer,String> func = (a , b , c) -> String.valueOf((a+b+c)*2); //12
		System.out.println(func.apply(1,2,3));
	}
}

작성한 인터페이스를 람다식으로 구현해냈다. 이때, Func에 들어갈 리턴값과 파라미터를 선언해주어야 한다.

이 때 다음과 같이 메소드를 만들면 람다식 또한 파라미터로 받을 수 있다.

public class GenericExample {
	public static void main(String[] args) {
		println(2,3,4,(a,b,c) -> String.valueOf(a+b+c));
	}
	public static <T1,T2,T3> void println(T1 t1, T2 t2, T3 t3, Func<T1, T2, T3, R> func) {
		Syetem.out.println(func.apply(t1,t2,t3)); // 9
	}
}

interface Func<T1,T2,T3,R>{
	public R apply(T1 t1, T2 t2, T3 t3);
}

 

여기서 메소드는 

타입 파라미터(리턴할 값과 매개변수에서 타입을 설정) || 리턴할 타입 || 변수명 || 매개변수

순이다.

 

이번에는 단지 덧셈을 하는 함수이다. 다만 문자열일 때는 리턴값이 문자로 숫자일 때는 리턴값이 숫자로 리턴된다.

public class GenericExample {
	public static void main(String[] args) {
		System.out.println(sum("2","3","4",(a,b,c) -> a+b+c)); //234
		System.out.println(sum(2,3,4,(a,b,c) -> a+b+c)); //9
	}
	public static <T1,T2,T3,R> R sum(T1 t1, T2 t2, T3 t3, Func<T1, T2, T3, R> func) {
		return func.apply(t1,t2,t3);
	}
}

interface Func<T1,T2,T3,R>{
	public R apply(T1 t1, T2 t2, T3 t3);
}

 

'Language > Java' 카테고리의 다른 글

[Intellij] 라이브러리 설치하기  (0) 2019.05.13
Stream Lombok 연습 예제  (0) 2019.04.17
[Java8]Functional Interface  (0) 2019.04.14
[Java8] Strategy Pattern, FP, 1급 객체  (0) 2019.04.14
[Java]Collection 객체 응용(2)  (0) 2019.04.14