티스토리 뷰
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 |