Java
[Java Programming] 9.2 익명 클래스
코딩펭귄
2024. 1. 29. 17:41
자바의 추상화
1. 추상 클래스
2. 인터페이스
추상클래스 & 인터페이스 : 인스턴스 생성 불가능 (구현되지 않은 메소드가 있기 때문)
-> 추상클래스 : extends (상속받아서) 구현 / 인터페이스 : implements 구현
-> 구현 이후 클래스로 만들어줘야 -> 인스턴스 생성할수 있게 됨
3. 익명클래스 : 한번 쓰고 안쓸것들을 만드는 용도
익명클래스
- 추상클래스, 인터페이스를 강제로 인스턴스화 시키는 방법
- 사용하는 이유 : 한번쓰고 안쓸건데, 클래스 복잡하게 만들기 싫어서
- 언제쓰면 좋을까? : 단 한번 사용할 인스턴스 만들 때 사용
- 이름이 없는 객체를 말함 -> 단독으로 생성할 수 없고 클래스 상속하거나 인터페이스 구현해야만 생성할수있다
순서
1. 익명 자식 객체 생성
방법1) 부모클래스 상속해서 자식클래스 선언 & new연산자로 자식객체 생성 -> 필드, 로컬변수에 대입
Class Child extends Parent{ } //자식클래스 선언
Class A {
Parent field = new Child(); // 필드에 자식객체 대입
void method() {
Parent localVar = new Child(); // 로컬변수에 자식객체 대입
}
방법2) (자식클래스 사용x, 필드의 변수의 초기값으로만 사용할 경우) : 익명자식객체를 생성해서 초기값으로 대입
부모클래스[필드|변수] = new 부모클래스(매개값, ...){
//필드
//메소드
}
Rideable 인터페이스를 강제 인스턴스화 하기
1. new + 인터페이스 / 추상클래스 작성
2. 생성자 뒤 {구현되지 않은것들(개수만큼) 즉시구현};
public class App {
public static void main(String[] args) throws Exception {
Rideable car1 = new Rideable() {
// 즉시 구현
@Override
public void startEngine() {
System.out.println("시동을 걸었습니다!");
}
};
car1.startEngine();
}
}
** 안드로이드 어플리케이션 만들때 굉장히 많이 사용함
인터페이스(new Rideable() )를 파라미터로 받는 메소드 = '콜백'
package Class;
public interface Rideable {
void startEngine();
}
public class App {
public void startEngine(Rideable rideable) {
rideable.startEngine();
}
public static void main(String[] args) {
App app = new App();
//App의 startEngine을 호출하기 위해 파라미터로 익명클래스 보냄
app.startEngine(new Rideable() {
@Override
public void startEngine() {
System.out.println("일회용 차의 시동을 겁니다!");
}
});
}
}