요즘 JDA로 디스코드 봇을 개발하고 있는데, 람다식이 많아서 이해하기 위해 공부를 했다.
일단 람다에 대해 알아보자.
람다란?
람다란 프로그래밍 언어에서 사용되는 개념으로 익명 함수를 지칭하는 용어이다.
현재 사용되는 람다의 근간은 수학이랑 기초 컴퓨터 과학 분야에서 쓰는 람다 대수라고 한다.
간단하게 말하면 수학에서 사용하는 함수를 단순하게 표현하는 방법이다.
익명함수
말 그대로 이름이 없는 함수이다. 익명 함수들은 공통으로 일급 객체라는 특징을 가지고 있다.
- 일급 객체 : 일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 개체
이제 기본적인 람다의 개념을 알았으니 사용법을 알아보자.
역시 이번에도 말로 설명하는 것보단 먼저 보는 것이 좋을 것이다.
public class Ramda {
@FunctionalInterface
public interface Calc{
public int miner(int fir,int sec);
}
public static void main(String[] args) {
Calc c = (first, second)-> first - second;
System.out.println(c.miner(1,4));
//결과 : - 3
}
}
위에서 보면 알다시피 @override 이런 부분은 한 줄로 간략화했다.
Calc c = (first, second) -> first - second 이 부분이 람다식이다.
추상 메소드의 인자 값을 익명 함수로 바로 넣고(first, scond) 이 부분,
두 익명 함수를 빼는 추상 메소드를 구현했다.
Calc c = (first, second) -> first - second 이 부분을 바꿔서 작성하면
Calc c = new Calc() {
@Override
public int miner(int fir, int sec) {
return fir - sec;
}
};
이런 식으로 작성이 된다.
이렇게 람다식을 쓰면 장점이 있는데
첫 번째가 코드가 간결해진다.
람다를 쓰면 불필요한 반복문을 삭제해 단순하게 표현하기 때문에 많이 짧아진다.
두 번째, 지연 연산 수행이다.
람다는 지연 연상을 수행함으로써 불필요한 연산을 최소화할 수 있다.
세 번째, 병렬 처리 기능이다.
멀티스레드를 활용하기에 병렬 처리가 가능하다.
물론 장점이 있으면 단점이 있는 법
첫 번째가 람다식은 호출이 까다롭다는 것이다.
두 번째는 람다 stream 사용하고 단순 반복문 사용 시 성능이 떨어진다.
세 번째, 불필요하게 많이 쓰면 오히려 가독성이 떨어진다.
이런 식으로 람다식에 대해 알아봤다.
람다식을 이해하려면 추상 메소드를 알아야 할 것이다.
나도 람다식을 이해하기 조금 어려웠는데 포스팅을 하면서 좀 써보니까 감이 잡힌다. 역시 모를 때는 무작정 써보는 것도 나쁘지 않은 것 같다.
다음번에는 먼저 올라와야 했지만 못 올라온 추상 메소드에 대해서 알아보겠다.
'언어 공부 > Java' 카테고리의 다른 글
[JAVA] Consumer 함수적 인터페이스 (0) | 2021.10.13 |
---|---|
[JAVA]추상클래스, 추상매소드 (0) | 2021.10.08 |
[JAVA] Replace(문자열 치환) 에 대하여 (0) | 2021.10.05 |
객체지향 프로그래밍 (0) | 2021.09.16 |
JAVA 메소드의 개념 (0) | 2021.09.14 |