ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 익명클래스(Anonymous class)
    JAVA 2021. 10. 3. 17:50

    익명클래스는 이름이 없는 inner 클래스이다. 클래스 정의와 동시에 객체를 생성할 수 있다. 부모 클래스를 상속하는 방식으로 정의한다.

     

    익명클래스의 목적은 부모 클래스를 상속받는 서브 클래스를 생성하지 않고도, 단일 객체를 만들어서 부모 클래스에 정의된 동작에서 행위를 추가할 수 있다는 것이다.

     

    예시)

    Test t1 = new Test(){
    	public int num = 10;
        
    	@Override
    	public int getNum(){
    		return this.num; 
    	} 
    };

    이처럼 부모클래스 Test를 상속받아 오버라이드를 해, 굳이 클래스파일을 생성치 않고 즉석에서 만들 수 있다.

     

    하지만 익명클래스는 결국 부모클래스 인스턴스에 넣기 때문에 부모클래스에서 추상화하지 않는 메소드에 대해선 호출이 되지 않는다.

     

    Person p = new Person() {
    	String name = "Kim";
    	public void callMe() {
    		System.out.println("Call callMe method");
    	}
    	@Override
    	void whoAmI() {
    		System.out.println("나는 " + name + " 이다.");
    	}
    };
    //p.callMe(); //실행되지 않는다.
    p.whoAmI();

     

     

    익명클래스는 인터페이스로도 활용할 수있다.

     

    public interface Remocon {
    	public void on();
    	public void off();
    }
    
    public class Machine {
    	Remocon tv = new Remocon() {
    		@Override
    		public void on() {
    			System.out.println("TV을 켭니다");
    		}
    		@Override
    		public void off() {
    			System.out.println("TV을 끕니다.");
    		}
    	};
    }

    이렇게 인터페이스임에도 불구하고 익명클래스로 선언과 초기화까지 할 수있다.

     

    또한 매개변수로도 활용 할 수있는데, 사용법은 이와 같다.

     

    public void radioWork() {
    	Remocon radio = new Remocon() {
    		@Override
    		public void on() {
    			System.out.println("Radio을 켭니다");
    		}
    		@Override
    		public void off() {
    			System.out.println("Radio을 끕니다.");
    		}
    	};	
    	radio.on();
    	radio.off();
    }
    	
    public void machineWork(Remocon remocon) {
    	remocon.on();
    	remocon.off();
    }

    이렇게 선언 후에 메인함수로 가,

     

    machine.radioWork();
    machine.machineWork(new Remocon(){
    	@Override
    	public void on() {
    		System.out.println("컴퓨터를 켭니다.");
    	}
    	@Override
    	public void off() {
    		System.out.println("컴퓨터를 켭니다.");
    	}
    });

    이런식으로 파라미터로 익명클래스를 넘길 수도 있다.

     

    참고한 자료 출처 : 익명클래스 사용방법 (yookeun.github.io)

    'JAVA' 카테고리의 다른 글

    [Java]Optional 활용법  (0) 2021.12.17
    [Java] Optional  (0) 2021.12.17
    [Java] java8 stream  (0) 2021.12.17
    [Java] 메소드 참조(method reference)  (0) 2021.12.16
    [JAVA] 람다식 (lamda Expression)와 함수형 인터페이스(Functional Interface)  (0) 2021.10.04

    댓글

Designed by Tistory.