[Java] 익명 클래스(Anonymous Class) : 인스턴스를 만들기 위한 일회용 클래스

해로(haero77)·2022년 8월 5일
0

Java 문법

목록 보기
10/15
post-thumbnail
post-custom-banner

💡 익명 클래스는 딱 한 번만 인스턴스를 생성하여 사용하기 위해 선언되는 클래스이다.

익명 클래스란?

일반 클래스는 언제든지 인스턴스를 생성하여 사용할 수 있으나, 어떤 클래스는 딱 한 번만 인스턴스를 생성하기 위해서 선언되는데 이것을 익명 클래스 라고 한다.

이와 같은 일회용 클래스는 주로 인터페이스를 구현하는 클래스일 때가 많으며, 일회용이므로 이름이 필요없기 때문에 익명 클래스(Anonymous Class)라고 한다.


익명 클래스 선언과 사용 방법

선언 방법

// 선언 방법 
인터페이스명 변수명 = new 인터페이스명() {
		인터페이스의 메서드 오버라이딩
}

익명 클래스는 위와 같이 선언된다.

  • 익명 클래스는 클래스 선언과 동시에 힙에 인스턴스가 생성되고 참조변수에 주솟값을 저장한다.
  • 참조변수의 참조타입은 상속하는 인터페이스(혹은 클래스)로 지정한다.

선언 예제

// 선언 예제
Messenger anonymousTest = new Messenger() { // 익명 클래스 선언

    @Override
    public String getMessage() { // 인터페이스 메서드 오버라이딩
        return "anonymousTest";
    }

    @Override
    public void setMessage(String msg) { // 인터페이스 메서드 오버라이딩
        System.out.println("anonymousTest에서 메시지를 설정합니다: " + msg);
    }
};
// Messenger 인터페이스
public interface Messenger {
    String getMessage();
    void setMessage(String msg);
}

위의 익명 클래스는 Messenger 인터페이스를 구현한다.

  • new Messenger() 를 통해 익명 클래스의 인스턴스를 힙에 생성하고, Messenger 타입으로 선언된 anonymousTest 참조변수에 주솟값이 저장된다.
  • 클래스의 본문에는 상속한 인터페이스의 메서드를 오버라이딩하여 구현한다.

사용 방법

사용 방법은 일반 클래스와 다르지 않다. 일반 클래스의 인스턴스 생성과 사용 예제와 함께 익명 클래스의 사용 방법을 살펴보자.

// Messenger 인터페이스를 상속하는 GalaxyMessenger 클래스
public class GalaxyMessenger implements Messenger{
    public String getMessage() { // Messenger 인터페이스의 메서드 구현
        return "galaxy";
    }

    public void setMessage(String msg) { // Messenger 인터페이스의 메서드 구현
        System.out.println("galaxy에서 메시지를 설정합니다 : " + msg);
    }

    public void changeKeyboard() {
        System.out.println("키보드아이콘 터치 후 키보드를 변경합니다.");
    }
}
// MessengerTest.java
public class MessengerTest {
    public static void main(String[] args) {
        /* 일반 클래스의 인스턴스 생성과 사용 */
        GalaxyMessenger galaxy = new GalaxyMessenger();
        System.out.println(galaxy.getMessage());
        galaxy.setMessage("Hi, I'm Galaxy.");
        galaxy.changeKeyboard();

        /* 익명 클래스의 선언과 사용 */
        Messenger anonymousTest = new Messenger() { // 익명 클래스 선언

            @Override
            public String getMessage() { // 인터페이스 메서드 오버라이딩
                return "anonymousTest";
            }

            @Override
            public void setMessage(String msg) { // 인터페이스 메서드 오버라이딩
                System.out.println("anonymousTest에서 메시지를 설정합니다: " + msg);
            }
        };

        // 익명 클래스의 멤버 사용 
        System.out.println(anonymousTest.getMessage());
        anonymousTest.setMessage("Have a nice day!");
    }
}
  • GalaxyMessenger 클래스는 앞서 표시한 Messenger 인터페이스를 구현하는 일반 클래스이다. new 명령문을 이용하여 인스턴스를 생성하였다.
  • 익명 클래스 또한 new 명령문을 이용하여 인스턴스를 생성하는데, 이 때 참조타입을 상속하는 인터페이스(혹은 클래스)로 지정해야한다는 것에 유의하자.
  • 익명 클래스의 멤버 사용 방법은 일반 클래스와 다르지 않다. 참조변수로 접근하여 사용한다.

📔 본 포스팅은 책 ‘처음 해보는 자바 프로그래밍(오정임 저, 루비페이퍼)’을 읽고 정리한 글입니다.

profile
Every Run, Learn Counts.
post-custom-banner

0개의 댓글