티스토리 뷰

Java/기본

034. Java Inner Class

따강아지 2022. 5. 31. 00:02

Class 내부에 Class가 있는 Class

1. 종류 

  • Class Member처럼 사용하는 InstanceMember Inner Class, Static Member Inner Class
  • Method내부에서 한정적으로 사용하는 Local Inner Class
  • 이름을 알 수 없는 객체로 한 번만 사용하고 버려지는 객체 ( Anonymous Class : 익명 )
  •  Static Inner Interface


2. Instance Member Inner Class

  • 객체 내부에 있는 클래스로 Instance Member의 특성을 가지고 있다.
  • 모든 접근 지정자를 사용할 수 있으며 실제로는 Outer Class이다. ( 클래스$이너클래스 )


2. Static Member Inner Class

  • 객체 내부에 있는 클래스로 Static Member의 특성을 가지고 있다.
  • 객체를 생성하지 않고 바로 사용한다.
  • 정적 이너 클래스는 아우터 클래스의 정적 멤버, 메서드만 사용 가능하다.


3. Local Inner Class

  • 메서드 내부에 선언하는 클래스
  • 메서드가 호출될 때만 메모리에 생성되므로 static class로 사용할 수 없다.

소스 : https://github.com/hyomee/JAVA_EDU/tree/main/InnerClass/src/com/hyomee/innerclass/innerclass

 

GitHub - hyomee/JAVA_EDU: 자바 기초 교육

자바 기초 교육. Contribute to hyomee/JAVA_EDU development by creating an account on GitHub.

github.com


4. Anonymous Class : 익명 

이름을 알 수 있는 객체로 한 번만 사용하고 버려지는 객체

4-1. 사용하는 이유 

  • 프로그램에서 일시적으로 한번만 사용되고 버려지는 객체를 매번 객체를 만들어야 하나 ?
  • 확장성을 고려해서 객체를 생성해야 하는데 … 수정이 편 할까?
  • 사용처 : 인스턴스 변수, 인스턴스 메서드, 인스턴스 메서드의 매개변수

4-2. Anonymous Class

  • 클래스를 정의하지 않고 필요할 때 이름 없이 즉시 선언하고 인스턴스화 해서 사용
  • 객체 안에 만드는 로컬 클래스와 동일하다
  • new 수식이 올 수 있는 곳 어디든지 사용 가능하나 생성자는 정의할 수 없음
  • 익명 클래스 내부에서 외부의 메서드 내 변수를 참조할 때는 메서드의 지역 변수 중 final로 선언된 변수만 참조 가능
      - 변수는 Stack에 있고 객체는 Heap에 있음,
        즉 Method 실행 이 끝나고 Stack는 사라지지만  Heap에 있는 Method는 사라지지 않기 때문

4-3. Class 생성 

 

4-4  interface 구현

 

소스 참조 : https://github.com/hyomee/JAVA_EDU/tree/main/InnerClass/src/com/hyomee/innerclass/anonymonus

 

GitHub - hyomee/JAVA_EDU: 자바 기초 교육

자바 기초 교육. Contribute to hyomee/JAVA_EDU development by creating an account on GitHub.

github.com

5. Inner Interface

  • 정적 이너 클래스만 존재
  • static 생략 시 자동으로 추가됨 

 

소스 : https://github.com/hyomee/JAVA_EDU/tree/main/InnerClass/src/com/hyomee/innerclass/interfaceInner

 

GitHub - hyomee/JAVA_EDU: 자바 기초 교육

자바 기초 교육. Contribute to hyomee/JAVA_EDU development by creating an account on GitHub.

github.com

 

'Java > 기본' 카테고리의 다른 글

ArrayList와 LinkedList의 차이점  (0) 2023.05.01
자바에서 Array와 ArrayList차이점  (0) 2023.05.01
033. Java Generic  (0) 2022.05.25
032. Java Class 상속  (0) 2022.05.24
031. Java 외부 구성 요소  (0) 2022.05.16