상세 컨텐츠

본문 제목

JAVA 10-2. 익명 객체 (익명 자식객체 / 익명 구현객체)

Backend/JAVA-자바

by 사랑짱 2021. 6. 23. 12:30

본문

 

 

◆ 익명 객체란?

- 이름을 알수 없는 객체

- 객체를 생성하면서 클래스를 정의하는 형태

- 익명 객체는 단독으로 생성 불가

  (전제조건 : 상속 - extends / implement) 

 

 

◆ 익명 객체의 생성

- Lvalue : 부모타입의 참조변수

- Rvalue : new 부모타입명(생성자 매개변수로 전달할 인자들)

- { } (구현부) : 상속받은 부모 타입의 메소드 재정의/ 새로운 메소드, 필드 선언 가능

 

 

※ 생성자는 객체의 타입을 클래스로 선언해야 하는데

   익명 객체는 클래스의 이름을 알 수 없기 때문에 익명 객체 내부에 자체 생성자 생성은 불가!!!

 

 

◆ 익명 객체 사용 가능 위치

 

1. 필드의 초기값

 

 

2. 메소드의 로컬변수

 

 

3. 매개변수의 매개값

 

 

 

◆ 익명 객체의 사용범위

 

출처 : 이것이자바다

 

- 익명 객체 내부에서만 사용가능(지역적으로만 사용!)

- 익명객체에서 재정의한 부모타입의 메소드는 접근 가능

- 외부에서는 익명 객체 자체의 필드와 메소드에 접근할 수 없다!!!

  (why? 익명 객체는 부모 타입 변수에 대입되므로, 부모타입에 선언된 것만 사용 가능하다)

 

※ 상속받은 멤버와 익명객체에서 새롭게 생성한 멤버를 구분해야 사용가능 범위를 알 수 있다!!!

 

 

Closure(클로저)란?

- 함수의 내부에서 만든 지역변수가 사라지지 않고 값을 유지하고 있는 상태

※ 클로저란?
생명주기가 다른 두 변수가 상호( 또는 일방) 참조(=사용)될 때, 생명주기가 짧은 변수가 파괴되고 나서,
생명주기가 긴 참조변수에서 이 파괴된 변수의 값을 참조함으로써 발생하는 문제를 의미

=> 문제 해결 : 생명주기가 짧은 변수를 final 상수로 만들어 메소드 영역에 있는 Clazz객체의 상수풀에 넣음!!!

 

Q. 어떤 경우에 지역변수의 값이 유지가 될까?

A. 외부 함수에서 선언된 지역변수 중 내부함수에서 사용되는 경우

    final 특성을 가지게 되며 내부함수 실행 시 사용가능하다!

 

 

클로저는 함수 내부에 데이터가 만들어지기 때문에

함수 외부에서 수정할 수 없는 보호된 데이터 생성가능하다는 장점이 있다!!

(final의 특성을 가지기 때문에 값을 변경하는 것이 불가능!)

 

클로저와 관련된 내용은 자바스크립트에서 더 자세히 다룰 수 있을 것 같다!!

 

 

관련글 더보기