본문 바로가기

JAVA

[Java] 익명 클래스란?

익명 클래스

이름이 없는 클래스를 익명 클래스라고 한다. 보통 일회성으로 사용되는 클래스를 정의할 때 사용되며, 별도의 클래스 파일을 만들지 않고 즉석에 인스턴스를 생성할 때 주로 사용된다.

 

 


 

익명 클래스 활용

  • 클래스 이름을 따로 만들 필요 없이 일시적으로 클래스 구현이 필요한 경우
  • 이벤트 처리, 콜백, 스레드 구현 등 간단한 작업에 자주 사용된다.

 


 

문법 구조

public interface Runnable() {
    public void run();
}

Runnable myRunnable = new Runnable() {		// 추상 클래스 or 인터페이스
    @Override
    public void run() {
        System.out.println("달린다.);
    };
};

인터페이스는 추상적이라 new 키워드를 통해 직접 객체를 생성 ❌, 하지만 익명 클래스는 new 키워드를 사용하고 있다.

🔍 그 이유는 익명 클래스가 즉석에서 자식 클래스를 생성하기 때문이다. 즉, 객체를 직접 생성하는 것처럼 보이지만, 사실은 인터페이스를 구현한 무명 클래스의 인스턴스를 생성하는 것이다.

 

 


 

단점

별도의 파일이 존재하지 않고 익명 클래스를 사용하는 곳에서 오버라이딩하여 구현해야하므로 코드가 길어질 수 있다. (가독성 ↓)

 

 


 

사용 예제

더보기

Main

package practice;

public class Main {
    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                System.out.println("익명 클래스 실행!");
            }
        };

        r.run();
    }
}

 

Runnable

package practice;

public interface Runnable {
    public void run();
}

익명 클래스는 일반적으로 하나의 추상 메서드만 존재하는 인터페이스를 사용한다.

여러 추상 메서드가 존재하는 인터페이스를 사용할 수는 있다.

 


 

내부적 처리 과정

더보기

Main

package practice;

public class Main {
    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                System.out.println("익명 클래스 실행!");
            }
        };

        r.run();
    }
}

 

Runnable

package practice;

public interface Runnable {
    public void run();
}

이렇게 실행을 하면

 

더보기
더보기

Main

package practice;

public class Main {
    public static void main(String[] args) {
		Runnable r = new Main$1();  // 익명 클래스의 인스턴스를 생성
		r.run();
    }
}

 

Main$1

// 실제로 존재하지 않지만, 개념적으로 이렇다는 의미
class Main$1 implements Runnable {
    public void run() {
        System.out.println("익명 클래스 실행!");
    }
}

 

Runnable

package practice;

public interface Runnable {
    public void run();
}

컴파일러가

1. Runnable을 구현한 이름 없는 클래스를 자동으로 생성 (Main$1.class)

2. 그 클래스의 객체를 생성해서 r 에 할당한다.

 

 

 

 

다음으로

람다(Lambda)를 사용하면, 익명 클래스의 과정을 좀 더 간결하게 표현할 수 있다.

 

 

 

 

 

https://kimyongjun0129.tistory.com/106

 

[Java] 람다(Lamda)란?

람다(Lamda)익명 클래스를 간단하게 표현하는 방식이다. 즉, 익명 클래스의 메서드를 코드 블록으로 만들어서 변수에 넘기거나 인자로 전달 할 수 있게 해주는 기능이다. 람다 문법Calculator c = (a, b

kimyongjun0129.tistory.com

 

'JAVA' 카테고리의 다른 글

[Java] Lv_1 계산기 프로젝트  (0) 2025.04.17
[Java] 스트림(Stream)  (0) 2025.04.17
[Java] 람다(Lamda)  (0) 2025.04.17
[Java] 추상 클래스(abstract class)란?  (0) 2025.04.16
[Java] 오버라이딩(overriding)이란?  (0) 2025.04.16