• 회원가입
  • 로그인
  • 구글아이디로 로그인

[class] Java - Lambda (람다 표현식)

487  
목차
  1. Lambda 정의
  2. Lambda 구문
  3. Lambda 예제1 - 람다를 메서드 매개변수로 바로 전달
  4. Lambda 예제2 - 람다를 변수에 담아 매서드 매개변수로 전달
  5. Lambda 예제3 - 메서드 안에서 람다 사용

 

Lambda 정의


매개변수 받아 값을 반환하는 짧은 익명 표현식 코드 블럭.

 



1.

Java 8 + 

 

2.

메서드와 비슷하나,
이름 불필요하며 메서드 본문에서 바로 구현 가능.

 

3.

매개변수는 다수 가능하나,

표현식은 반드시 1개만 가능.

 

 

Lambda 구문

※ 3가지 형태 가능.

 

1. 매개변수 1개 경우.

parameter -> expression

 

2. 매개변수 2개 이상 시, 소괄호로 묶어야 함.

(parameter1, parameter2) -> expression

 

3. 복잡한 표현식 경우, 중괄호로 묶을 수 있음.

(parameter1parameter2) -> { code block }

 


[매개변수]

 

1.

매개변수는 1개 이상 가능.

 

2.

매개변수가 2개 이상 시, 소괄호로 묶어야 함.

 


[표현식]

 

1.

값을 즉시 반환해야 함.

 

2.

아래 것들은 못 가짐.

① 변수

② 할당

③ for, if 같은 구문.

 

3.

복잡한 연산 위해 중괄호 {} 사용 가능하나.

이 경우엔 return 키워드 사용해 값을 반환.

 

 

※ 예제 코드 먼저 보고, 설명 보시기 바람.

 

Lambda 예제1 - 람다를 메서드 매개변수로 바로 전달

 

Lambda 표현식은 주로 함수(메서드)의 매개변수로 전달됨.

(예) ArrayList의 forEach()메서드 매개변수로 람다 전달.

 


Hz.java


import java.util.ArrayList;


public class Hz {

  public static void main(String[] args) {

    ArrayList<Integer> nums = new ArrayList<Integer>();

    nums.add(1);

    nums.add(3);

    nums.add(5);

    nums.add(7);

    nums.forEach( (n) -> { System.out.println(n); } );

  }

}

 

결과값:

1

3

5

7

 

Lambda 예제2 - 람다를 변수에 담아 매서드 매개변수로 전달

[변수에 람다 저장 가능 조건]

 

1.

변수 값 유형이 1개의 메서드만 있는 형태여야 함.

 

2.

람다에는 해당 메서드와 동일 개수의 매개변수와 동일 반환 형식이 있어야 함.

 

PS. 

Java엔 위 조건 충족시키는 많은 인터페이스 존재.

(예) java.util 패키지 안의 Consumer 경우, 리스토로 사용.


Hz.java

 

import java.util.ArrayList;

import java.util.function.Consumer;


public class Hz {

  public static void main(String[] args) {

    ArrayList<Integer> nums = new ArrayList<Integer>();

    nums.add(1);

    nums.add(3);

    nums.add(5);

    nums.add(7);

    Consumer<Integer> my = (n) -> { System.out.println(n); };

    nums.forEach( my );

  }

}

 

결과값:

1

3

5

7

 

Lambda 예제3 - 메서드 안에서 람다 사용

[메서드에 람다 사용 조건]

 

1.

메서드는 단일 메서드 가진 인터페이스를 매개변수로 가져야 함.

 

2.

인터페이스의 메서드를 호출하면 람다가 실행됨.

 


Hz.java

 

interface MyString {

  String run(String str);

}


public class Hz {

  public static void main(String[] args) {

    MyString ko = (s) -> s + " 좋아.";

    MyString en = (s) -> s + " 최고";

    myPrint("홈짱닷컴", ko);

    myPrint("Homzzang.com", en);

  }

  public static void myPrint(String str, MyString my) {

    String result = my.run(str);

    System.out.println(result);

  }

}

 

결과값:

홈짱닷컴 좋아.

Homzzang.com 최고

PS. 예제3 작동 메커니즘 음미해보시기 바람.



분류 제목
class Java - LinkedList (링크트리스트) - 반복 접근 최적화 된 유사 배열
class Java - HashMap (해시맵) - key=value 쌍의 유사 배열. (Python Dictionar…
class Java - HashSet (해시셋) - 유일값만 인정하는 유사 배열. ※ Python의 Set과 유사.
class Java - Iterator (반복자)
class Java - Wrapper Classes (랩퍼 클래스)
class Java - Exceptions (= Try...Catch..) - 에러 제어 (= 익셉션 = 트라이...캐…
class Java - RegEx (정규식) - 정규표현식
class Java - Threads (쓰레드)
class Java - Lambda (람다 표현식)
file Java - File 클래스 + 메서드
file Java - Create/Write Files (파일 생성/쓰기)
file Java - Read Files (파일 읽기) - 파일 정보 얻기
file Java - Delete Files (파일 삭제)
Keyword Java - Keywords (키워드) 종류
Keyword Java - abstract 키워드 - 추상 (클래스/메서드) 선언.
Keyword Java - assert 키워드 △ - 디버깅 할 때 사용.
Keyword Java - boolean 키워드 - 참거짓 자료형 지정.
Keyword Java - break 키워드 - (반복문・switch 조건문) 탈출. (= 브레이크)
Keyword Java - byte 키워드 - 1byte 크기의 '정수형' 자료형 지정. (= 바이트)
Keyword Java - case 키워드 - switch 조건문의 각 조건 지정.
3/10
목록
찾아주셔서 감사합니다. Since 2012