[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(22, 100));
        
        MyFunction f2 = (x, y) -> {return x-y;};
        System.out.println("f2의 결과: " + f2.calc(99, 9));
    }
 
    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(100, 100, (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

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
82 [Java 일반] Public static void main(String[] args)는 죽었다 | GeekNews 졸리운_곰 2025.09.23 141
81 [Java 일반] Java - Thread.join() 소개, 쓰레드 종료 대기 졸리운_곰 2024.05.01 236
80 [java 일반] Runnable을 이용한 Thread 생성 방법들 졸리운_곰 2024.05.01 236
79 [JAVA] THREAD에서 데이터 반환(폴링, 콜백) - RECEIVE DATA BY USING THREAD POLLING, CALLBACK 졸리운_곰 2024.05.01 256
78 [Java 일반] 07-06 함수형 프로그래밍 졸리운_곰 2023.09.04 390
» [Java 일반] [JAVA] JAVA의 람다식 사용법 및 다양한 작성 예제 file 졸리운_곰 2023.09.04 332
76 [Java 언어] [Java] 람다식(Lambda Expressions) 사용법 및 예제 졸리운_곰 2023.09.04 297
75 [Java][jupyter notebook][!java] 주피터 노트북에서 자바 실행 환경구축. java on jupyter notebook file 졸리운_곰 2023.08.24 256
74 [java maven] jar 파일 의존성 한번에 다운로드 maven 사용 졸리운_곰 2023.08.18 312
73 [Java] 효율적인 JUnit 사용 방법과 유용한 팁 file 졸리운_곰 2022.10.20 291
72 [Java] Java Console Input and Output Examples 졸리운_곰 2021.11.07 406
71 [Java] \ 문자 빠구기 : replaceAll 사용시 특수문자 졸리운_곰 2021.07.13 279
70 이클립스에서 java 버전 변경 file 졸리운_곰 2021.04.29 312
69 JAVA) 예외처리(throw , throws) file 졸리운_곰 2021.01.24 213
68 예외처리 (throwable, exception, error, throws) file 졸리운_곰 2021.01.21 255
67 [Java] 자바 extends, implements 차이 file 졸리운_곰 2020.12.10 210
66 Maven 배포시 Local Jar 파일과 함께 하기! file 졸리운_곰 2020.10.06 164
65 How to add a local lib directory to Maven 졸리운_곰 2020.10.06 190
64 [Maven] 외부 jar 의존성 추가, war build 시 외부 jar 포함시키기 졸리운_곰 2020.10.05 396
63 Spring Boot 프로젝트에 외부 라이브러리(jar) 추가하기 졸리운_곰 2020.10.05 961
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED