백엔드/자바

익명 클래스(anonymous class)

ksge7 2020. 8. 11. 01:01

익명 클래스란?

클래스의 선언과 객체 생성과 동시에 단 한번 사용할 수 있게 만든 클래스를 말한다.

 

그래서 단 한번만 사용되고 오직 하나의 객체만 생성가능한 일회용 클래스이다.

 

이름이 없어서 생성자를 가질 수 없고 단 하나의 클래스를 상속받거나 하나의 인터페이스만 구현 가능하다.

 

익명 클래스의 구조는 다음과 같다.

 

인터페이스 자료형 + 참조변수명 = new + 인터페이스 자료형 ( ) + { 인터페이스의 메서드 오버라이딩 }

 

interface Anony{  // 'Anony' 인터페이스 선언
	void test();  // 'test' 추상 메서드 선언
}

class Normal_Class{  // 'Normal_Class' 일반 클래스 선언
	public void test2(){};  // 'test2' 일반 메서드 선언
}

public class main {

	public static void main(String[] args) {
		
        // 'Anony'의 객체 생성과 함께 {} 대괄호 안에 인터페이스의 추상 메서드 오버라이딩
		Anony test = new Anony() {
			public void test(){ 
				System.out.println("익명클래스 테스트입니다."); 
			}
		};
		
        // 'Normal_Class'의 객체 생성과 함께 {} 대괄호 안에 일반 메서드 오버라이딩
		Normal_Class test2 = new Normal_Class() {
			public void test2() {
				System.out.println("익명클래스 테스트2입니다.");
			}
		};
		
		test.test(); // "익명클래스 테스트입니다." 출력
		test2.test2(); // "익명클래스 테스트2입니다." 출력

	}
}

 

별도의 implements같은 명령어는 필요 없고 인터페이스의 객체를 생성한다.

 

객체 생성자 뒤에 대괄호 '{ }'를 입력하고 그 안에 오버라이딩할 메서드를 재정의해주면 된다.

 

일반 클래스도 동일하다. extends같은 별도의 명령어는 필요없다.

 

오버라이딩하려는 메서드가 있는 클래스의 객체를 생성한다.

 

객체 생성자 뒤에 괄호 '{ }'를 입력하고 그 안에 오버라이딩할 메서드를 재정의 해주면 된다.

익명클래스의 사용

익명 클래스는 앞서 말했듯 일회용으로 쓰는 임시 클래스다.

 

한 두가지 기능을 위해 번거롭게 클래스를 만들고 오버라이딩할 필요없이 객체생성때 한번에 처리한다.

 

게다가 extends, implements 같은 명령어도 필요없으니 편하게 사용할 수 있다.

 

다만 명령어는 없어도 상속하는 것과 마찬가지의 효과를 가져온다.