익명 내부 클래스
- 클래스의 정의와 함께 인스턴스를 생성하는 방법 중 하나.
- 주로 인터페이스나 추상 클래스의 인스턴스를 만들어 사용할 때 유용하게 쓰인다
interface MyInterface {
void myMethod();
}
public class Main {
public static void main(String[] args) {
// 익명 내부 클래스를 사용한 MyInterface의 인스턴스 생성
MyInterface myInterface = new MyInterface() {
@Override
public void myMethod() {
System.out.println("Hello from myMethod!");
}
};
// 익명 내부 클래스의 메서드 호출
myInterface.myMethod();
}
}
추상 메소드인 myMethod 를 가진 인터페이스 MyInterface 를 정의,
클래스 Main 에서 익명 내부 클래스를 사용하여 MyInterface 인터페이스의 추상 메소드( myMethod )를 생성하고 구현한 예시코드
익명 내부 클래스를 사용하면 인터페이스나 추상 클래스의 인스턴스를 생성하면서 동시에 필요한 메소드를 구현할 수 있다
익명 내부 클래스를 사용했을 때 장점
간결성과 편의성 : 익명 내부 클래스를 사용하면 클래스의 정의와 인스턴스화를 한 줄로 처리할 수 있다. 이로 인해서 코드가 간결해짐
// 익명 내부 클래스를 사용하지 않을 경우
Runnable runnable = new MyRunnable();
// 익명 내부 클래스를 사용할 경우
Runnable runnable = new Runnable() {
public void run() {
// 구현 내용
}
};
인터페이스의 즉석 구현 : 주로 인터페이스나 추상 클래스의 메소드를 직접 구현하는 데 사용된다. 필요한 메소드만을 오버라이드하고, 불필요한 부분은 무시할 수 있다
// Comparator를 익명 내부 클래스로 구현
Arrays.sort(array, new Comparator<Integer>() {
public int compare(Integer a, Integer b) {
// 비교 로직
}
});
지역 변수 접근 : 익명 내부 클래스는 외부 범위의 지역 변수에 접근할 수 있다
// Java 7 이전에 지역 변수를 사용하는 익명 내부 클래스
final int localVar = 10;
Runnable runnable = new Runnable() {
public void run() {
System.out.println(localVar);
}
};
Java 8부터는 람다식이 나와서 익명 내부 클래스보다 더 간결하고 가독성이 좋아 람다식을 더 많이 사용한다
람다식
람다식은 함수형 인터페이스를 구현하기 위한 간결한 방법으로 사용된다
함수형 인터페이스 : 하나의 추상 메소드를 갖는 인터페이스
다시말하면 람다식은 추상 메소드가 한 개인 인터페이스에만 작성할 수 있다
람다식의 구조
(매개변수들) -> { 실행문들 }
매개변수들: 람다식이 사용할 매개변수
->: 람다 연산자로, 매개변수들과 실행문들을 구분하는 역할
{ 실행문들 }: 람다식이 수행할 코드 블록
람다식 예시
// 인터페이스 선언
interface MyFunction {
int apply(int x);
}
public class LambdaExample {
public static void main(String[] args) {
// 람다식 사용
MyFunction myFunction = (x) -> x * 2;
// 메서드 호출
int result = myFunction.apply(5);
System.out.println(result); // 출력: 10
}
}
'Java' 카테고리의 다른 글
Java_스레드와 동기화 (1) | 2023.12.04 |
---|---|
Java_네트워크, I/O (0) | 2023.11.29 |
Java_I/O(입출력) (1) | 2023.11.27 |
Java_객체의 직렬화와 역직렬화 (1) | 2023.11.26 |
Java_예외처리 (0) | 2023.11.22 |