함수형 인터페이스는 추상메소드가 1개 일 경우를 함수형 인터페이스라고 합니다.
public interface Test {
void go();
}
이렇게 Test라는 인터페이스에 추상메소드가 한개이니 이 인터페이스는 함수형 인터페이스 입니다.
public interface Test {
void go();
void gogo();
}
그럼 이렇게 추상 메소드가 두개 일 경우는 함수형 인터페이스 일까요???
아닙니다.
추상메소드가 두개 이므로 이 인터페이스는 함수형 인터페이스가 아닙니다.
* 대신 추상 메소드 말고 static 메소드와 default 메소드가 있습니다. 다른 형태를 포함하지만 추상 메소드가 한개인 인터페이스는 함수형 인터페이스 입니다.
public interface Test {
void go();
static void gogo(){
}
default void gogogo(){
}
}
이 인터페이스는 다른 형태의 메소드를 여러개 가지고 있지만 추상 메소드는 한개라서 함수형 인터페이스 입니다.
@FunctionalInterface
public interface Test {
void go();
static void gogo(){
}
default void gogogo(){
}
}
- @FunctionalInterface 어노테이션을 명시해주면 함수형 인터페이스가 됩니다.
그럼 이 함수형 인터페이스의 사용방법을 알아 보겠습니다.
class Main{
public static void main(String[] args){
Test test = new Test(){
@Override
public void go(){
System.out.println("출발!");
}
};
}
}
기본적으로 인터페이스를 new를 통해 가져오고 override를 통해 명시해줍니다.
상속받아오는 방법도 있겠네요.
근데 이렇게 추상메소드가 한개인 함수형 인터페이스를 함축한 방법으로 사용하는 방법이 있습니다.
그 방법이 바로 람다 표현식입니다.
class Main{
public static void main(String[] args){
Test test = () -> System.out.println("출발");
}
}
이렇게 = 까지는 같습니다. new 타입 형식을 대신해서 () -> 형식을 사용합니다.
()에는 input 인자가 들어오게 됩니다.
출력문이 하나일 경우에 사용하는 방법이고,
출력문이 두개 이상일 경우는 다음과 같이 사용 하면 됩니다.
class Main{
public static void main(String[] args){
Test test = () -> {
System.out.println("출발");
System.out.println("출발");
};
}
}
이렇게 해준다고 함수가 실행되는 것은 아니기 때문에 함수를 실행까지 해줍니다.
class Main{
public static void main(String[] args){
Test test = () -> {
System.out.println("출발");
System.out.println("출발");
};
test.go();
}
}
//실행결과
출발
출발
간단하게 함수형 인터페이스와 람다식에 대해 알아보았습니다!
'Back-End > JAVA' 카테고리의 다른 글
자바8 - 인터페이스의 기본 메소드와 스태틱 메소드 (0) | 2021.04.08 |
---|---|
자바 indexOf() - 문자열 중 해당문자 위치 찾기 (0) | 2021.04.07 |
자바 charAt(int i) -'0' 에 대해서 문자를 정수형으로? (0) | 2021.04.05 |
== 와 equals 차이 (0) | 2020.12.21 |
Optional (0) | 2020.12.16 |