[Java8] Chapter 1-1. 함수형 인터페이스와 람다 표현식

 

✍️ 함수형 인터페이스

함수형 인터페이스란?

추상 메서드를 딱 하나만 가지고 있는 인터페이스 혹은 @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 8 - 인프런 | 강의

자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이

www.inflearn.com