초오오오오오짜개발자의낙서장

JAVA 함수형 프로그래밍 본문

Programing Language/Java

JAVA 함수형 프로그래밍

코딩하는곰팅이 2025. 6. 4. 09:26

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