[Java] 람다식(Lambda Expressions) -> 사용법 & 예제
- Language/Java
- 2018. 11. 28.
람다식이란?
람다식이란 "식별자없이 실행가능한 함수"
함수인데 함수를 따로 만들지 않고 코드한줄에 함수를 써서 그것을 호출하는 방식이라고 생각하시면 되겠습니다.
함수적 프로그래밍을 위해 자바 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);
}
});
'Language > Java' 카테고리의 다른 글
[Java] 자바 네트워크에 대한 이해 (0) | 2018.12.02 |
---|---|
[Java] 삼항연산자 사용법 & 예제 (2) | 2018.12.01 |
[Java] Swing으로 만드는 미니언 성적관리프로그램 예제 (4) | 2018.11.26 |
[Java] Swing 특징 및 구조 & 사용법 총정리 (1) | 2018.11.25 |