프로그래밍언어/JAVA

<JAVA>람다식

컴퓨터과학 2020. 12. 9. 16:09

 

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));

결과 :