익명클래스를 쓰는 이유
public class Parent {
void whoAmI() {
System.out.println("저는 부모클래스입니다.");
}
}
class Child extends Parent {
@Override
void whoAmI() {
System.out.println("저는 자식클래스입니다.");
}
}
|
cs |
부모클래스를 상속받는 자식클래스는 따로 선언해서 사용한다.
그러니 자식클래스를 재사용하지 않고 한번쓰고 말것이라면 굳이 자식클래스를 따로 구현할 필요가 없다.
이럴때 실행클래스에서 바로 구현해서 사용하는법이 익명클래스이다.
private void calculateAnonymous() {
Calculate calculateAdd = new Calculate() {
@Override
public int operation(int a, int b) {
return a + b;
}
};
System.out.println(calculateAdd.operation(1, 2));
}
|
cs |
new()이후의 중괄호에 부모클래스의 메소드를 오버라이드해서 넣게되면
자식클래스를 만들필요없이 바로 사용가능하다.
람다식은 이렇게 작성된 익명클래스를 더욱 간략화할 수 있다.
private void calculateLambda() {
Calculate calculateAdd = (a, b) -> a + b;
System.out.println(calculateAdd.operation(1, 2));
}
|
cs |
람다식은 부모가 인터페이스여야하며, 딱 하나의 메소드만 선언되어 있어야 사용가능하다.
@FunctionalInterface
public interface Calculate {
int operation(int a, int b);
}
|
cs |
혼동을 피하기위해 람다식에 사용된 인터페이스에는 @FuntionalInterface 어노테이션을 붙인다.
메소드 참조
람다식구조에서 파라미터와 구현부의 값이 동일하다면, 파라미터를 생략하는 표현식을 사용가능하다.
DoubleUnaryOperator x;
x = (n) -> Math.abs(n);
이러한 람다식 구조에서 파라미터(n)과 구현부 Math.abs(n)의 (n)이 동일한 상황이라면
x = Math::abs;
이런식으로 작성가능하다.
'Java' 카테고리의 다른 글
Stream API (0) | 2022.03.02 |
---|---|
Optional 클래스 (0) | 2022.02.28 |
테스트 범위와 종류 (0) | 2022.02.22 |
테스트케이스의 대역 (0) | 2022.02.21 |
TDD방법론 - 암호검사기4(WEAK CASE) (0) | 2022.02.13 |