람다식 메소드 공부
andThen() :
Interface AB = InterfaceA.andThen(InterfaceB);
인터페이스 A를 호출하여 처리를 한 후, 결과를 인터페이스B의 매개값으로 넘겨 최종 결과를 리턴한다.
주로 compose()와 같이 다뤄지며, 인터페이스를 순차적으로 연결하여 첫번째의 처리 결과를 두번째에 매개값으로 제공하여 최종값을 얻을 때 사용된다.
compose()의 경우:
Interface AB = InterfaceA.andThen(InterfaceB);
andThen()과 반대로, B를 호출하여 처리 한 후, 결과를 A의 매개값으로 넘겨 최종결과를 리턴한다.
클로저(closur):
람다 계산식(lamda Calculus)의 구현체이다.
함수는 일반적으로 외부에서 인자를 받아 로직을 처리하지만,
클로저는 외부 범위의 변수를 함수 내부로 바인딩 하는 기술이다.
외부 함수가 종료 되어도 값이 유지가 되며, 이러한 유지가 가능한 이유는 함수에서 사용한 값들은 클로저가 생성되는 시점에 정의되고, 함수가 복사되어 따로 값으로 존재하기 때문이다.
자바 내에서 클로저는 함수의 인스턴스이며, 외부 변수를 참조하는 익명클래스가 클로저와 비슷하다 볼 수 있다.
예시:
@FunctionalInterface //함수형 인터페이스
interface TvCondition {
boolean isStatus();
}
void remoteControl() throws InterruptedException {
Tv tv = new Tv();
tvOff(() -> !tv.isRunning());
}
위와 같이 인자 없이 boolean 값을 리턴하는 함수형 인터페이스를 사용 할 경우,
받아오는 정보가 없기 때문에 필요한 정보를 외부에서 참조해야한다.
참조 한 변수는 컴파일러에 의해 복사되는데, 이것이 클로저이다.
고차함수(Higher order function)
함수를 인자로 전달받거나, 함수를 결과로 반환하는 함수.
위의 조건을 만족하기 위해, 일급객체(First-Class Citizen)이어야 한다.
일급 객체 조건
- 변수나 데이터 할당을 할 수 있어야한다.
- 객체의 인자로 넘길 수 있어야한다.
- 객체의 리턴값으로 리턴할 수 있어야한다.
인자로 받은 함수를 필요한 시점에 호출하거나, 클로저를 생성하여 반환한다.
함수도 객체처럼 리터럴하게 다룰 수 있다.
예제:
Function<Set<Integer>, Integer> sum
= factors -> factors.stream().reduce(0, Integer::sum);
Function<Integer, Integer> factorsSum = factors.andThen(sum);
프로그래밍 패러다임(programming paradigm)
프로그래밍의 패러다임 형태로, 프로그래머에게 프로그래밍의 관점을 갖게 해주고 결정하는 역할을 한다.
프로그래밍을 어떤 관점으로 보고 이해하는지에 따라 지향하는 프로그래밍의 원칙들도 달라진다.
종류:
객체 지향 패러다임과 함수형 패러다임:
어제작성 했던 코드 리팩토링 작업 및, 미션 2 완료
모르는 부분에 대한 검색 (비중이 엄청엄청 컸던 것 같다.)
운동
원래 점심에 가볍게 산책후 저녁에 조깅을 했는데, 오늘은 미션 때문에 마음이 조급해져서 조금밖에 운동을 하지 못한게 좀 아쉽다.
다른 분들은 중간중간 다른 책도 읽어보시고 그러시던데...,나는 미션 수행도 벅차서 어떻게 시간을 비워야할지 잘 모르겠다.
이런 고민만 엄청 많이 한것같은데.... 실력도 안되면서 이것저것 건들여보고 싶은 욕심만 가득한것 같다.🥲