함수형 인터페이스
- 추상 메소드가 단 하나만 선언된 인터페이스 (다른 존재 여부는 상관 x)
- 추상 메소드는 인터페이스와 추상 클래스에서 사용이 되고, 선언만 되어있는 메소드로 자식 클래스에서 반드시 구현이 되어야 한다.
@FunctionalInterface // 함수형 인터페이스 o
interface MyRunnable {
void run();
}
@FunctionalInterface // 함수형 인터페이스 o
interface MyRunnable2 {
void run();
default void sayHello() {
System.out.println("Hello");
}
}
// 함수형 인터페이스 x
interface MyRunnable3 {
void run1();
void run2();
}
인터페이스의 구현
- 반드시 인터페이스의 구현체를 만들어주고, 구현체의 인스턴스를 생성해서 이용해야 한다.
- 해당 구현체를 단 한번만 이용하는 경우에는 MyRunnable과 같은 임시 클래스를 작성해야 하기 때문에 불필요하게 느껴진다.
→ 익명 클래스의 등장
class MyRunnableImpl implements MyRunnable {
@Override
public void run() {
System.out.println("Let's run");
}
}
public class Main {
public static void main(String[] args) {
MyRunnableImpl object1 = new MyRunnableImpl();
object1.run();
}
}
익명 클래스
- 익명 클래스는 인스턴스를 단 한번만 사용하기 위해서 선언되고, 재사용할 수 없다.
- 별도의 이름이 없고, 인터페이스의 추상 메소드를 구현한 익명 클래스를 인터페이스의 인스턴스로 사용할 수 있다.
public class Main {
public static void main(String[] args) {
MyRunnable object2 = new MyRunnable() {
@Override
public void run() {
System.out.println("Let's run");
}
}
object2.run();
}
}
→ 그리고 이 익명 클래스를 더 간결하게 작성하는 람다 표현식의 등장
'Java > 개념' 카테고리의 다른 글
정규표현식 (1) | 2023.11.02 |
---|---|
람다식 (0) | 2023.10.29 |
equals, hashCode (0) | 2023.10.27 |
String / int 변환 (0) | 2023.10.23 |
Collections.sort / Arrays.sort (0) | 2023.10.02 |