KSCOLD LogoKSCOLD
Blog
Feed
Product
Admin Night
Vault
Guestbook
Info

Vault 목록

함수형 인터페이스

연결된 노트와 함께 읽기

함수형 인터페이스

2024년 2월 14일
  • 함수형 인터페이스는 한개의 추상 메서드(Abstract Method)가 정의된 인터페이스(Interface)를 의미한다.

  • 1개의 메서드(Method) 만을 갖는 인터페이스(Interface)를 의미한다.

예시

Java
  • FiInterface는 run 이라는 메서드(Method) 하나만 정의되어 있다.

  • 이 인터페이스를 사용한다면 아래와 같이 코드를 작성할 수 있을 것 이다.

Java
  • SomeClass의 someMethod는 FiInterface 타입의 fi 변수를 받아온다.
  • 위 클래스를 사용하기 위해 아래처럼 FiInterface 를 구현한 클래스를 새로 정의하고, 그 클래스의 인스턴스(Instance)를 넣어줄 수 있겠다.
Java
  • 하지만, 이는 함수형 인터페이스를 제대로 사용하지 않는 코드이다.
  • 아래와 같이 람다(lambda)식을 이용해보자.
Java
  • 새로운 클래스를 정의하지 않고, 람다식을 통해 메서드(Method)만 정의한 다음 SomeClass의 매개변수로 전달할 수 있다.

  • 이때, FiInterface와 같이 람다(lambda)표현식이 대입될 타입을 타겟 타입 (Target Type)이라고 한다.

  • 위 코드는 아래와 같이 더 축약되어 사용할 수 있을 것이다.

Java
  • 코드가 직접 클래스(Class)를 직접 작성하는 것과 비교하여 굉장히 간략화 되었고, 가독성이 증가되었다.
  • 이것이 람다표현식과 함수형 인터페이스를 사용하는 이유이다.

Synapse Map Insight

public interface FiInterface { public void run(); }
class SomeClass { public void someMethod(FiInterface fi) { fi.run(); } }
// FiInterface 의 구현체 class OtherClass implements FiInterface { @Override public void run() { System.out.println("실행되었음"); } } // 사용하는 부분 SomeClass some = new SomeClass(); some.someMethod(new OtherClass());
FiInterface fi = () -> { System.out.println("실행되었음"); }; SomeClass some = new SomeClass(); some.someMethod(fi);
SomeClass some = new SomeClass(); some.someMethod(() -> { System.out.println("실행되었음"); });