본문 바로가기
Language/JAVA

[JAVA] 람다식(lambda expression)

by 바까 2020. 7. 1.
반응형

람다식
  • 자바에서 함수형 프로그래밍(functional programming)을 구현하는 방식
  • 자바 8부터 지원
  • 클래스를 생성하지 않고 함수의 호출만으로 기능을 수행
[참고] 함수형 프로그래밍
  • 순수 함수(pure function)을 구현하고 호출함으로써 외부 자료에 부수적인 영향을 주지 않고 매개 변수만을 사용하도록 만든 함수
  • 함수를 기반으로 구현
  • 입력받은 자료를 기반으로 수행되고 외부에 영향을 미치지 않으므로 병렬처리 등이 가능하다.
  • 안정적인 확장성 있는 프로그래밍 방식

람다식 구현
  1. 익명함수를 만든다
  2. 매개 변수와 매개 변수를 활용한 실행문으로 구현
  3. (매개변수) -> {실행문;}

[두 수를 입력 받아 더하는 add() 함수 예]

int add(int x, int y){

	return x+y

}

🔻

(int x, int y) -> {x+y;}
  • 함수 이름 반환형을 없애고  -> 를 사용한다.

  • {}까지 실행문을 의미한다.


람다식 문법
    1. 매개 변수(하나 인경우) 자료형과 괄호 생략
    2. str -> {System.out.println(str);}
    3. 매개변수가 두 개인 경우 괄호를 생략할 수 없다.
    4. 잘못된 예) x, y ->{System.out.println(x+y);}
    5. 중괄호 안의 구현부가 한 문장인 경우 중괄호 생략 가능.
    6. str -> System.out.println(str);
    7. 중괄호 안의 구현부가 한 문장이라도 return문이 있다면 중괄호 생략 불가
    8. 잘못된 예) str -> return str.length();
    9. 중괄호 안의 구현부가 반환문 하나라면 return 문과 중괄호 모두 생략한다.
  1. str -> str.length();
  2. (x,y) ->x+y;

[실습] 함수형 프로그래밍 - 1.함수형 인터페이스 선언

public interface MyNumber {
	
	//추상 메서드 선언
	int getMax(int num1, int num2);
}

[실습] 함수형 프로그래밍 - 2.람다식 구현과 호출

public class MyNumberTest{
	

	public static void main(String[] args) {
		
		//람다식을 인터페이스형 max 변수에 대입
		MyNumber max = (x,y) -> (x >= y) ? x : y; //x가 y보다 크면 x 반환, 작으면 y 반환
		//인터페이스형 변수로 메서드 호출
		System.out.println(max.getMax(10, 20)); //20
	}

	
}

[실습]객체지향 프로그래밍 방식으로 구현 - 1.인터페이스 구현

public interface StringConcat {
	
	//추상메서드 선언
	public void makeString(String str1, String str2);

}

[실습]객체지향 프로그래밍 방식으로 구현 - 2.추상메서드를 구현하기 위한 클래스 정의

//StirngConcat 인터페이스를 구현
public class StringConcatImp implements StringConcat{

	@Override
	public void makeString(String str1, String str2) {
		// TODO Auto-generated method stub
		System.out.println(str1+str2);
	}

}

[실습]객체지향 프로그래밍 방식으로 구현 - 3.문자열 연결을 위한 클래스를 실행

public class StringConcatTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//문자열을 선언 및 초기화
		String str1 = "Java";
		String str2 = "Study";
		
		//객체 생성
		StringConcatImp concat = new StringConcatImp();
		
		//메소드 호출
		concat.makeString(str1, str2); //JavaStudy
	}

}

[실습] 람다식 표현식으로 구현하기

public interface StringConcat {
	
	//추상메서드 선언
	public void makeString(String str1, String str2);

}
public class LambdaStringConcatTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//문자열을 선언 및 초기화
		String str1 = "Java";
		String str2 = "Study";
		
		
		StringConcat concat = (s1, s2) -> System.out.println(s1+s2);
		concat.makeString(str1, str2);
		
	}

}

람다표현식은 객체지향프로그래밍처럼 인터페이스 구현 후 추상메서드를 구현하기 위한 클래스를 정의할 필요가 없다.


 

 

반응형

'Language > JAVA' 카테고리의 다른 글

[JAVA] 스트림(Stream) 연산  (0) 2020.07.02
[JAVA]Class 클래스  (0) 2020.07.01
[JAVA]내부클래스  (0) 2020.07.01
[JAVA]StringBuffer VS StirngBuilder  (0) 2020.07.01
[JAVA]String 클래스  (0) 2020.07.01

댓글