자바

JAVA 자바 익명 구현 객체 생성

알통몬_ 2017. 3. 13. 10:52
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

익명 구현 객체 생성

구현 클래스가 재사용되지 않고, 오로지 해당 필드와 변수의 초기값으로만 사용하는 경우라면

 익명 구현 객체를 초기값으로 대입하는 것이 좋습니다. 

인터페이스 [필드|변수] = new 인터페이스() {

    //인터페이스에 선언된 추상 메서드의 실체 메서드 선언

   //필드

  //메서드

  //필드와 메서드는 실체 메서드에서만 사용이 가능하고 외부에서는 사용하지 못합니다.

};


필드를 선언할 때 초기값으로 익명 구현 객체를 생성해서 대입하는 코드.

class A{

   AAA aaa = new AAA() {    // 클래스 A 의 필드 선언

      @Override          AAA 인터페이스의 추상 메서드에 대한 실체 메서드                             

      void aa(){ }

    };

}


메서드 내에서 로컬 변수를 선언하고 초기값으로 익명 구현 객체를 생성해서 대입하는 코드.

void method() {

     AAA localAaa = new AAA () { // 로컬 변수 선언

         @Override     // AAA 인터페이스의 추상메서드의 실체 메서드

         void aa() { }

     };

}


메서드의 매개 변수가 인터페이스 타입일 경우, 메서드 호출 코드에서 익명 구현 객체를 생성해서 매개값으로 대입할 수도 있습니다.

class A {

   void method1(AAA aaa) { }

   

   void method2() {
        method1(         // method1() 메서드 호출

           new AAA() {

              @Override // method1()의 매개값으로 익명 구현 객체를 대입

              void aa(){ }

       );

   }

}


예제로 보겠습니다.

인터페이스

public interface RemoteControl {

public void turnOn();

public void turnOff();

}

익명 구현 클래스와 객체 생성

public class Anonymous {

//필드 초기값으로 대입

RemoteControl field = new RemoteControl() {

@Override

public void turnOn() {

System.out.println("TV를 켭니다.");

}

@Override

public void turnOff() {

System.out.println("TV를 끕니다.");

}

};

void method1() {

//로컬변수값으로 대입

RemoteControl localVar = new RemoteControl() {

@Override

public void turnOn() {

System.out.println("Audio를 켭니다.");

}

@Override

public void turnOff() {

System.out.println("Audio를 끕니다.");

}

};

//로컬변수 사용

localVar.turnOn();

}

void method2(RemoteControl rc) {

rc.turnOn();

}

}


실행 클래스

public class AnonymousExample {

public static void main(String[] args) {

Anonymous anony = new Anonymous();

//익명 객체 필드 사용

anony.field.turnOn();

//익명 객체 로컬변수 사용

anony.method1();

//익명 객체 매개값 사용

anony.method2(

new RemoteControl() {

@Override

public void turnOn() {

System.out.println("SmartTV를 켭니다.");

}

@Override

public void turnOff() {

System.out.println("SmartTV를 끕니다.");

}

}

);

}

}

반응형