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

wijoonwu·2022년 11월 13일
0

Java

목록 보기
21/24
post-thumbnail

함수형 인터페이스란?

예시코드 (1)

package com.example.demo;

@FunctionalInterface
public interface RunSomething {
	
	abstract void doIt();

}

함수형 인터페이스란, 위 코드와 같이 아래조건을 충족하는 인터페이스를 말한다.

  • 추상 메소드를 하나만 가지고 있는 인터페이스
  • @FunctionalInterface 어노테이션을 가진 인터페이스
  • abstract 키워드는 생략이 가능하다.
  • staticpublic 키워드도 생략 가능!

예시코드 (2)

package com.example.demo;

@FunctionalInterface
public interface RunSomething {
	
	abstract void doIt();
    
    static void printName() {
    	System.out.println("joonwu");
	}
    
    default void printAge() {
    	System.out.println("26");
    }
}

위 코드 처럼, 인터페이스임에도 불구하고 인터페이스 안에 static method를 정의할 수도 있으며, default method를 정의할 수도 있다. 인터페이스 안에 정의할 수 있는 메소드의 형태가 좀 더 다양해졌다.

💡 이렇듯 다른 형태의 메소드가 있더라도, 추상화 메소드가 1개라면 무조건 함수형 인터페이스이다.

람다 표현식

Before 람다

위에서 만든 함수형 인터페이스를 사용하기 위해서, 자바 8이전에는 일반적으로 아래와 같은 익명 내부 클래스가 필요했다.

public class Foo {
	public static void main(String[] args){
    	RunSomething runSomething = new RunSomething() {
        @Override
        public void doit() {
			System.out.println("Hello");
        }
   };
}

After 람다

public class Foo {
	public static void main(String[] args){
    	RunSomething runSomething = () -> System.out.println("Hello");   
    }
}

내부 코드가 여러 줄일 경우 아래와 같이 {}를 사용한다.

public class Foo {
	public static void main(String[] args){
    	RunSomething runSomething = () -> {
        	System.out.println("Hello");
            System.out.println("joonwu");
    	};
    }
}

람다 표현식을 사용하면 코드를 줄일 수 있고 코드 가독성이 높아진다.

Reference

2개의 댓글

comment-user-thumbnail
2022년 11월 15일

작성하신 기술 포스트 여러가지 봤는데 정말 잘 정리한거 같아요! 열심히 참고해 보겠습니다 :)

1개의 답글