새소식

반응형
Language/Java

[Java] 람다식 Function에 대하여 알아보자!

  • -
반응형

2020-12-28


Function 인터페이스는 apply 메서드를 가지고 있으면 매개 값과 리턴 값 모두를 가지고 있다. apply 메서드는 매개 값을 리턴 값으로 맵핑하는 역할을 하게 된다. 그러면 구체적인 사용법을 알아보도록 하자.


아래는 매개값으로 사용할 human 클래스이다.

package LambdaFunction;

public class human {
	private String name;
	private int age;
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

필드로는 이름과 나이를 주었으며, 각각 Getter와 Setter로 데이터에 접근할 수 있도록 제한을 두었다.

이제 실행클래스로 이동해 Function 인터페이스를 사용해보자.


package LambdaFunction;

import java.util.function.Function;

public class main {

	public static void main(String[] args) {
		
		human hu = new human();
		hu.setName("king");
		hu.setAge(100);
		
		
		Function<human, String> hu1 = t ->{
			return t.getName();
		};
		System.out.println(hu1.apply(hu));
		
		
		Function<human, Integer> hu2 = t ->{
			return t.getAge();
		};
		System.out.println(hu2.apply(hu));
		
		
	}

}

 

사실 사용법에 크게 어려운 것은 없다. Function 인터페이스의 경우 [Function <매개 타입, 리턴 타입> 변수명 =... ] 형식으로 선언해준 후 뒤에 리턴하고자 하는 값을 람다식으로 작성해주면 간단히 구현할 수 있다.

 

가장 간단하게 구현하고자, 첫번째 Function 인터페이스의 hu1의 람다식은 t라는 human 변수를 선언해준 후 중괄호 안에 Function 인터페이스의 메서드인 apply의 리턴하고자 하는 값을 구현해주면 된다. 여기서 중요한 것은 초기 Function 인터페이스 선언 시, 리턴 타입을 String으로 해주었기 때문에, 리턴 값도 String으로 해주어야 한다. human의 name은 String 타입이기 때문에 실행 시 컴파일 오류가 발생하지 않는다.

 

마찬가지로 Function hu2 역시 hu1와 같은 구조로 작성했으며, human의 age는 int 타입이기 때문에 Function 인터페이스 선언시 리턴 타입을 Integer로 코드를 작성했으며, 나머지는 크게 다른 점은 없다.

 

실행 결과 아래와 같이 Setter를 통해 주입했던 값이 정상적으로 출력되는 것을 확인할 수 있다.

한가지 추가적으로 Function 인터페이스의 경우 int / double / Long 등 의 타입으로 리턴타입을 한정 지을 수 있다. 예로 아래와 같이 ToIntFuntion의 경우 이미 리턴타입은 int로 정해져 있기 때문에 매개타입인 human만 넣어주어도, 위의 hu2와 똑같은 결과를 얻을 수 있다. 

		ToIntFunction<human> hu3 = t ->{
			return t.getAge();
		};
		System.out.println(hu3.applyAsInt(hu));

반응형
Contents

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

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