stackoverflow.com/questions/16859992/java-lambda-expressions
Java Lambda expressions
Lambda expressions are being added in Java 8. I want to understand why this is important. What does it mean to a Java programmer who is yet to be exposed to functional programming idioms? Does it m...
stackoverflow.com
람다식이란?
함수형 코드, 함수형 프로그래밍를 의미한다.
stackoverflow.com/questions/24279/functional-programming-and-non-functional-programming
Functional programming and non-functional programming
In my second year of University we were "taught" Haskell, I know almost nothing about it and even less about functional programming. What is functional programming, why and/xor where would I want ...
stackoverflow.com
stackoverflow.com/questions/5381901/functional-programming-side-effects
Functional Programming: Side Effects
Most tutorials/articles/books talk about side effects when presenting functional programming. Take this Python code: def isPrime(n): k = 2 while k < n: if n % k == 0:
stackoverflow.com
ui.toast.com/weekly-pick/ko_20171124
Redux-Saga - 사이드 이펙트 관리
지난 1년 6개월 동안 리액트, 리덕스를 공부하고 활용해 웹 애플리케이션을 개발했다. 지금도 개발하고 있고, 여전히 비동기 처리와 같은 사이드 이펙트(Side effects)를 고민하고 있다. 리액트, 리
ui.toast.com
함수형 프로그래밍이란?
순수 함수를 구현하고 호출하는 방식입니다.
함수형 프로그래밍은 왜 사용할까?
softwareengineering.stackexchange.com/questions/51712/why-functional-programming
Why Functional Programming
What is the deal with functional programming? I see talk about it a lot but to be honest I've never found them at all useful. Why do so many universities apparently teach them?
softwareengineering.stackexchange.com
매개 변수만을 사용하도록 만든 함수로 외부 자료에 부수적인 영향(side-effect)가 발생하지 않도락 하기위함입니다.
입력 받은 자료를 기반으로 수행되고 외부에 영향을 미치지 않으므로 병렬처리 등에 가능 안정적인 확장성있는 방식입니다.
*부수적인 영향(side-effect)
함수(메서드)내에 계산하는것과 값을 리턴 외의 일어나는것들을 사이드 이팩트라고한다.
말그대로 부작용인데 예를들어 c++에서 레퍼런스나 포인터를 받아서 그 인자들의 상태를 바꿔버리거나
전역 변수나 맴버 변수를 사용하는 경우이다 즉 함수내에서만 일어나야 하는데 외부에의 상태까지 변화시키는 경우를
뜻한다.
ps 솔직히 필자도 격어보지를 못해서 '사이드 이팩트구나' 하고 느껴본적이 없습니다. 더 많은 경험을 하면
격어보지 않을까 생각하고 있습니다.
그렇다면 람다식 함수형 프로그래밍을 확인해보겠습니다.
인터페이스 :
package Test01;
public interface LamdaInterface {
int getMaxNumber(int x, int y);
}
메인함수:
package Test01;
public class Main {
public static void main(String [] args) {
//인터페이스 인터페이스 변수명 =(매개변수 )->리턴값 (조건 및 결과)
LamdaInterface lamdaInterface=(x,y)->(x>=y)?x:y;
System.out.println(lamdaInterface.getMaxNumber(10, 20));
}
}
먼저 인터페이스의 람다식 함수형 프로그램밍을 사용할 메서드(함수) 하나만 있어야 합니다.
int getMaxNumber(int x, int y);
그리고 메인에서 아래와 같이 인터페이스 인터페이스 변수명 =(함수에 들어갈 매개변수 )->리턴값 (조건 및 결과) 이러한 문법으로 지정해줍니다.
//인터페이스 인터페이스 변수명 =(매개변수 )->리턴값 (조건 및 결과)
LamdaInterface lamdaInterface=(x,y)->(x>=y)?x:y;
그 상태에서 메인에서 함수를 호출합니다.
System.out.println(lamdaInterface.getMaxNumber(10, 20));
그렇다면 이번에 비교가 아니라 간단하게 더하기 뺴기로 하면 더 이해가 쉬울듯합니다.
package Test01;
public class Main {
public static void main(String [] args) {
//인터페이스 인터페이스 변수명 =(매개변수 )->리턴값 (조건 및 결과)
LamdaInterface lamdaInterface=(x,y)->(x>=y)?x:y;
System.out.println(lamdaInterface.getMaxNumber(10, 20));
lamdaInterface=(x,y)->(x+y);
System.out.println(lamdaInterface.getMaxNumber(10, 20));
lamdaInterface=(x,y)->(x-y);
System.out.println(lamdaInterface.getMaxNumber(10, 20));
}
}
아래와 같이 더하기 빼기로 함수를 리턴하는 식으로 변경하였습니다.
lamdaInterface=(x,y)->(x+y);
System.out.println(lamdaInterface.getMaxNumber(10, 20));
lamdaInterface=(x,y)->(x-y);
System.out.println(lamdaInterface.getMaxNumber(10, 20));
결과 :
'프로그래밍언어 > JAVA' 카테고리의 다른 글
<JAVA>Stream -2 (0) | 2020.12.11 |
---|---|
<JAVA>Stream-1 (0) | 2020.12.09 |
<JAVA> 익명 내부 클래스 (0) | 2020.12.09 |
<JAVA>내부 클래스 (0) | 2020.12.08 |
<JAVA>Collection Set,Map (0) | 2020.12.07 |