JAVA

람다식

Stater 2019. 10. 14. 09:00

람다식

- 자바에서 함수형 프로그래밍(functional programming)을 구현하는 방식

- 클래스를 생성하지 않고 함수의 호출만으로 기능을 수행

- 함수형 인터페이스를 선언함

- 자바 8부터 지원되는 기능

- 함수형 프로그래밍을 사용 함으로서 병렬 처리가 가능하다.

 

 

함수형 프로그래밍

- 순수 함수(pure function)를 구현하고 호출

- 매개 변수만을 사용하도록 만든 함수로 외부자료에 부수적인 영향(side effect)가 발생하지 않도록함

- 입력받은 자료를 기반으로 수행되고 외부에 영향을 미치지 않으므로 병렬처리등에 가능 

- 안정적인 확장성 있는 프로그래밍 방식

 

 

람다식 문법

- 매개 변수 하나인 경우 괄호 생략가능(두 개인경우는 괄호를 생략할 수 없음)

str->{System.out.println(str);}

- 중괄호 안의 구현부가 한 문장인 경우 중괄호 생략

str->System.out.println(str);

- 중괄호 안의 구현부가 한 문장이라도 return문은 중괄호 생략할 수 없음

str->return str.lenght();//오류

 -중괄호 안의 구현부가 반환문 하나라면 return과 중괄호를 모두 생략할 수 있음

(x,y) -> X+Y// 두 값을 더하여 반환

str -> str.length() //문잦열 길이를 반환

package lamda;
//람다식 인터페이스 구현
@FunctionalInterface
public interface MyMaxNumber {

	int getMaxNumber(int x , int y);
	
}
package lamda;

public class TestMyNumber {

	public static void main(String[] args) {

		MyMaxNumber max = (x,y)->(x>=y)?x:y;
		System.out.println(max.getMaxNumber(10, 20));

	}

}

 

인터페이스로 구현한 방법

package lamda;

public class StringComImpl implements StringConcat{

	@Override
	public void makeString(String s1, String s2) {
		System.out.println(s1+s2);
		
	}

	
}
package lamda;

@FunctionalInterface
public interface StringConcat {
	
	public void makeString(String s1,String s2);

}

package lamda;

public class TestStringConcat {

	public static void main(String args[]) {
	 //인터페이스를 사용한 구현
	StringComImpl impl =new StringComImpl();
	impl.makeString("Hello", "World");

	//람다식으로 구현한 부분
	StringConcat concat = (s,v)->System.out.println(s+","+v);
	concat.makeString("hello", "world");
	
	StringConcat concat2 = new StringConcat() {

		@Override
		public void makeString(String s1, String s2) {
			System.out.println(s1+","+s2);
			
		}
		
	};
	concat2.makeString("hello", "world");
	}
}

함수를 변수처럼 사용하는 람다식

- 프로그램 변수는 자료형에 기반하여 선언하고  int a;

- 프로그램 변수는 매개변수로 전달하고 int add(int a, int y);

- 프로그램 변수는 메서드의 반환값으로 사용 return num;

- 람다식은 프로그램 내에서 변수처럼 사용할 수 있음

 

package lamda;

interface PrintString{
	void showString(String str);
}

public class TestLamda {

	public static void main(String[] args) {
		
		PrintString lamdaStr = s-> System.out.println(s);
		lamdaStr.showString("Test");

		showMyString(lamdaStr);
		PrintString test = returnString();
		test.showString("test3");
	}
	
	public static void showMyString(PrintString p) {
		p.showString("Test2");
	}

	public static PrintString returnString() {
		return s->System.out.println(s+"!!!!!");
	}
	
	
}
반응형

'JAVA' 카테고리의 다른 글

스트림관련 코딩  (0) 2019.10.16
스트림(Stream)  (0) 2019.10.15
내부클래스  (0) 2019.10.13
Map인터페이스  (2) 2019.10.12
Comparable 인터페이스와 Comparator 인터페이스  (0) 2019.10.11