똑같은 삽질은 2번 하지 말자
Java 8 @FunctionalInterface(함수형 인터페이스), 람다 표현식 본문
@FunctionalInterface (함수형 인터페이스)
-
추상 메소드 한개만을 가지고 있는 인터페이스
-
SAM (Single Abstract Method) 인터페이스
-
@FuncationInterface 애노테이션을 가지고 있는 인터페이스
람다 표현식 (Lambda Expressions)
-
함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있다.
-
코드를 줄일 수 있다.
-
메소드 매개변수, 리턴 타입, 변수로 만들어 사용가능
@FunctionalInterface // 자바(standard)가 지원해주는 어노테이션
public interface RunSomething {
/* 추상 메소드가 하나만 있으면 함수형 인터페이스
abstract는 생략 가능 (@FunctionalInterface가 있으면) */
abstract void doIt();
}
이렇게 사용하거나
public class Suo {
public static void main(String[] args) {
// 익명 내부스 클래스 anonymous inner class
RunSomething runSomething = new RunSomething() {
@Override
public void doIt() {
System.out.println("Hello");
System.out.println("EveryOne");
}
};
}
람다표현식을 사용
public class Suo {
public static void main(String[] args) {
RunSomething runSomething = () -> {
System.out.println("hello");
System.out.println("hi");
};
}
javascript를 다루면서 함수형 프로그래밍을 학습중인데, 개념이 똑같아서 이해하기 어렵지 않았다.
역시 여기서도 나오는 말이 함수형 프로그래밍의 특징인 부분인데
자바에서 함수형 프로그래밍
-
함수를 First class object로 사용할 수 있다.
-
순수 함수 (Pure function)
-
고차 함수 (Higher-Order Function)
-
불변성
순수 함수란?
부수효과가 없는 함수 즉, 어떤 함수에 동일한 인자를 주었을 때 항상 같은 값을 리턴하는 함수
+ 외부의 상태를 변경하지 않는 함수
고차 함수란?
함수가 함수를 매개변수로 받을 수 있고 함수를 리턴할 수도 있다.
객체지향프로그래밍의 좀더 진화한 형태가 함수형 프로그래밍이라고 너튜브에서 본적이 있다.
개인적으로 최근 프로젝트를 하면서 느끼는 거지만, 재사용성이 높은 모듈들을
외부의 상태를 변경하지 안하고 영향을 안받게 잘 짜면 어느 곳에서나 갖다 쓸수 있고,
그러면 그만큼 개발시간이 줄어들기 때문에 이렇게 프로그애밍 패러다임이 점점 발전한다고 느낀다.
그리고 자바에서 기본적으로 제공하는 함수형 인터페이스들이 있는데, 아래 링크를 참조
docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
'Java' 카테고리의 다른 글
Java 8 Stream (0) | 2020.10.25 |
---|---|
Java 8 인터페이스의 변화 (0) | 2020.10.25 |
Java Reflection API(리플렉션) (0) | 2020.09.21 |
JIT 컴파일러 이해 (Just-In-Time 컴파일러) (0) | 2020.08.25 |
Java jacoco(코드 커버리지 측정) 사용방법 (0) | 2020.08.23 |