람다식이란?
람다식이란 "식별자없이 실행가능한 함수"이다.
함수인데 함수를 따로 만들지 않고 코드한줄에 함수를 써서 그것을 호출하는 방식이라고 생각하시면 된다.
함수적 프로그래밍을 위해 자바 8부터 람다식(Lambda Expressions)을 지원하면서 기존의 코드 패턴이 많이 달라졌다.
람다식 사용법
(매개변수, ...) -> { 실행문 ... }
(매개변수, ...)는 오른쪽 중괄호 { } 블록을 실행하기 위해 필요한 값을 제공하는 역할을 한다. 매개 변수의 이름은 개발자가 자유롭게 지정할 수 있으며 인자타입도 명시하지 않아도 된다.-> 기호는 매개 변수를 이용해서 중괄호 { } 바디를 실행한다는 뜻으로 해석하면 됨.
예제
@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);
}
}
예를들기 위해 Person이라는 Class와 Say라는 Functional Interface를 만들었다.
※ Functional Interface란 함수가 하나만 존재하는 Interface를 의미함!
람다식 사용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;
});
람다식의 장단점
람다식 장점
1. 코드를 간결하게 만들 수 있다.
2. 코드가 간결하고 식에 개발자의 의도가 명확히 드러나므로 가독성이 향상된다.
3. 함수를 만드는 과정없이 한번에 처리할 수 있기에 코딩하는 시간이 줄어듦.
4. 병렬프로그래밍이 용이함.
람다식 단점
1. 람다를 사용하면서 만드는 무명함수는 재사용이 불가능하다.
2. 디버깅이 다소 까다롭더,
3. 람다를 남발하면 코드가 지저분해질 수 있다.
4. 재귀로 만들경우에는 다소 부적합한면이 있다.
람다식 간단예제
1. 두개의 숫자 더하기
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;
});
}
}
2. 두개의 숫자중 큰 수 찾기
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));
}
}
3. 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();
}
}
4. Thread 호출
Thread thread = new Thread( () -> {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
});
'공부 STUDY > JAVA' 카테고리의 다른 글
[JAVA] 사용자 정의 예외 클래스 구현하기 | 아이디 설정 조건에서 예외 발생에대한 클래스를 구현해보자! | 사용자 정의 예외 (0) | 2023.01.23 |
---|---|
[JAVA] 자바의 예외처리(Exception) | try-catch-finally 문, try-with-resource 문 (0) | 2023.01.23 |
[JAVA] 스트림(Stream)이란 무엇일까? (0) | 2023.01.23 |
[JAVA] 내부 클래스(inner class)와 익명 클래스(anonymous class)에대해 알아보자 (1) | 2023.01.21 |
[자바/ 자료구조] 컬렉션 프레임워크 공부 전, 자료구조를 간단히 정리해보자! (0) | 2023.01.21 |