목차
개인적으로 가독성이 좋은지 잘 모르겠어요.
개인적으로 람다가 정말 가독성이 좋은진 잘 모르겠다. 그렇다고 안쓴다는 얘기는 아니고, 쓰긴 쓴다. 다만 쓸 수 있다고 너무 아무대나 다 써버리면 읽기 편하다는 장점이 오히려 사라지는 것 같다. 코드가 짧다고 항상 가독성이 좋은건 아니다.
익명 클래스를 사용한 A보다는 람다를 사용한 B가 더 보기 편한게 맞다.
보기 편하긴 하지만 결국 아래처럼 좀 생소한 클래스에 써있다면 결국 까봐야 한다.
특히 생성자가 많다면 더 헷갈릴 것 같다. (물론 인텔리제이 기준 ctrl 누른상태로 클릭하면 해당 생성자로 바로 이동하긴 한다.)
아무튼 개인적으로 그렇다는거고, 코드가 더 짧아져서 어느 수준 이상의 실력이라면 보기 편한게 사실이다. 그러니 기본은 알아두자.
람다 기본
기본은 간단하다. 추상 메소드가 하나인 인터페이스라면 람다로 사용할 수 있다.
public interface LambdaPractice {
int sum(int a, int b);
}
public class Main {
public static void main(String[] args) throws Exception {
LambdaPractice lambdaPractice = (a, b) -> a + b;
System.out.println(lambdaPractice.sum(5, 6));
}
}
추상 메소드가 2개 이상이라면 에러난다.
추상 메소드가 1개여야 하므로 default 메소드나 static 메소드 같은건 상관없다.
public interface LambdaPractice {
int sum(int a, int b);
default int sub(int a, int b) {
return a-b;
}
static int mult(int a, int b) {
return a*b;
}
}
public class Main {
public static void main(String[] args) throws Exception {
LambdaPractice lambdaPractice = (a, b) -> a + b;
System.out.println(lambdaPractice.sum(5, 6));
}
}
@FunctionalInterface
어노테이션을 붙여주면 컴파일 타임에서 추상 메소드가 여러개라면 에러를 내준다. 그러므로 람다로 사용하고 싶다면 붙여주는게 좋다.
- 정상
- 2개 이상이면 에러
메소드 참조
어차피 이미 만들어져 있는 함수가 있다면 굳이 람다로 새로 구현할 필요도 없을꺼다. 그럼 아래처럼 해줄 수 있다. Integer의 sum 함수를 사용하겠다는 의미이다.
public class Main {
public static void main(String[] args) throws Exception {
LambdaPractice lambdaPractice = Integer::sum;
System.out.println(lambdaPractice.sum(5, 6));
}
}
'Development > Java' 카테고리의 다른 글
자바 Integer 캐싱에 대해 (Java IntegerCache, Autoboxing) (0) | 2024.02.27 |
---|---|
[객사오 정리] 1장. 협력하는 객체들의 공동체 (0) | 2023.04.26 |
자바에서 N개짜리 배열 생성은 O(N)이 걸린다. (C++, C 도 마찬가지) (2) | 2023.03.13 |
자바에서 문자열 합칠 때 '+' 연산을 쓰지 마세요! (StringBuilder, StringJoiner, String.join, StringBuffer) (0) | 2023.03.07 |
[이펙티브 자바 정리] 2장 - 객체 생성과 파괴 (2) | 2023.02.17 |
댓글