[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

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
18 [java 인공지능] Spring AI 로 ChatGPT API 만들기 졸리운_곰 2024.12.30 214
17 [java 인공지능] 오라클, 자바 머신러닝 라이브러리 ‘트리뷰오’ 오픈소스로 공개 졸리운_곰 2023.08.27 296
16 [java 인공지능] 자바를 위한 머신 러닝 라이브러리 졸리운_곰 2023.08.27 360
15 [Java 인공지능] 오라클, 자바 머신러닝 라이브러리 ‘트리뷰오’ 오픈소스로 공개 file 졸리운_곰 2023.08.13 357
14 [java 인공지능] [java] 라이프 게임 (life game) file 졸리운_곰 2021.10.19 337
13 How to use Weka in your Java code 졸리운_곰 2020.02.01 307
12 weka and java eclipse example : A Simple Machine Learning Example in Java file 졸리운_곰 2020.01.31 362
11 머신러닝? weka file 졸리운_곰 2020.01.31 357
10 [Weka] Weka를 이용한 Iris 데이터 머신러닝 file 졸리운_곰 2020.01.30 363
9 [강좌] WEKA 사용법 (간단한 분류, 의사결정트리 분석 설명) file 졸리운_곰 2020.01.30 343
8 [JESS] Jess , 이클립스 연동 file 졸리운_곰 2019.12.22 215
7 Jess 간단한 문법 요약 졸리운_곰 2019.12.22 277
6 Jess 6.1 다운로드 friedman-hill_src_1_jess_se file 졸리운_곰 2019.12.22 184
5 java artificial intelligence Rule Engine Jess Working Memory 졸리운_곰 2019.12.22 300
4 Defining Functions in Jess 졸리운_곰 2019.12.22 389
3 Jess Language Basics 졸리운_곰 2019.12.22 272
2 Embedding Jess in a Java Application 졸리운_곰 2019.12.22 298
1 다섯개의 탑 자바로 머신러닝 라이브러리 Top 5 machine learning libraries for Java file 졸리운_곰 2017.08.22 388
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED