익명 클래스

CosmoNumb·2024년 7월 20일

java

목록 보기
5/24

익명 클래스(Anonymous Class)는 이름이 없는 일회성 클래스로, 주로 인터페이스나 추상 클래스의 인스턴스를 생성하기 위해 사용됩니다. 익명 클래스는 특정 메서드 내에서 간단히 정의하고 사용할 수 있어, 간결하고 명확하게 특정 기능을 구현하는 데 유용합니다.

  • 익명 클래스와 인터페이스 구현
InterfaceType instance = new InterfaceType() {
    // 구현해야 할 메서드들
};

이러한 형태는 인터페이스나 추상 클래스를 직접 구현 또는 확장하여 인스턴스를 생성하는 방법입니다. 익명 클래스는 클래스 정의와 인스턴스 생성을 동시에 처리합니다.


코드 분석 및 익명 클래스 사용 이유

아래의 분석하고, 익명 클래스의 사용 이유를 설명하겠습니다.

코드 분석

package nested.anonymous;

import nested.local.Printer;

public class AnonymousOuter {

    private int outInstanceVar = 3;

    public void process(int paramVar) {

        int localVar = 1;

        // 익명 클래스 정의 및 인스턴스 생성
        Printer printer = new Printer() {
            int value = 0;

            @Override
            public void print() {
                System.out.println("value=" + value);
                System.out.println("localVar=" + localVar);
                System.out.println("paramVar=" + paramVar);
                System.out.println("outInstanceVar=" + outInstanceVar);
            }
        };

        // 익명 클래스의 메서드 호출
        printer.print();
        System.out.println("printer.class=" + printer.getClass());
    }

    public static void main(String[] args) {
        AnonymousOuter main = new AnonymousOuter();
        main.process(2);
    }
}

익명 클래스란?

익명 클래스는 다음과 같은 특징을 가집니다:

  1. 이름이 없음: 익명 클래스는 이름이 없는 일회성 클래스입니다.
  2. 인터페이스나 추상 클래스 구현: 주로 인터페이스나 추상 클래스를 구현하거나 확장할 때 사용됩니다.
  3. 간결한 정의: 코드 내에서 간단히 정의되고 사용됩니다.

익명 클래스 사용 이유

  1. 간단한 일회성 구현:

    • 익명 클래스는 특정 작업을 수행하기 위해 일회성으로 간단히 구현할 때 유용합니다.
    • 별도의 클래스를 정의하지 않고도 인터페이스나 추상 클래스의 메서드를 구현할 수 있습니다.
  2. 코드의 간결성:

    • 코드가 간결해지고, 특정 메서드 내에서 직접 정의되어 사용되므로 코드의 가독성이 향상됩니다.
  3. 로컬 변수 접근:

    • 익명 클래스는 자신을 둘러싼 외부 클래스의 멤버뿐만 아니라, 메서드의 매개변수 및 final 또는 사실상 final인 로컬 변수에도 접근할 수 있습니다.

코드 설명

  • 외부 클래스 멤버:

    • AnonymousOuter 클래스에는 인스턴스 변수 outInstanceVar가 있습니다.
  • process 메서드:

    • 메서드 process는 매개변수 paramVar와 로컬 변수 localVar를 가집니다.
    • 메서드 내에서 Printer 인터페이스를 구현하는 익명 클래스가 정의되고 인스턴스가 생성됩니다.
  • 익명 클래스 정의:

    • Printer 인터페이스를 구현하는 익명 클래스가 Printer 변수에 할당됩니다.
    • 익명 클래스는 print 메서드를 오버라이드하여 특정 작업을 수행합니다.
    • 익명 클래스는 localVar, paramVar, outInstanceVar에 접근할 수 있습니다.
  • 익명 클래스 메서드 호출:

    • printer.print()를 호출하여 익명 클래스의 print 메서드를 실행합니다.
    • printer.getClass()를 통해 익명 클래스의 실제 클래스를 확인할 수 있습니다.

예시 실행 결과

익명 클래스의 print 메서드를 실행하면 다음과 같은 출력이 예상됩니다:

value=0
localVar=1
paramVar=2
outInstanceVar=3
printer.class=class nested.anonymous.AnonymousOuter$1

요약

익명 클래스는 간단한 인터페이스 구현이나 추상 클래스의 확장을 위해 사용되며, 코드의 간결성과 가독성을 높이는 데 유용합니다. 주로 특정 메서드 내에서 일회성으로 사용되며, 외부 클래스의 멤버와 로컬 변수에 쉽게 접근할 수 있는 장점이 있습니다.

0개의 댓글