-
[Java] 람다식(Lambda Expressions)개발관련/Java 2024. 3. 27. 19:40
람다식(Lambda Expressions)
: "식별자 없이 실행가능한 함수" (함수인데 함수를 만들지 않고 코드 한줄에 써서 호출하는 방식)
지원 버전
: Java 8 이상
//람다식 구문 (매개변수, ...) -> {실행문 ...}
[장점]
1. 코드 간결화
2. 가독성 향상
3. 함수 생성 필요없기에 코딩구현시간이 절약됨
4. 병렬프로그래밍에 용이
[단점]
1. 함수생성 하지 않기에 재사용 어렵 (※무명함수는 재사용 불가)
2. 디버깅이 까다롭다
3. 람다를 남발하면 코드가 지저분해질 수 있음 (비슷한 함수 중복생성 주의)
4. 재귀로 만들경우 다소 부적합함
[예제]
/* 예제코드 예시를 위해 Person이라는 Class와 Say라는 Functional Interface를 만들었습니다. ※ Functional Interface란 함수가 하나만 존재하는 Interface를 의미합니다.*/ @FunctionalInterface interface Say{ int someting(int a,int b); } class Person{ public void hi(Say line) { int number = line.someting(3,4); System.out.println("Number is "+number); } } //람다식 사용X Person rin = new Person(); rin.hi(new Say() { public int someting(int a, int b) { System.out.println("My Name is Coding-Factory"); System.out.println("Nice to meet you"); System.out.println("parameter number is "+a+","+b); return 7; } }); //람다식 사용O Person rin = new Person(); rin.hi((a,b) ->{ System.out.println("This is Coding-Factory!"); System.out.println("Tank you Lamda"); System.out.println("parameter number is "+a+","+b); return 7; });
[람다식 사용 예시]
//사용예시 : 두개의 숫자 더하기 interface Compare{ public int compareTo(int a, int b); } public class Ramda2 { //람다식 문법 (매개변수 목록)->{실행문} public static void exec(Compare com) { int k = 10; int m = 20; int value = com.compareTo(k, m); System.out.println(value); } public static void main(String[] args) { exec((i,j)->{ return i+j; }); } }
//사용예시 : 두개의 숫자중 큰 수 찾기 import extendsss.main; public class Ramda3 { @FunctionalInterface//함수형 인터페이스 체크 어노테이션 public interface MyNumber{ int getMax(int num1, int num2); } public static void main(String[] args) { MyNumber max = (x,y)->(x>=y)? x:y; System.out.println(max.getMax(10, 30)); } }
//사용예시 : Runnable 인스턴스 생성 public class RunnableEx { public static void main(String[] args) { Runnable runnable = () -> { for (int i = 0; i < 30; i++) { System.out.println(i); } }; Thread thread = new Thread(runnable); thread.start(); } }
//사용예시 : Thread 호출 Thread thread = new Thread( () -> { for (int i = 0; i < 10; i++) { System.out.println(i); } });
출처 : https://coding-factory.tistory.com/entry/Java-람다식Lambda-Expressions-사용법-예제