저번주에 머때매 바빴는지는 모르겠는데, 암튼 바빴다..
한주를 놓치니까 밀린 공부들이 너무 많고ㅠ.ㅠ 계획표를 작성했는데, 절반 이상을 수행하지 못한 걸 보니 현타도 뽝
이번주부터 다시 파이팅해보자!
이번에 이야기해 볼 람다식은 처음에는 수학 공식 같아서 친근하고 쉬워보였는데, 활용되고 응용되는 부분에서 조금 띠용했다.
관련해서 공부하다보니 내가 배열에 조금 약한 걸 깨달아버린..
람다식은 함수를 익명으로 정의하는 방식으로, 간결하게 함수를 표현할 수 있는 형태의 코드이다.
(매개변수) -> {실행문;} //람다식
간단하고 간결하게 함수를 표현할 수 있는것이 특징이다.
람다식의 기본코드는 앞에서 말한 것과 같지만, 생략 가능한 표현식도 있다.
//기본형태, 매개변수의 형식은 컴파일러가 추론할 수 있기 때문에 생략한다.
(x, y) -> {return x + y;}
//매개변수가 하나인 경우 자료형과 괄호 생략 가능.
x -> {return x + y;}
//실행문이 한 문장인 경우 중괄호와 return키워드 생략 가능.
x -> x + y;
람다식은 함수형 인터페이스를 구현하는데 주로 사용된다. 함수형 인터페이스란? 단 하나의 추상 메서드를 가지는 인터페이스!
람다식을 사용하면 인터페이스의 메서드를 간단하게 구현할 수 있는데, 예시로 Runnable 인터페이스의 run 메서드를 람다식으로 구현해보자.
// 기존의 익명 내부 클래스를 이용한 인터페이스 구현
Runnable runnable1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello, World!");
}
};
// 람다식을 이용한 인터페이스 구현
Runnable runnable = () -> {System.out.println("Hello, lambda!");};
람다식은 자바에서 함수형 프로그래밍을 지원하기 위한 기능이라고 할 수 있다.
함수를 변수에 저장하거나, 함수를 매개변수로 전달하거나, 함수를 반환하는 등 람다식은 함수를 변수처럼 사용한다.
예시를 통해서 알아보자면,
// 리스트의 각 요소를 출력하는 예시 (기존 방식)
List<String> list = Arrays.asList("apple", "banana", "cherry");
list.forEach(new Consumer<String>() { //forEach는 Stream의 최종연산으로 Stream에서 람다식을 많이 활용한다.
@Override
public void accept(String s) {
System.out.println(s);
}
});
// 리스트의 각 요소를 출력하는 예시 (람다식 사용)
List<String> list = Arrays.asList("apple", "banana", "cherry");
list.forEach(s -> System.out.println(s));
forEach 메서드에 람다식을 전달인자로 전달하여 각 요소를 출력해보았다.
어디에서 주로 사용되는지 궁금하였는데, 강의 뒷편에서 이어지는 Stream에서 주로 활용하는 것을 알게 되었다.
개인적으로 찾아본 결과 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어진다고 하여서, 사용성을 판단하여서 사용하는게 좋을 듯 하다.