람다식(Lambda Expression)이란 함수를 하나의 식(expression)으로 표현한 것이다. 함수를 람다식으로 표현하면 메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수(Anonymous Function)의 한 종류라고 볼 수 있다. (이름이 필요없는 함수)
- 함수형 인터페이스에 대해서만 선언 가능
- 인터페이스내에 메서드가 1개 있어야 한다.
- 람다식 구현방법
인터페이스자료형 변수명 = (변수명1, 변수명2, ...) -> {
인터페이스가 갖고 있는 메서드를 호출했을 때 실행할 코드들
return 반환형에 맞는 값; (void라면 필요x)
};
장점
① 불필요한 코드를 줄일 수 있다.
② 가독성을 높인다.
③ 메서드를 변수처럼 다루는 것이 가능해진다.
④ 지연연산 수행이 가능하다.(람다식을 사용하면, 클래스나 메서드를 만들 필요가 없이 필요한 순간에 1회용으로 익명함수를 정의하고 바로 호출하면 되므로 클래스의 초기화가 필요없는 것이다. 즉, 항상 초기화를 하는 것이 아니라 필요할 때만 초기화를 하는 것)
⑤ 병렬 처리가 가능하다.
단점
① 람다를 사용해서 만든 익명함수는 재사용 불가
② 디버깅이 어렵다.
③ 람다를 남발하면 비슷한 함수가 중복 생성되어 코드가 지저분해질 수 있다.
1) 무반환, 무파람
public interface Inter1 {
public abstract void me1();
}
-------------------------------------------------------------
public class MainEx {
public static void main(String[] args) {
Inter1 i5 = () -> {
System.out.println("람다식으로 Inter1의 me1() 메서드 구현");
// cf) this: 자바스크립트에서는 람다식 내부를 this로 받기 위해 사용함.
};
i5.me1();
}
}
---------------------Console--------------------------------
람다식으로 Inter1의 me1() 메서드 구현
2) 유반환, 무파람
public interface Inter2 {
abstract int me2();
}
----------------------------------------------------------
public class MainEx {
public static void main(String[] args) {
Inter2 i6 = () -> {
System.out.println("반환형이 있음");
return 3;
};
int result = i6.me2();
System.out.println(result);
}
}
------------------Console--------------------------------
반환형이 있음
3
3) 무반환, 유파람
public interface Inter3 {
void me3(String msg); // public, abstract는 생략 가능(복습)
}
-----------------------------------------------------
public class MainEx {
public static void main(String[] args) {
Inter3 i3 = (msg1) -> { // 인터페이스의 매개변수와 다른 변수이므로
System.out.println(msg1); // 다르게 작성해도 됨.
};
i3.me3("abc");
}
}
-------------------Console----------------------------
abc
4) 유반환, 유파람
public interface Inter4 {
public abstract char me4(int a, int b);
}
----------------------------------------------------
public class MainEx {
public static void main(String[] args) {
Inter4 i4 = (c, d) ->{ // 여기서의 변수명 c, d는 인터페이스의 메서드의
System.out.println("유반환, 유파람"); // 매개변수와 달라도 된다.(다른존재)
System.out.println(c+d);
return 'a';
};
char result = i4.me4(4, 10);
System.out.println(result);
}
}
-------------------Console--------------------------
유반환, 유파람
14
a
'자바(java)' 카테고리의 다른 글
내부클래스(Inner Class) (0) | 2023.03.13 |
---|---|
Enum(Enumeration) (0) | 2023.03.10 |
DTO(Data Transfer Object) 클래스 (0) | 2023.03.09 |
인터페이스(Interface) (0) | 2023.03.09 |
Final(변수, 메서드, 클래스) (0) | 2023.03.09 |