강잇
강이의 개발블로그
강잇
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • Langauge (32)
      • Java-basic (29)
      • Java (3)
    • SpringBoot (7)
    • Algorithm (5)
      • BAEKJOON (5)
    • WEB (7)
      • HTML & CSS (7)
    • DB (1)
      • MySQL (1)
    • OS (17)
      • Mac (2)
      • Linux (4)
      • Terminal Command (11)
    • Computer Science (7)
      • Hard ware (1)
      • Database (1)
      • Data structure (2)
      • Algorithm (2)
      • Network (1)
    • Git (5)
      • 개념 (1)
      • 활용 (1)
      • Trouble Shooting (2)
    • ETC. (13)
      • Install (6)
      • IntelliJ (1)
      • Eclipse (2)
      • Error (3)
      • Tip (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • til
  • CSS 속성
  • 자바
  • CSS 박스 크기 설정
  • 백준
  • 메소드
  • 메서드
  • 알고리즘 공부

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
강잇

강이의 개발블로그

Langauge/Java-basic

[Java] 익명 이너 클래스(Anonymous Class)

2022. 8. 11. 23:16

익명 이너 클래스란?

  • 단어 그대로 '이름을 가지지 않은 클래스'를 의미한다.
    • 이름이 없기 때문에 생성자도 없다.
  • 하나의 객체만을 생성하는 일회용 클래스다.
    • 이름이 없기 때문에 다시 찾을 수도 없다.
  • 익명 이너 클래스를 사용하면 코드를 간결화할 수 있다.
    • (클래스 작성 + 해당 클래스 타입의 객체 생성)를 익명 이너 클래스 하나로 해결할 수 있다.
  • 여러 개의 객체를 생성해야 하는 상황에서는 사용하지 않는 편이 좋다.
    • 일회용 클래스이기 때문에 객체를 생성할 때마다 기능을 구현해야 하기 때문이다.
// 익명 이너 클래스
new 클래스명() {
    // 기능 구현
};

new 인터페이스() {
    // 기능 구현
};
// 세미콜론(;) 필수

익명 이너 클래스 사용 예시

인터 페이스 객체 생성

public class Main {
    public static void main(String[] args) {
        // 익명 이너 클래스를 이용하여 인터페이스 인스턴스를 생성
        A a = new A(){
            @Override
            public void abc() {
                System.out.println("익명 이너 클래스");
            }
        };
        a.abc(); // "익명 이너 클래스" 출력
    }
}

// 인터페이스 생성
interface A {
    public void abc();
}

/*
원래라면 인터페이스를 구현한 하위 클래스를 생성해서 abc() 메서드를 오버라이딩을 통해 구현해야 사용할 수 있다.
하지만 익명 이너 클래스를 이용하면 아래와 같은 과정을 생략할 수 있다.

class B implements A {
    @Override
    public void abc() {
        // 기능 구현
    }
}
/*

입력매개변수를 익명 이너클래스로 전달

public class Main {
    public static void main(String[] args) {
        // 익명 이너 클래스를 이용하여 인터페이스 인스턴스를 생성
        B b = new B(new A() {
            @Override
            public void abc() {
                System.out.println("오버라이딩");
            }
        });
        /*
        원래라면 인터페이스 A를 구현한 하위 클래스의 인스턴스를 생성 후 B() 생성자의 매개변수로
        전달해야 B 클래스의 인스턴스를 생성할 수 있다.
        하지만 익명 이너 클래스를 위와 같이 활용하면 생략할 수 있다.
         */
        b.bcd(); // "오버라이딩" 출력
    }
}

// 인터페이스 생성
interface A {
    public void abc();
}

class B {
    private A a;
    // 생성자의 매개변수를 통해 A클래스의 인스턴스를 전달받음.
    public B(A a) {
        this.a = a;
    }
    // 메서드를 선언하여 A 인스턴스의 메소드를 호출함.
    public void bcd() {
        a.abc();
    }
}
저작자표시 (새창열림)

'Langauge > Java-basic' 카테고리의 다른 글

[Java] 예외처리(Exception Handling)  (0) 2022.08.17
[Java] 예외(Exception)  (0) 2022.08.14
[Java] 이너 인터페이스(중첩 인터페이스)  (0) 2022.08.11
[Java] 인터페이스란?  (0) 2022.08.07
[Java] 추상 클래스와 추상 메소드 (abstract 제어자)  (0) 2022.08.05
    'Langauge/Java-basic' 카테고리의 다른 글
    • [Java] 예외처리(Exception Handling)
    • [Java] 예외(Exception)
    • [Java] 이너 인터페이스(중첩 인터페이스)
    • [Java] 인터페이스란?
    강잇
    강잇
    학습한 내용을 정리 및 기록하는 블로그

    티스토리툴바