package com.example.demo;
@FunctionalInterface
public interface RunSomething {
abstract void doIt();
}
함수형 인터페이스란, 위 코드와 같이 아래조건을 충족하는 인터페이스를 말한다.
abstract
키워드는 생략이 가능하다.static
은public
키워드도 생략 가능!
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개라면 무조건 함수형 인터페이스이다.
위에서 만든 함수형 인터페이스를 사용하기 위해서, 자바 8이전에는 일반적으로 아래와 같은 익명 내부 클래스가 필요했다.
public class Foo {
public static void main(String[] args){
RunSomething runSomething = new RunSomething() {
@Override
public void doit() {
System.out.println("Hello");
}
};
}
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");
};
}
}
람다 표현식을 사용하면 코드를 줄일 수 있고 코드 가독성이 높아진다.
작성하신 기술 포스트 여러가지 봤는데 정말 잘 정리한거 같아요! 열심히 참고해 보겠습니다 :)