본문 바로가기

Java

[혼자 공부하는 자바] 9-2 익명 객체

728x90

1. 익명 객체

  • 이름이 없는 객체
  • 어떤 클래스를 상속하거나 인터페이스클 구현해야만 만들 수 있음. 일반적으로 명시적으로 클래스 이름을 주고 선언함
  • 선언 방법
    부모클래스 변수 = new 부모클래스(){}
    인터페이스 변수 = new 인터페이스(){}
  • 부모 클래스 변수는 이름 없는 자식 객체를 참조하고 인터페이스 볏누은 이름 없는 구현 객체를 참조함

 

2. 익명 자식 객체 생성

  • 자식 클래스가 재사용되지 않고 특정 위치에서 사용할 경우 익명 자식 객체를 생성해 사용하는 것이 편리
  • 생성 방법
    부모클래스 [필드/변수] = new 부모클래스(){  }
  • 중괄호 내부에 필드나 메소드 선언하거나 오버라이딩 하는 내용을 작성
  • 생성자를 선언할 수 없음
  • 익명 자식 객체에서 정의된 필드와 메소드는 익명 자식 객체 내부에서만 사용됨
    익명 자식 객체는 부모 타입 변수에 대입되기 때문

 

3. 익명 구현 객체

  • 구현 클래스가 재사용되지 않고 오로지 특정 위치에서 사용할 경우 익명 구현 객체를 사용하는 것이 편리
  • 생성방법
    인터페이스 [필드/변수] = new 인터페이스(){  }
  • 중괄호 안에는 인터페이스에 선언된 모든 추상 메소드를 재정의 하는 작업을 해야 함

 

4. 익명 객체의 로컬 변수 사용

  • 익명 객체는 메소드 실행이 종료되면 없어지는 것이 일반적이지만 메소드가 종료되어도 계속 실행 상태로 존재할 수 잇음
  • 메소드의 매개 변수나 로컬 변수를 익명 객체 내부에서 사용될 때 문제 발생
    매개 변수, 로컬변수는 익명 객체에서 지속적으로 사용할 수 없음
  • 문제 해결
    • 컴파일 시 익명 객체에서 사용하는 매개 변수나 로컬 변수의 값을 익명 객체 내부에 복사해두고 사용
    • 매개 변수나 로컬 변수가 수정되어 값이 변경되면 익명 객체에 복사해둔 값과 달라지기 때문에 매개변수나 로컬변수를 "final"로 선언
728x90