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 |