초오오오오오짜개발자의낙서장
JAVA 함수형 프로그래밍 본문
JAVA Interface
- interface 키워드를 사용하여 정의
- 상수와 추상 메소드로 구성
- 모든 상수는 public static final 타입
- 모든 추상 메소드는 abstract public 타입
- 클래스에서 인터페이스 구현은 implements 키워드를 사용하여 구현할 인터페이스 지정 후 추상 메소드를 모두 오버라이드 하여 내용을 완성.
//인터페이스
interface JavaInterface {
String call();
boolean test();
}
//인터페이스 상속 구현
class InterfaceImpl implements JavaInterface {
@Override
public String call() {
return "called";
}
@Override
public boolean test() {
return true;
}
}
public class PlayGround {
public void test1() {
InterfaceImpl impl = new InterfaceImpl();
impl.test();
}
}
//익명 클래스 구현
public class PlayGround {
public void test2() {
JavaInterface javaInterface = newJavaInterface() {
@Override
public String call() {
return "called";
}
@Override
public boolean test() {
return true;
}
};
javaInterface.call();
}
}
JAVA Functional Interface
- 1개의 추상 메소드를 갖는 인터페이스
- JAVA 8 부터 인터페이스는 기본 구현체를 포함한 default 메소드를 포함할 수 있음
- 여러개의 default 메소드가 있더라도 추상 메소드가 오직 하나이면 함수형 인터페이스임.
- java의 람다 표현식은 함수형 인터페이스에만 가능
@FunctionalInterface
interface TestFunctionalInterface<T> {
T call();
// default method 는 존재해도 상관없음
default void printDefault() {
System.out.println("Hello Default");
}
// static method 는 존재해도 상관없음
static void printStatic() {
System.out.println("Hello Static");
}
}
//인터페이스 상속 구현 가능
//익명 클래스 구현 가능
//람다식 가능
TestFunctionalInterface<String> testFunctionalInterface = () -> {
return "called";
};
testFunctionalInterface.call();
//파라미터를 전달받아 사용하고 아무것도 반환하지 않음 – 이를 소비(Consume)한다고 표현.
//accept 추상 메소드를 가지고 있음.
@FunctionalInterface
public interface Consumer<T> {
/**
* Performs this operation on the given argument. *
* @param t the input argument
*/
void accept(T t);
}
//자바 Functional interface - Consumer 사용 예시
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6);
numbers.stream().forEach(number -> System.out.println(number));
//함수 안에 람다함수 형식으로
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6);
for(Integer number: numbers) {
System.out.println(number);
}
'Programing Language > Java' 카테고리의 다른 글
Java3 (0) | 2025.05.08 |
---|---|
Java 2번째 (1) | 2025.05.07 |
Java 1번째 정리 (1) | 2025.05.02 |
Java 개발 준비 (0) | 2025.04.16 |