[Java 일반] [JAVA] JAVA의 람다식 사용법 및 다양한 작성 예제

JAVA의 람다식(lambda) 사용법 및 다양한 작성 예제

 

 

 


Java의 람다식

 

■ 자바의 람다식

✓ 람다식(lambda)

- 자바에서는 함수를 메서드라고 부르고 메서드의 형태로 존재

- 자바 람다식의 구조

 

   . (argument) -> { body } 구문을 사용하여 작성

 

자바의 람다식 구조

 

@매개변수 리스트

  - 함수에 전달되는 매개변수들이 나열

  - 매개변수를 생략하면 컴파일러가 추론 기능을 이용하여 알아서 처리

  - 매개변수가 하나인 경우 괄호를 생략 가능

 

@애로우 토큰

  - 매개변수 리스트와 함수 코드를 분리시키는 역할

  - "->" 기호: 매개변수들을 전달하여 함수 바디 { }에 작성된 코드를 실행

 

@함수 바디

  - 함수의 코드

  - 중괄호 ({ })로 둘러싸는 것이 일반적이지만, 한 문장인 경우 중괄호({ })를 생략 가능

  - 한 문장이더라도 return 문이 있으면 반드시 중괄호로 둘러싸야함

 

 


람다식을 이용하는 방법

 

■ 람다식을 이용하는 방법

✓ 람다식(lambda) 만들기: 람다식은 함수형 인터페이스를 구현한 객체

- 자바에서 람다식은 함수형 인터페이스에 선언된 추상 메서드를 구현하는 방식으로 작성

함수형 인터페이스(functional interface) 작성

   . 추상 메서드 하나만 있는 인터페이스

1
2
3
4
5
@FunctionalInterface
interface MyFunction { // 함수형 인터페이스
    int calc(int x, int y); // 추상 메소드
}
 
cs

 

  .@FunctionalInterface

  컴파일러에게 함수형 인터페이스임을 알리는 annotation

 => 컴파일러에게 인터페이스가 추상 메서드가 1개만 있는 함수형 인터페이스인지 확인하도록 하여,

      처음부터 잘못된 인터페이스 작성을 막는 장점

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

- 함수형 인터페이스의 추상 메서드를 람다식으로 구현

 . 람다식의 작성: 함수형 인터페이스의 추상 메서드에 코드를 작성

 . 인터페이스를 상속받은 클래스를 명시적으로 작성하지 않고 익명의 클래스가 만들어지는 방식

 

@@ 자바에서 람다식은 함수형 인터페이스를 구현한 객체(익명의 클래스)로 다루어

       람다식을 인터페이스 타입의 변수에 치환 가능!!


 

람다식을 이용한 다양한 예제

 

 

인자 x, y를 받아들여 x+y를 리턴하는 람다식 만들기

1) LambdaEx.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package practice;
 
//인자 x, y를 받아들여 x+y를 리턴하는 람다식 만들기
//함수형 인터페이스
@FunctionalInterface
interface MyFunction {
    int calc(int x, int y);
}
 
public class LambdaEx {
    
    public LambdaEx() {
//        MyFunction f = new MyFunction() {
//
//            @Override
//            public int calc(int x, int y) {
//                return x+y;
//            }
//            
//        };
        
        MyFunction f1 = (x, y) -> {return x+y;};
        System.out.println("f1의 결과: " + f1.calc(22100));
        
        MyFunction f2 = (x, y) -> {return x-y;};
        System.out.println("f2의 결과: " + f2.calc(999));
    }
 
    public static void main(String[] args) {
        new LambdaEx();
 
    }
 
}
 
cs

 

 

LambdaEx.java

 


인자 x를 받아들여 제곱을 리턴하는 람다식 만들기

2) LambdaEx.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package practice;
 
//인자 x를 받아들여 제곱을 리턴하는 람다식 만들기
//함수형 인터페이스
@FunctionalInterface
interface Myfunction2 {
    int calc(int x);
}
public class LambdaEx2 {
    
    public LambdaEx2() {
        //Myfunction2 fsquare = (x) -> {return x*x;};
        Myfunction2 fsquare = (x) -> {return x*x;};
        System.out.println("fsquare의 결과: "+fsquare.calc(5));
    }
    public static void main(String[] args) {
        new LambdaEx2();
    }
 
}
 
cs

 

LambdaEx2.java

 


//매개변수가 없는 람다식 만들기

3) LambdaEx3.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package practice;
 
