8. 익명 클래스와 람다식
2023. 9. 4. 21:31ㆍJava
익명 클래스 (Anonymous Class)
- 이름이 없는 클래스
- 이름이 기억되지 않아도 되고, 나중에 다시 불러지지 않는다는 의미를 내포
=> 한번만 사용되고 버려지는 객체
- new 생성자() { ... } : 생성자 뒤에 중괄호가 나오고 코드를 오버라이딩하여 보통 구현
package com.example;
public class CarExam {
public static void main(String[] args) {
//Car는 상속받고 싶은데 클래스는 만들고 싶지 않은 경우
//익명 클래스 : Car를 상속받고 있는 이름없는 객체의 인스턴스가 만들어진다.
Car c = new Car() {
@Override
public void a() {
System.out.println("이름없는 객체의 a()메소드 오버라이딩");
}
};
c.a();
}
}
* 익명 클래스를 왜 사용하는가?
1) 한번만 사용되고 버려질 클래스라면,
클래스를 정의하기보다 익명 클래스로 정의하고 메소드가 끝나면 삭제되도록 하는 것이 유지보수나 메모리 면에서 효율적
2) 클래스의 전체가 아니고 클래스의 일부만 사용하고 싶을 때,
필요한 메소드만 오버라이딩한다면 클래스 전체를 참조하는 것보다 익명 클래스의 사용이 가벼울 것이다.
* 주의점
익명 클래스를 사용할 때는 오버라이딩한 메소드만 외부에서 호출 가능하고,
익명 클래스 내 새로 정의한 메소드는 사용이 불가능하다.
=> 이유 : Car를 상속받는 익명 클래스이므로, Car에는 익명클래스에서 새로 정의한 메소드가 선언되어 있지 않기 때문!
람다식(Lambda Expression)
- 메소드를 하나의 식으로 표현한 것
public class MyRunnableMain2 {
public static void main(String[] args) {
RunnableExecute runnableExecute = new RunnableExecute();
// 1. 익명 클래스
//myRunnable이 재사용되지 않을 것 같을 때
//MyRunnable을 구현하고 있는 이름없는 객체를 생성하자마자 메소드에 넣어준 것
runnableExecute.execute(new MyRunnable() {
@Override
public void run() {
System.out.println("hello!!");
}
});
// 2. 람다식
runnableExecute.execute(() -> {
System.out.println("hello!!");
});
}
}
*람다식의 장단점
장점
- 코드를 간결하게 만들 수 있고 가독성이 높아진다.
- 메소드를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아진다.
- 병렬 처리가 용이하다.
단점
- 재사용이 불가하다
- 재사용할 수 없으므로 비슷한 함수 구현이 잦아질 수 있다.
- 재귀함수에는 적합하지 않다.
'Java' 카테고리의 다른 글
10. 예외처리와 enum (0) | 2023.09.10 |
---|---|
9. 컬렉션 프레임 워크와 제네릭 (0) | 2023.09.04 |
7. 자바 리플렉션 (Reflection) (0) | 2023.09.04 |
6. 불변 객체 (Immutable Object) & Final (0) | 2023.09.03 |
5. 추상클래스와 인터페이스 (0) | 2023.09.03 |