[Java] 자바 #42, 익명객체(Anonymous Object) 개념 및 예제
- 프로그래밍 언어/Java
- 2019. 3. 9. 22:59
익명 객체 , Anonymous Object
- 익명 클래스, Anonymous Class
- 클래스를 정의하지 않고 객체를 정의하는 방법 > 1회용 클래스 사용 > 재사용이 불가능한 클래스(객체를 1번 만드는 용도)
- 이벤트 객체, 스레드 개체, 람다식, 스트림 등에서 사용.
익맹객체 만드는 방법 + 사용예시
1. 부모 클래스를 상속한 익명객체를 만드는 방법.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | class AAA{ //부모클래스 public int a =10; public void check() { System.out.println("a : "+this.a); } } class BBB extends AAA{ public int b =20; @Override public void check() { System.out.println("b : "+this.b); } } class CCC { //제 3자 클래스 public AAA a1; //부모클래스(AAA) 인스턴스 public AAA a2; //자식클래스(BBB) 인스턴스(업캐스팅) public AAA a3; //자식클래스(BBB) 인스턴스(업캐스팅) public CCC() { this.a1= new AAA(); //BBB클래스의 객체가 전체 프로젝트를 통틀어 유일하게 //딱 이곳 1번만 인스턴스화. 다른소스에서는 절대로 생성자 선언이 이루어지지않는 경우 //this.a2= new BBB(); //BBB클래스로 만들었던 객체를 클래스 없이 익명객체로 만드는 방법. this.a3= new AAA() { //익명 객체의 본문(Body) public int b =40; @Override public void check() { System.out.println("b : "+this.b); } }; } public void check() { this.a1.check(); //this.a2.check(); this.a3.check(); } } | cs |
이러한 AAA, BBB, CCC클래스가 정의되어있을 때!
CCC c = new CCC();
c.check();
DDD d1= new EEE();
d1.check();
//new 부모클래스{자식 익명 객체 구현부}
//new 인터페이스{자식 익명 객체 구현부}
DDD d2 = new DDD() {
@Override
public void check() {
System.out.println("익명객체~");
}
};
d2.check();
2. 인터페이스를 구현하여 익명객체를 만드는 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | interface DDD{ void check(); } class EEE implements DDD{ @Override public void check() { System.out.println("인터페이스를 구현한 실명 자식클래스.EEE"); } } interface FFF{ String getData(); } class GGG implements FFF{ @Override public String getData() { return "실명클래스"; } } class HHH{ public void test(FFF f) { System.out.println("결과 : "+f.getData()); } } | cs |
//만드는 횟수가 자주 반복되지 않을 때...
FFF f = new GGG();
HHH h = new HHH();
h.test(f);
h.test(new FFF() {
@Override
public String getData() {
return "익명객체";
}
});
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 자바 #44, String split(), StringTokenizer 클래스 ( 문자열 분리 , 쪼개기) (5) | 2019.03.11 |
---|---|
[Java] 자바 #43, 정규표현식 설명 및 예제 (5) | 2019.03.10 |
[Java] 자바 #41, Scanner 객체 (0) | 2019.03.09 |
[Java] 자바 #41, File입출력(3) - 회원정보 입출력하기 예제 (절대경로, 상대경로) (0) | 2019.03.08 |
[Java] 자바 #40, FIle입출력(2) (0) | 2019.03.08 |