되자!백엔드개발자

Java(자바) - 익명클래스(annonymous class) 본문

개발공부/JAVA

Java(자바) - 익명클래스(annonymous class)

HyunJng 2022. 8. 12. 00:39

익명클래스(annonymous class)


  • 클래스 선언과 객체의 생성을 동시에 하는 클래스이다.
  • 생성자도 없이, 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다.
  • 쉽게말해 이름이 정의되지 않은, 조상 클래스를 상속받은 하나의 새로운 class이다.
  • 단, 조상 클래스나 인터페이스의 이름을 사용해서 정의하기 때문에
    단 하나의 클래스나, 단 하나의 인터페이스만 구현할 수 있다.
  • 컴파일 후 '외부클래스명 $숫자.class'의 형태로 저장된다.
new 조상클래스이름() {    ...     }
              or
new 구현인터페이스이름() {    ...    }

아래의 코드를 보자. 코드는 Strabger's LAB 님의 브로그에 [Comparable과 Comparator의 차이] 에서 가져왔다.

public class Anoymous {
	public static void main(String[] args) {
		
		Rectangle a = new Rectangle();
		// 익명객체 1
		Rectangle anonymous1 = new Rectangle() {
			
			@Override
			int get() {
				return width;
			}
		};
		
		System.out.println(a.get()); // height = 20
		System.out.println(anonymous1.get());	// width = 10
		System.out.println(anonymous2.get());	// width * height * depth =6000
	}
	// 익명객체 2
	static Rectangle anonymous2 = new Rectangle() {
		
		int depth = 30;
		@Override
		int get() {
			return width * height * depth;
		}
	};
}

class Rectangle {
	int width =10;
	int height = 20;
	
	int get() {
		return height;
	}
}

위의 코드에서 class가 anonymous로 선언된거 아닌가? 생각이 들 수 있지만

클래스 이름은 정의되지 않고 anonymous라는 이름의 객체로 생성된 것이므로 다르다. 

 

이렇게 클래스 이름으로 정의되지 않는 객체를 익명객체라고 한다.

 

익명객체의 장점

  • 클래스와 마찬가지로 이름만 다르게 하면 몇 개든 자유롭게 생성할 수 있다.
  • 클래스를 간단하게 구현하여 가독성이 높아진다.