//매개변수가 없는 람다식 만들기
//함수형 인터페이스
@FunctionalInterface
interface MyFunction3 {
    void print();
}
public class LambdaEx3 {
 
    
    public LambdaEx3() {
        MyFunction3 fprint = () -> {System.out.println("Yoon's Dev");};
        fprint.print();
    }
    public static void main(String[] args) {
        new LambdaEx3();
    }
 
}
 
cs

 

 

LambdaEx3.java

 


//메서드의 인자로 람다식 전달

4) LambdaEx4.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package practice;
 
//메소드의 인자로 람다식 전달
//함수형 인터페이스
@FunctionalInterface
interface MyFunction4 {
    int calc(int x, int y);
}
 
public class LambdaEx4 {
    //메소드 정의 (메소드의 인자로 람다식 전달)
    
    static void printMultiply(int x, int y, MyFunction4 f) {
        System.out.println("실행 결과: " + f.calc(x, y));
    }
    public LambdaEx4() {
        printMultiply(100100, (x, y) -> {return x * y;});
    }
 
    public static void main(String[] args) {
        new LambdaEx4();
 
    }
 
}
 
cs

 

lambdaEx4.java

 


//제네릭을 이용한 함수형 인터페이스

5) lambdaEx5.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package practice;
 
//제네릭을 이용한 함수형 인터페이스
@FunctionalInterface
interface MyFunction5<T>{
    void println(T x);
}
 
public class lambdaEx5 {
 
    public lambdaEx5() {
        MyFunction5<String> f1 = x -> {System.out.println(x.toString());};
        f1.println("String Generic 사용 람다식");
        f1.println("Yoon's Dev");
        
        MyFunction5<Integer> f2 = x -> {System.out.println(x.toString());};
        f2.println(Integer.valueOf(100));
    }
    public static void main(String[] args) {
        new lambdaEx5();
    }
 
}
 
cs

 

lambdaEx5.java

 

 [출처] https://yooniron.tistory.com/14

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
161 [Java 자료구조] JPA와 Spring Data JPA의 차이 file 졸리운_곰 2022.09.09 287
160 [java 자료구조] 하이버네이트 쉽게 입문하기 (기초)-환경설정,입력조회 개발 file 졸리운_곰 2022.09.09 251
159 [Java 자료구조] JPA, Hibernate, 그리고 Spring Data JPA의 차이점 졸리운_곰 2022.09.09 303
158 [Java][MyBatisc] myBatis에서 null과 nullString을 체크할 때 졸리운_곰 2021.09.13 242
157 [MongoDB/Java] MongoDB에 JSON 형식 데이터 삽입하기 file 졸리운_곰 2021.07.13 233
156 [Java, MongoDB] mongodb java driver 3.0: how to store JSON document 졸리운_곰 2021.07.13 208
155 [Java 자료구조] [Java] 문자열의 첫 글자 제거 졸리운_곰 2021.05.24 642
154 [Java 자료구조] [java] 특정 문자열 사이의 문자열 추출하기, 정규식 졸리운_곰 2021.05.24 2063
153 [Java 자료구조] [JAVA] Java언어로 JSON 생성, 파싱 예제 file 졸리운_곰 2021.05.17 189
152 [Java 자료구조] [Java] Immutable Class (불변 클래스) file 졸리운_곰 2021.03.07 224
151 [Java 자료구조] 불변 객체란? Java Immutable Object file 졸리운_곰 2021.03.07 185
150 [Java 자료구조] [Java] Immutable Object(불변객체) 졸리운_곰 2021.03.07 260
149 [java 자료구조] Oracle + Mybatis 환경에서의 Date 다루기 졸리운_곰 2021.02.25 236
148 Java JSON library Jackson Date Date Json 시리얼라이즈/디씨리얼라이즈 file 졸리운_곰 2021.02.25 190
147 [Java, JSON, jackson] Ignoring new fields on JSON objects using Jackson 졸리운_곰 2021.02.19 213
146 [Java] [Jackson] JsonInclude 속성에 대해 알아보자. 졸리운_곰 2021.02.03 710
145 [java] [jackson] Map - JSON간 변환 졸리운_곰 2021.02.02 337
144 [java] [자료구조] Remove null values from json using jackson 졸리운_곰 2021.02.02 271
143 자바 인코딩 관련 문제 종합 정리 file 졸리운_곰 2021.01.29 254
142 [Java 디자인패턴] [JAVA 디자인 패턴] static을 응용한 싱글톤 패턴(Singleton Pattern) 구현 졸리운_곰 2021.01.22 158
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED