home
자바
home
🙂

함수형 인터페이스와 람다 표현식

강의명
JAVA 8
강의순서
1
과목
☕자바
수강상태
완료

함수형 인터페이스 (Functional Interface)

추상 메서드딱 하나만 가지고 있는 인터페이스
default 메서드 또는 static 메서드는 여러개 존재해도 상관없다.
@FunctionalInterface 어노테이션을 가지고 있는 인터페이스
이 어노테이션을 붙이면 함수형 인터페이스가 맞는지 검사해준다.
어노테이션 없이도 함수형 인터페이스로 동작하고 사용하는데 문제는 없지만, 인터페이스 검증과 유지보수를 위해 명시적으로 붙여주는게 좋다.
ex)
@FunctionalInterface public interface RunSomething { void doIt(); }
Java
복사
—> 이 함수형 인터페이스를 어떻게 쓰는지?
자바 8 이전
RunSomething runSomething = new RunSomething() { @Override public void doIt() { System.out.println("Hello"); } }; runSomething.doIt();
Java
복사
익명 내부 클래스 (anonymous inner class)
자바 8 이후
ex1) RunSomething runSomething = () -> System.out.println("Hello"); ex2) RunSomething runSomething = () -> { System.out.println("Hello"); System.out.println("Hello jjw"); }; runSomething.doIt();
Java
복사
람다 표현식

자바에서 제공하는 함수형 인터페이스

-자바에서 미리 정의해둔 자주 사용할만한 함수 인터페이스들이 있다.
-java.lang.function 패키지
Function<T, R>
BiFunction<T, U, R>
Consumer<T>
Supplier<T>
Predicate<T>
UnaryOperator<T>
BinaryOperator<T>
자바에서 함수형 프로그래밍이라 함은…..
함수를 First class object로 사용할 수 있다.
순수 함수 (Pure function)
사이드 이팩트가 없다.
(함수 밖에 있는 값을 변경하지 않는다.)
상태가 없다.
(함수 밖에 있는 값을 사용하지 않는다.)
고차 함수 (Higher-Order Function)
함수가 함수를 매개변수로 받을 수 있고 함수를 리턴할 수도 있다.
불변성

람다 표현식 (Lambda Expressions)

함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있다.
(함수형 인터페이스로만 접근 가능하다)
코드를 줄일 수 있다.
메서드 매개변수, 리턴 타입, 변수로 만들어 사용할 수도 있다.
(람다표현식을 특수한 형태의 오브젝트라고 생각하고 매개변수, 리턴타입, 변수로 만들 수도
있다고 이해하면 될 것 같다)

람다

(인자 리스트) → { 바디 }

인자 리스트

인자가 없을 때 : ()
인자가 한 개일 때 : (one) 또는 one
인자가 여러개 일 때 : (one, two)
인자의 타입은 생략 가능, 컴파일러가 추론(infer)하지만 명시할 수도 있다.
(Integer one, Integer two)

바디

화살표 오른쪽에 함수 본문을 정의한다.
여러 줄인 경우에 {}를 사용해서 묶는다.
한 줄인 경우에 생략 가능, return도 생략 가능