반응형
이번 포스트에서는 익명 클래스에 대해서 알아보자
📌 서론
Java의 익명 클래스는 주로 단순한 인터페이스 구현이나 추상 클래스 확장에 사용되는데, 이를 잘 활용하면 코드를 더 간결하고 명확하게 만들 수 있어.
1. 익명 클래스란?
- Java에서 익명 클래스는 매우 특별한 종류의 클래스로, 그 이름이 없고 선언과 동시에 객체가 생성된다. 이러한 클래스들은 특정한 상황, 특히 인터페이스의 간단한 구현이나 추상 클래스를 확장하는 경우에 자주 사용된다.
- 익명 클래스는 일반적인 클래스 선언 방법과 다르게, 그 자체로 구현과 인스턴스화가 결합된 형태를 취한다. 이것은 Java의 다형성과 더욱 동적인 코딩 스타일을 가능하게 하는 강력한 기능이다.
2. 익명 클래스의 특징
이름 없음
- 익명 클래스의 가장 큰 특징은 바로 그 이름이 없다는 것이다. 이 클래스들은 특정한 위치에서 직접적으로 선언되며, 이와 동시에 객체가 인스턴스화된다. 이렇게 이름이 없는 특성 때문에, 익명 클래스는 바로 그 자리에서 정의되고 사용된다.
일회성 사용
- 익명 클래스는 주로 한 번만 사용되는 경우에 적합하다. 즉, 재사용이 필요 없는 특정 상황이나 동작을 구현하는 데에 주로 사용된다. 이는 코드를 더욱 모듈화하고 간결하게 만드는 데 도움이 된다.
간결성
- 익명 클래스를 사용하면 복잡한 클래스를 별도로 선언할 필요 없이 필요한 구현 부분만을 직접 작성할 수 있다. 이는 코드를 더욱 간결하고 읽기 쉽게 만들며, 불필요한 클래스 선언을 줄여준다.
3. 익명 클래스의 장점
간결성
- 익명 클래스의 가장 큰 장점 중 하나는 간결성이다. 이는 복잡한 클래스를 별도로 선언할 필요 없이, 필요한 구현 부분만 직접 작성할 수 있음을 의미한다. 예를 들어, 리스너 인터페이스를 구현할 때, 한 번만 사용되는 메소드를 가진 별도의 클래스를 만드는 대신, 익명 클래스를 사용하여 코드를 간단하고 직관적으로 만들 수 있다. 이는 코드의 양을 줄이고, 의도를 더 명확하게 전달하는 데 도움이 된다.
즉시 사용 가능
- 익명 클래스는 선언과 동시에 인스턴스화되므로, 작성 즉시 사용할 수 있다. 이는 특히 이벤트 처리나 콜백 메소드 구현 시 매우 유용하다. 이러한 특성은 개발 속도를 높이고, 더 빠르게 동적인 동작을 구현할 수 있게 해준다.
4. 익명 클래스의 단점
재사용성 부족
- 익명 클래스의 가장 큰 단점 중 하나는 재사용성이 부족하다는 것이다. 익명 클래스는 이름이 없기 때문에, 한 번 선언되면 그 위치에서만 사용할 수 있으며, 다른 곳에서 다시 사용하기 어렵다. 따라서, 같은 기능을 여러 곳에서 사용해야 할 경우, 각 위치마다 익명 클래스를 다시 작성해야 하는 번거로움이 있다.
가독성 저하
- 복잡한 로직이나 긴 구현이 필요한 경우, 익명 클래스는 코드의 가독성을 저하시킬 수 있다. 익명 클래스 내부에 긴 코드 블록이나 복잡한 로직이 포함되면, 코드를 이해하고 유지보수하는 데 어려움이 생길 수 있다. 따라서, 익명 클래스를 사용할 때는 간단하고 명확한 로직에 제한하는 것이 좋다.
📌 결론
익명 클래스는 Java에서 강력하고 유용한 도구이지만, 그 사용은 주의 깊게 고려되어야 한다. 간결하고 한 번만 사용되는 경우에는 매우 효과적이지만, 재사용이 필요하거나 복잡한 로직을 구현해야 할 때는 다른 대안을 고려하는 것이 좋다. 이를 통해, 코드의 유지보수성과 가독성을 보장하며, 효율적인 프로그래밍을 할 수 있다.
5. 익명 클래스: Runnable 인터페이스 구현
아래 예시에서는 Runnable 인터페이스를 익명 클래스로 구현한다.
- Java에서 Runnable 인터페이스는 단일 메소드 run을 가지고 있는데, 이는 쓰레드에 의해 실행되는 코드를 정의한다. 익명 클래스를 사용하여 Runnable 인터페이스를 구현하면, 별도의 Runnable 구현 클래스를 작성하지 않고도 쓰레드의 동작을 정의할 수 있다.
- 이 예시에서 익명 클래스는 Runnable 인터페이스의 run 메소드를 오버라이드하여 구현한다. 이렇게 하면, 쓰레드가 시작될 때 run 메소드 내의 코드가 실행된다. 이 방법은 짧은 실행 코드를 가진 쓰레드를 생성할 때 특히 유용하다.
public class AnonymousExample {
public static void main(String[] args) {
// Runnable 인터페이스의 익명 클래스 구현
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("익명 클래스를 사용한 Runnable 실행!");
}
};
// 새로운 쓰레드에서 task 실행
new Thread(task).start();
}
}
6. 익명 클래스: 추상 클래스 확장
추상 클래스 확장을 해보자
- 익명 클래스는 추상 클래스를 확장하여 특정 메소드를 구현하는 데에도 사용된다. 이 방법은 추상 클래스 내의 모든 추상 메소드를 구현할 필요가 있을 때 유용하다.
- 이 예시에서는 AbstractGreeting이라는 추상 클래스가 정의되어 있으며, greet 메소드를 추상 메소드로 가지고 있다. 익명 클래스는 이 greet 메소드를 구현하고, main 메소드 내에서 이를 호출한다. 이 방법은 복잡한 추상 클래스의 일부 기능만 필요한 경우에 유용하게 사용될 수 있다.
abstract class AbstractGreeting {
abstract void greet();
}
public class AbstractExample {
public static void main(String[] args) {
// 추상 클래스 AbstractGreeting의 익명 클래스 확장
AbstractGreeting greeting = new AbstractGreeting() {
@Override
void greet() {
System.out.println("추상 클래스 확장!");
}
};
// 익명 클래스 내에서 구현된 greet 메소드 호출
greeting.greet();
}
}
반응형
'JAVA' 카테고리의 다른 글
[Java] 동시성과 병렬 처리 part2: 함정, 고급 패턴, 성능 최적화 (1) | 2023.11.01 |
---|---|
[Java] 동시성과 병렬 처리 part1 (1) | 2023.10.31 |
[Java] Stream: mapToInt 함수로 점수 합산하기 (0) | 2023.09.27 |
[Java] 예제로 이해하는 자바 스트림(stream) (0) | 2023.09.27 |
[Java] ObjectMapper란 무엇인가? (0) | 2023.08.16 |