[JAVA][패스트캠퍼스]람다식

김주현·2021년 5월 1일
0

람다식이란?

  • 자바에서 함수형 프로그래밍(functional programming)을 구현하는 방식
  • 클래스를 생성하지 않고 함수의 호출만으로 기능을 수형
  • 함수형 인터페이스를 선언함
  • 자바8부터 지원되는 기능

함수형 프로그래밍이란?

  • 순수 함수(pure function)를 구현하고 호출
  • 매개변수만을 사용하도록 만든 함수로 외부 자료에 부수적인 영향(side effect)가 발생하지 않도록 함
  • 입력받은 자료를 기반으로 수행되고 외부에 영향을 미치지 않으므로 병렬처리등에 가능 안정적인 확장성 있는 프로그래밍 방식

람다식 문법

  • 매개변수 하나인 경우 괄호 생략가능 (두 개인 경우는 괄호를 생략할 수 없음)
    - str-> {System.out.println(str);}
  • 중괄호 안의 구현부가 한 문장인 경우 중괄호 생략
    - str-> System.out.println(str);
  • 중괄호 안의 구현부가 한 문장이라도 return문은 중괄호를 생략할 수 없음
    - str-> return str.length(); //오류
  • 중괄호 안의 구현부가 반환문 하나라면 return과 중괄호를 모두 생략할 수 있음
    - (x,y)->x+y //두 값을 더하여 반환
    - str->str.length() //문자열 길이를 반환

MyMaxNumber.java

package lambda;

@FunctionalInterface  //람다식을 위한 인터페이스임을 선언
public interface MyMaxNumber {
	int getMaxNumber(int x, int y);
	//함수형 인터페이스를 선언하게 되면 메서드를 두개이상 쓸수없음
	//void add(int x, int y);

}

StringConcat.java

package lambda;

@FunctionalInterface
public interface StringConcat {

	public void makeString(String s1,String s2);
}

StringConImpl.java

package lambda;

public class StringConImpl implements StringConcat{

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

}

TestStringConcat.java

package lambda;

public class TestStringConcat {

	public static void main(String[] args) {
		
		StringConImpl impl=new StringConImpl();
		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");
		
	}
}

TestMyNumber.java

package lambda;
//람다식구현
public class TestMyNumber {

	public static void main(String[] args) {
		//x,y변수 중에 더 큰변수를 반환해주어라
		//return이 있으면 중괄호를 생략할 수 없음
		//return문이 하나인 경우에 중괄호와 return을 동시에 생략가능함
		MyMaxNumber max=(x, y)->(x >= y)?x : y;
		System.out.println(max.getMaxNumber(10, 20));
	}
}

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

  • 프로그램에서 변수는...
    - 자료형에 기반하여 선언하고 int a;
    - 매개변수로 전달하고 int add(int x, int y);
    - 메서드의 반환 값으로 사용 return num;
  • 람다식은 프로그램내에서 변수처럼 사용할 수 있음

TestLambda.java

package lambda;

interface PrintString{
	void showString(String str);
}

public class TestLambda {
	public static void main(String[] args) {
		
		PrintString lambdaStr=s->System.out.println(s);
		lambdaStr.showString("Test");
		showMyString(lambdaStr);
		
		//함수의 구현부가 마치 변수처럼 반환되서 test변수에 대입해서 Test3!!!을 호출
		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+"!!!");
	}
}

0개의 댓글