✍️ 함수형 인터페이스
함수형 인터페이스란?
추상 메서드를 딱 하나만 가지고 있는 인터페이스 혹은 @Functionalinterface 어노테이션을 가지고 있는 인터페이스
public interface RunSomething {
abstract void doIt(); // abstract 키워드는 빼도 됨
}
참고로, Java8부턴 인터페이스임에도 불구하고 static 메서드와 default 메서드를 추가할 수 있다.
중요한 점은 static 메서드와 default 메서드가 있더라도 추상 메서드가 하나만 존재하면 함수형 인터페이스이다.
public interface RunSomething {
abstract void doIt();
//public 생략가능
public static void printStatic() {
System.out.println("static");
}
//public 생략가능
public default void printDefault() {
System.out.println("default");
}
}
public class Test {
public static void main(String[] args) {
// Java 8 이전의 방식 ( 익명 구현 객체 )
RunSomething rs = new RunSomething() {
@Override
public void doIt() {
System.out.println("hello world!");
}
};
rs.doIt();
rs.printDefault();
RunSomething.printStatic();
}
}
//hello world!
//default
//static
🍊 람다 표현식
Java8 이전에 인터페이스를 구현하는 방법은 구현 클래스를 통한 방법과 익명 구현 객체를 통한 구현이 대표적이었다.
익명 구현 객체 예시
public class Test {
public static void main(String[] args) {
// Java 8 이전의 방식 ( 익명 구현 객체 )
RunSomething rs = new RunSomething() {
@Override
public void doIt() {
System.out.println("hello world!");
}
};
rs.doIt();
}
}
Java8부턴 추상 메서드를 하나만 가지고 있는 함수형 인터페이스를 람다 표현식으로 줄여서 작성할 수 있다.
위 코드와 아래 코드는 모두 동일한 코드로, 람다 표현식을 사용하면 불필요한 코드를 줄이고 코드의 가독성을 높이는 장점을 가지고 있다.
package functionalInterface;
public class Test {
public static void main(String[] args) {
//람다 표현식
RunSomething rs = () -> System.err.println("hello world!");
rs.doIt();
}
}
Java에서 람다 표현식은 함수형 인터페이스를 인라인으로 구현한 특수한 형태의 객체이기에 이를 레퍼런스에 할당도 가능하고, 메서드의 파라미터로 전달할 수 있고 메서드의 반환값으로 넘길 수 있다.
//람다 표현식
RunSomething rs = () -> System.err.println("hello world!");
본 내용은 백기선님의 자바8 강의 내용입니다.
'Java > Java 8' 카테고리의 다른 글
[Java8] Chapter 3-1. Stream API (1) (0) | 2022.02.18 |
---|---|
[Java8] Chapter 2-1. 인터페이스 default, static 메서드 (0) | 2022.02.17 |
[Java8] Chapter 1-4. 메서드 레퍼런스 (0) | 2022.02.16 |
[Java8] Chapter 1-3. 람다 표현식과 변수 캡쳐 (0) | 2022.02.08 |
[Java8] Chapter 1-2. Java에서 제공하는 함수형 인터페이스 (0) | 2022.02.07 |