람다식
- 자바에서 함수형 프로그래밍(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 |