본문 바로가기

Java

익명 클래스

익명 클래스?

익명 클래스란 무엇일까? 이름 그대로 이름 없는(익명) 클래스다. 익명 클래스와 비교해보기 위해 일반(이름이 있는) 클래스는 어떻게 선언하는 다시 생각해보자.

class Hello {
  ...
}

위는 이름이 Hello인 클래스를 선언한 예시다. 하지만 익명 클래스는 이렇게 선언하지 않는다. 이름이 없으므로 다른 방식으로 선언한다. 선언 방법은 뒤에서 예시를 통해 알아보겠다.

 

익명 클래스 사용 이유?

익명 클래스의 의미는 파악했지만 왜? 익명 클래스를 알아야 할까?

 

프로그래밍을 하다 보면 프로젝트의 전반적으로 사용되는 객체가 존재하고, 어느 부분에서 일시적으로 사용하는 객체가 존재한다.

 

일시적으로 사용하는 객체의 경우 우리가 굳이 클래스를 정의한 다음 사용해야 할까? 이는 효율적이지 않은 것 같다. 이때 익명 클래스를 이용하면 클래스를 따로 선언하지 않고 일시적으로 사용할 객체를 만들 수 있다.

 

예를 들어보자.

public interface Example {
  void hello();
}

위 인터페이스를 구현한 구현 객체가 일시적으로 한 번만 필요한 상황이라고 가정하자.

 

일반적인 방법(이름있는 클래스를 사용)으로는 해당 인터페이스를 구현한 클래스를 다음과 같이 선언하고 사용할 수 있다.

//한번만 사용하고 싶은 클래스 선언
class Temp implements Example {
  @Override
  public void hello() {
    System.out.println("일회용 객체");
  }
}
​
//클래스 사용하기 
public class javaMain {
  public static void main(String[] args) {
    Example onlyOnce = new Temp();
    onlyOnce.hello();
  }
}

그런데 우리는 Example 인터페이스의 구현 객체를 한 번만 쓰고 버리려고 한다. 그런데 굳이 선언해야 할까? 이런 상황에 익명 클래스를 이용하면 클래스를 선언하지 않고 일회용 객체를 만들 수 있다.

 

익명 클래스를 이용하기

public class javaMain {
  public static void main(String[] args) {
    Example onlyOnce = new Example() {
      @Override
      public void hello() {
        System.out.println("일회용 객체");
      }
    };
​
    onlyOnce.hello();
  }
}

익명 클래스를 이용하면 다음과 같이 클래스를 따로 선언하지 않고, 객체를 만드는 시점에서 선언과 동시에 객체를 만들 수 있다.

 

정리

프로젝트에서 일시적으로 사용하고 버리는 객체의 경우 따로 클래스를 선언해 두는 건 효율적인 방법이 아니다. 하지만 객체를 사용하기 위해서는 해당 객체를 생성해 주는 클래스가 필요하다.

이때 익명 클래스를 활용하면 클래스를 따로 선언해 두지 않아도, 객체를 만들어 사용할 수 있다.

'Java' 카테고리의 다른 글

Java 시간관련 객체 정리  (0) 2024.03.09
람다식  (0) 2022.05.29
Iterator  (0) 2022.04.24