[Java] anonymous

2024. 3. 13. 00:44· IT/Java
목차
  1. 익명(anonymous) 객체
  2. 1. 익명 자식 객체(extends)
  3. 2. 익명 구현 객체(implements)
728x90

익명(anonymous) 객체

  • 이름이 없는 객체를 말하며, 프로그램에서 일시적으로 한 번만 사용되고 버려져 재사용이 되지 않는 객체이다.
  • 하나의 코드로 여러 인스턴스를 만들 필요 없을 때 사용한다.
  • 클래스의 선언과 객체 생성을 동시에 한다.
  • 명시적으로 클래스를 선언하지 않으나 단독으로 생성할 수 없으며, 클래스를 상속하거나 인터페이스를 구현해야 생성 가능하다.
  • 익명 객체는 필드값, 로컬 변수값, 매개변수값을 주로 사용된다.
  • UI 이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적으로 많이 활용된다.
  • 내부 클래스의 일종으로 외부의 지역 변수 이용할 때 똑같이 내부 클래스의 제약을 받는다.
  • 내부 클래스에서 가져올 수 있는 변수는 final 상수만 사용 가능하다.
  • 클래스를 상속해서 만들 경우 익명 자식 객체이며, 인터페이스를 구현해서 만들 경우 익명 구현 객체이다.

 

1. 익명 자식 객체(extends)

new 부모생성자(매개값, ...) {
    // 필드
    // 메소드
    // 생성자 X
}
  • 부모 클래스를 상속 받아 생성된다.
  • 생성자를 선언할 수 없으며, 정의된 필드와 메소드는 익명 자식 객체 내부에서만 사용되고 외부에서는 접근이 불가능하다.

 

예제 코드1

더보기
/* example */
public class Anonymous {
    public static void main(String[] args) {
        /* 익명클래스의 객체 : 구현 클래스 없이 추상 클래스의 객체 생성 */
        MyClass myClass = new MyClass() {
        };
    }
}

abstract class MyClass { }

예제 코드2

더보기
package ch09.sec07.exam01;

public class CarExample {
    public static void main(String[] args) {
        Car car = new Car(); // Car 객체 생성
        car.run1(); // 익명 자식 객체가 대입된 필드 사용
        car.run2(); // 익명 자식 객체가 대입된 로컬변수 사용
        car.run3(new Tire() { // 익명 자식 객체가 대입된 매개변수 사용
            @Override
            void roll() {
                System.out.println("익명 자식 Tire 객체 3이 굴러감");
            }
        });
    }
}

class Tire {
    void roll() {
        System.out.println("일반 타이어 굴러감");
    }
}

class Car {
    private Tire tire1 = new Tire(); // 필드에 Tire 객체 대입
    private Tire tire2 = new Tire() { // 필드에 익명 자식 객체 대입
        @Override
        void roll() {
            System.out.println("익명 자식 Tire 객체1이 굴러감");
        }
    };
    void run1() { // 메소드(필드 이용)
        tire1.roll(); // "일반 타이어 굴러감"
        tire2.roll(); // "익명 자식 Tire 객체1이 굴러감"
    }
    void run2() { // 메소드(로컬 변수 이용)
        Tire tire = new Tire() { // 로컬 변수에 익명 자식 객체 대입
            @Override
            void roll() {
                System.out.println("익명 자식 Tire 객체 2가 굴러감");
            }
        };
        tire.roll();
    }
    void run3(Tire tire) { // 메소드(매개변수 이용)
        tire.roll();
    }
}

 

 

2. 익명 구현 객체(implements)

new 인터페이스() {
    // 필드
    // 메소드
    // 생성자 X
}
  • 구현 클래스를 작성하지 않고 구현 객체를 생성한다.
  • 중괄호 {}에는 인터페이스에 선언되는 모든 추상 메소드들의 실체 메소드를 작성해야 한다.
  • 필드와 메소드를 선언할 수는 있지만, 익명 객체 안에서만 사용 가능하며 인터페이스 변수로 접근 불가능하다.

 

 

 

참고 링크

 

[Java] Chapter 9.2 익명 객체

익명 객체의 개요 익명 객체는 이름이 없는 객체입니다. 익명 객체를 사용하기 위한 조건은 어떤 클래스를 상속하거나 인터페이스를 구현해야 사용할 수 있습니다. 익명 객체를 사용하면 부모

euni00.tistory.com

 

728x90
저작자표시 (새창열림)

'IT > Java' 카테고리의 다른 글

[Java] 람다 작성법  (0) 2024.03.14
[Java] 람다식(Lambda Expressions)  (0) 2024.03.14
[Java] 중첩 인터페이스  (0) 2024.03.13
[Java] 중첩 클래스(Nested Class)  (0) 2024.03.12
[Java] 타입 변환  (0) 2024.03.12
  1. 익명(anonymous) 객체
  2. 1. 익명 자식 객체(extends)
  3. 2. 익명 구현 객체(implements)
'IT/Java' 카테고리의 다른 글
  • [Java] 람다 작성법
  • [Java] 람다식(Lambda Expressions)
  • [Java] 중첩 인터페이스
  • [Java] 중첩 클래스(Nested Class)
Huitopia
Huitopia
Huitopia
summary
Huitopia
  • 분류 전체보기 (170)
    • IT (156)
      • Java (72)
      • JavaScript (11)
      • TypeScript (4)
      • Node.js (7)
      • Front (10)
      • Database (2)
      • Algorithm (28)
      • etc. (22)
    • Bootcamp (14)
      • WIL (14)

블로그 메뉴

  • GitHub
  • TIL

공지사항

인기 글

태그

  • CodingTest
  • jQuery
  • WEB
  • css
  • python
  • 자바
  • 연산자
  • programmers
  • 모던자바스크립트
  • 자동타입변환
  • 스파르타코딩클럽
  • HTML
  • 강제타입변환
  • node.js
  • 클래스
  • wil
  • Interface
  • Java
  • TypeScript
  • Method
  • array
  • 항해99
  • 웹개발종합반
  • 인터페이스
  • Spring
  • 타입변환
  • 상속
  • 회고록
  • CLASS
  • javascript

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Huitopia
[Java] anonymous
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.