일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- LV 0
- 알고리즘
- 머신러닝
- Kubernetes
- DevOps
- 깃
- 자료구조
- ubuntu
- 코테
- Python
- mysql
- git
- 우분투
- github
- Lv 2
- 인공지능
- Java
- 파이썬
- 정처기
- db
- 자바
- 리눅스
- 프로그래머스
- Ai
- Linux
- 쿠버네티스
- programmers
- 코딩테스트
- docker
- 데이터베이스
Archives
- Today
- Total
Myo-Kyeong Tech Blog
[ JAVA ] JAVA 익명 클래스(Anonymous Class) 본문
728x90
반응형
익명 클래스란?
- 이름 없이 한 번만 사용되는 클래스
- 클래스 선언과 객체의 생성이 동시에 이루어짐
- 보통 GUI 애플리케이션의 이벤트 리스너, 스레드 등 즉석에서 생성하는 데 사용
new className() {
// methods and fields
};
익명 클래스 사용
익명 클래스를 사용하면 클래스 선언을 생략하고 코드를 간결하게 만들 수 있다는 점이 가장 큰 장점인데요. 특히 한 번만 사용되는 이벤트 리스너 같은 경우에 매우 유용합니다. 또한, 익명 클래스는 해당 클래스가 사용되는 곳에 직접 코드를 작성하므로 코드를 읽는 사람이 이해하기 쉬운 장점을 가지고 있습니다.
[익명 클래스를 사용하지 않는 경우]
import java.awt.event.*;
import javax.swing.*;
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("Button clicked!");
}
}
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("Button Example");
JButton button = new JButton("Click Here");
MyActionListener listener = new MyActionListener();
button.addActionListener(listener);
// 나머지 코드
}
}
위 예시에서는 별도로 'MyActionListener 클래스를 정의하고, 이 클래스의 객체를 생성하여 버튼에 리스너로 추가하였습니다.
[익명 클래스를 사용하는 경우]
import java.awt.event.*;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("Button Example");
JButton button = new JButton("Click Here");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Button clicked!");
}
});
// 나머지 코드
}
}
익명 클래스를 사용하는 경우는 ActionListener 인터페이스를 구현한 별도의 클래스를 생성할 필요가 없습니다. 대신, 바로 버튼 액션 리스너로 익명 클래스를 추가하여 익명 클래스를 사용하지 않은 경우보다 훨씬 코드가 간결해진 것을 볼 수 있습니다.
익명 클래스 제한사항
- 생성자를 가질 수 없다 : 익명 클래스는 이름이 없으므로, 생성자를 가질 수 없습니다. 초기화를 위해 인스턴스 초기화 블럭을 사용할 수는 있지만, 생성자를 통한 초기화는 불가능합니다.
- 단일 상속만 가능합니다 : 익명 클래스는 오직 하나의 클래스를 상속하거나 하나의 인터페이스만 구현할 수 있습니다. 따라서, 한 번에 여러 인터페이스를 구현하거나 클래스를 상속하면서 인터페이스를 구현하는 것은 불가능합니다.
- 한 번만 사용 가능합니다 : 익명 클래스는 재사용이 불가능합니다. 동일한 익명클래스를 다른 곳에서 사용하려면 코드를 다시 작성해야 합니다.
- "this"는 익명 클래스 자체를 가리킵니다 : 익명 클래스 내에서 "this" 키워드를 사용하면, 익명 클래스 자체를 가리킵니다. 이는 익명 클래스가 정의된 매서드나 클래스를 가리키지 않음을 의미합니다.
- 비정적(static) 이너 클래스처럼 작동합니다 : 익명 클래스는 그것이 정의된 클래스의 비정적 필드와 메서드에 접근할 수 있지만, 정적 필드나 메서드에는 접근할 수 없습니다.
- 지역 변수에 대한 제한 : 익명 클래스에서 사용하는 지역 변수는 final이거나 effective final 이어야 합니다. 익명 클래스 내부에서 지역 변수가 변경될 수 없음을 의미합니다.
이러한 제한 사항 때문에, 복잡한 로직을 가진 클래스나 재사용이 필요한 클래스는 별도의 클래스로 선언하는 것이 바람직합니다. 익명 클래스는 일회성으로 사용되는 간단한 클래스에 대해 코드를 간결하게 만드는 데 주로 사용됩니다.
728x90
반응형
'Programming > Java' 카테고리의 다른 글
[ JAVA ] 클라이언트 요청 순차적 처리 - Stateful VS Stateless (0) | 2023.07.12 |
---|---|
[ JAVA ] JAVA 예외 처리 (Exception) - Try-Catch-Finally 문법, 예외 메시지와 스택 추적 (0) | 2023.07.10 |
[ JAVA ] FileInputStream 확장하여 DataInputStream 클래스 구현하기 ( java.io.DataInputStream ) (0) | 2023.06.29 |
[ JAVA ] JAVA 객체 지향 프로그래밍 개념 정리 - 오버로딩(Overloading) 과 오버라이딩(Overriding) (0) | 2023.06.16 |
[ JAVA ] JAVA IntStream 주요 메서드 정리 (0) | 2023.06.14 |