Java/모두의 자바

Chapter 08-47 익명 클래스(anonymous class)

계란💕 2022. 2. 11. 11:51

08-47.1 익명 클래스 만들기

 

  Def) 익명 클래스: 클래스 선언과 동시에 객체를 만든다.

 

  - 자식 클래스를 굳이 만들 필요 없는 경우에 사용한다. 

    -> 자식클래스가 필요 없는 경우는?

    -> Action을 상속 받는 클래스를 ActionExam클래스 안에서만 사용하고 다른 클래스에서 사용하지 않는 경우.

    -> 한 번만 사용하므로 MyAction 클래스는 만들 필요가 없다.

    ->  상속 받는 클래스를 따로 정의하지 않고 바로 사용하기 위해 익명클래스를 사용한다.

 

  (1) 추상클래스 Action클래스를 만들고 추상 메서드 exec를 작성한다.

<hide/>
package javaStudy;
public abstract class Action {
	public abstract void exec();
}

  - 추상 클래스를 상속 받은 자식 클래스가 해당 메서드를 구현해야만 추상 클래스를 사용가능하다. 

 

  (2) Action클래스를 상속 받은 MyAction클래스를 만들고 exec()메서드를 구현한다.

<hide/>
package javaStudy;
public class MyAction extends Action {
	@Override
	public void exec() {
		System.out.println("exec");
	}
}

 

 (3) 테스트 하기 위해 ActionExam 클래스를 하나 더 만든다.

<hide/>
package javaStudy;
public class ActionExam {
	public static void main(String[] args) {
		Action action = new MyAction();
		action.exec();
	}
}

  Note) 실행 결과 : 1

  - Action 타입의 action을 하나 선언한다.

  - Action는 추상클래스이므로 객체 자체를 생성하지는 않는다.

  - 반드시 MyAction이라는 자식클래스를 생성해야만 Action이 가진 메서드를 사용할 수 있다.

  - 추상클래스는 이렇게 사용하는 게 일반적이다.

  - 하지만 익명클래스는 자식 클래스의 MyAction을 만들지 않고 ActionExam클래스에서 액션을 상속받은 익명클래스를 만들어 사용할 수 있다.

 

 

08-47.2 익명클래스 다른 버전

<hide/>
package javaStudy;

public class ActionExam {
	public static void main(String[] args) {
		Action action = new Action() {
			@Override
			public void exec() {
				System.out.println("exec");			
			}
		};
		action.exec();
	}
}

  Note) 실행 결과: exec

  - Action action = new Action() : Action은 추상 클래스이므로 객체를 생성할 수 없어 에러가 난다.

  - 그런데 MyAction 같은 클래스를 딱 한 번만 사용하는 경우가 있다. 

  - 그런 경우 클래스를 따로 정의하고 사용하는 것이 번거롭다.

  - 이 때 조금 편하게 클래스 정의와 동시에 객체를 생성하는 것이 익명클래스이다.

  - 익명으로 클래스를 하나 만들고 똑같이 이 부분을 수행하는 메서드를 만들 수 있다.

  - 레퍼런스 변수.메서드명().. 형태로 사용한다.

  - action.exec(); 와 같이 이용한다.

  - new Action()다음에 중괄호를 여닫고 중괄호 안에 필요한 부분(exec)을 구현한다.

  - 이렇게 하면 Action클래스를 상속받은 이름 없는 객체를 만든다는 의미이다.

  - 중괄호 안에는 추상 메서드를 오버 라이드 하거나 메서드를 추가할 수 있다. 

  - 이렇게 생성된 이름 없은 객체를 action이라는 참조변수가 참조하도록 했다. 

  - 따라서 참조변수 action을 이용하면 중괄호 안에 오버라이드한 메서드를 호출 가능한다. 

'Java > 모두의 자바' 카테고리의 다른 글

Chapter 09-49 Throws  (0) 2022.02.11
Chapter 09-48 예외(Exception)  (0) 2022.02.11
Chapter 08-46 내부 클래스  (0) 2022.02.11
Chapter 08-45 인터페이스의 default 메서드  (0) 2022.02.11
Chapter 08-43 인터페이스 만들기  (0) 2022.02.09