오늘이라도
[Java] 함수형 프로그래밍과 람다식 본문
반응형
https://www.inflearn.com/course/the-java-java8#
백기선 개발자님의 더 자바, Java 8 강의를 들으면서 정리한 내용입니다.
//어노테이션을 붙여서 위반할때 에러가 뜬다.
//함수형 인터페이스를 만들고자 할때 붙여주면 좋다.
@FunctionalInterface
public interface RunSomething {
// 인터페이스에 '추상 메서드'가 하나만 있으면 함수형 인터페이스
// 인터페이스의 구현체를 만들때 메서드를 구현해줘야한다.
// 원래는 abstract void가 붙으나 인터페이스에서는 생략가능하다.
// public도 생략 가능하다
void doIt();
// 하나 더 메서드가생기면 함수형 인터페이스가 아님
// void doItAgain();
// 1.8에서 인터페이스에 static 메서드 정의 가능
static void printName() {
System.out.println("Lee");
}
// 디폴트 메서드도 정의 가능
// 이렇게 다른 형태의 메서드가 있더라도 추상 메서드가 하나라면 함수형 인터페이스다
default void printAge() {
System.out.println("100");
}
}
public interface RunSomething2 {
int doit(int number);
}
public class Foo {
public static void main(String[] args) {
//익명 내부 클래스 anonymous inner class
RunSomething runSomething1 = new RunSomething() {
@Override
public void doIt() {
System.out.println("Hello");
}
};
runSomething1.doIt();
//람다식으로 표현
//이클립스의 경우 RunSomething()의 RunSomething에 블럭을 한 뒤 Ctrl + 1로 바꿀 수 있다
//람다식으로 표현하면 내부적으론 동일하나 코드를 많이 줄일 수 있다.
//함수형 인터페이스를 1라인으로 구현한 특수한 object로 볼 수 있다.
runSomething1 = () -> System.out.println("Hello");
runSomething1.doIt();
//한줄일 경우에만 블럭 없이 표현가능하다
runSomething1 = () -> {
System.out.println("Hello");
System.out.println("Lambda");
};
runSomething1.doIt();
System.out.println("-------------------------------------------------------------------------------------------------");
//수학적인 함수에서 중요한 것은 입력받은 값이 동일한 경우, 결과가 같아야 한다.
RunSomething2 runSomething2 = (number) -> number + 10;
//1을 넣었으면 계속해서 11이 나와야 한다.
//그렇지 않다면 함수형 프로그래밍이라 하기 어렵다.
System.out.println(runSomething2.doit(1));
System.out.println(runSomething2.doit(1));
System.out.println(runSomething2.doit(1));
//그렇지 않을 경우 1 : 함수 밖의 값을 참조해서 사용하는 경우
//함수 밖
runSomething2 = new RunSomething2() {
//함수 밖
//baseNumber 같이 함수 밖의 값이 있다면 pure한 함수라고 보지 않는다.
//상태값을 가진다고 말한다.
int baseNumber = 10;
@Override
public int doit(int number) {
//그렇지 않을 경우 2 : 함수 밖의 값을 변경하는 경우
baseNumber++;
return number + baseNumber;
}
};
//함수형 프로그램밍이 가능하다고 해서 무조건 할 필요는 없다.
//문법이 허용하는 내에서 필요하면 함수형 프로그래밍을 하거나 편의를 위해 사용하면 된다.
}
}
반응형
'개발 공부 > Java' 카테고리의 다른 글
[Java] 인터페이스 간단하게 개념과 문법 (0) | 2021.08.30 |
---|---|
[Java] 자바에서 제공하는 함수형 인터페이스 (0) | 2021.08.24 |
[Java] 도대체 객체가 뭔데? : 객체, 클래스, 인스턴스 (2) | 2021.06.21 |