이야기박스
Effective java 3/E - 람다 & 스트림 (item 42~48) 본문
반응형
Item 42. 익명 클래스보다는 람다를 사용하라
자바 컴파일러의 타입 추론은 제네릭 --> 이걸 잘 못쓰면 람다에서 타입 추론이 안됨
==> 제네릭 중요하다
람다 쓸때는 코드는 간결하게
람다 세 줄 넘지 말자 (저자)
람다는 함수형 인터페이스에서만 사용됨
추상 클래스의 인스턴스만들 때, 람다 사용 불가 --> 익명 클래스 사용해야 함
public class Driver {
@Test
public void abstractAnonymousDriver() {
System.out.println(new TestAbstract<String>() {
@Override
public String testAbstractMethod() {
return "testAbstract";
}
});
}
@Test
public void abstractLambdaDriver() {
TestAbstract<String> testAbstract = () -> "testAbstract";
}
@Test
public void interfaceLambdaDriver() {
TestInterface<String> testInterface = () -> "testInterface";
System.out.println(testInterface.testInterfaceMethod());
}
}
람다는 자신을 참조할 수 없음
--> this는 바깥 클래스를 나타냄
* 람다의 변수 사용
--> 클래스 변수는 제약 없이 사용 가능
--> 로컬 변수는 final로 값 변경 불가
람다 & 익명 클래스 모두 직렬화는 지양하자 --> 직렬화 해야 한다면 private 정적 중첩 클래스를 사용하자
Item 43. 람다보다는 메서드 참조를 사용하라
Integer::sum
클래스 이름이 너무 길면, 람다가 더 편할수도...
==> 결국 케바케
* 제네릭 람다식 문법은 없음
Item 44. 표준 함수형 인터페이스를 사용하라
함수형 인터페이스
Operator
Predicate
Function
Supplier
Consumer
직접 만든 함수형 인터페이스 --> @FunctionalInterface 사용할 것
다중 정의된 것에서는 확실하게 해줘야 함
--> 예시) ExecutorServie.submit( callable / runnable )
==> 이름 다르게 하자 overloading 하지 맙시다
Item 45. 스트림은 주의해서 사용하라
스트림은 종단연산 수행할 때, 그때만 메모리만 사용
스트림 사용 vs 반복문은 --> 알아서 잘 판단
Item 46. 스트림에서는 부작용 없는 함수를 사용하라
전체 계산 과정을 변환 과정으로 재구성
forEach --> 계산결과를 보고하는데만 사용합시다
Item 47. 반환 타입으로는 스트림보다 컬렉션이 낫다
Item 48. 스트림 병렬화는 주의해서 적용하라
반응형
'Programming Language > JAVA' 카테고리의 다른 글
Effective java 3/E - 일반적인 프로그래밍 원칙 (item 57~68) (0) | 2018.12.27 |
---|---|
Effective java 3/E - 메서드 (item 49~56) (0) | 2018.12.20 |
Effective java 3/E - 열거타입 & 어노테이션 (item 34~41) (0) | 2018.12.13 |
Effective java 3/E - 제네릭 (item 26~33) (1) | 2018.12.05 |
Effective java 3/E - item 15~25 (0) | 2018.11.29 |