열심히 끝까지
28강 추상클래스/인터페이스/내부클래스 - 내부클래스 본문
28-1 ) 내부클래스
1. 내부클래스의 정의
내부클래스(Inner Class)란?
: 클래스 내부에서 생성된 클래스
< 구조 >
class OuterClass{
class InnerClass{
...
}
}
내부클래스(Inner Class)의 사용 목적
: 클래스간의 관계가 긴밀할 때 사용하여
코드를 간결하게 하기 위해 사용
2. 내부클래스의 종류
* 내부 클래스는 선언된 위치에 따라
- 인스턴스 클래스
- 스태틱 클래스
- 지역 클래스
- 익명클래스
로 구분
1. 인스턴스 클래스(Instance 클래스)
- 외부 클래스에서 멤버변수 위치에 선언
- 클래스의 내무에서 인스턴스(객체)멤버처럼 다뤄지며,
인스턴스 멤버들과 상호작용 가능
<구조>
class outerClass{
class InnerClass{
....
}
}
2. 스태틱(static) 클래스
- 외부 클래스에서 멤버 변수 위치에 선언
- 클래스 내부에서 static 멤버처럼 다뤄지며
static멤버들과 상호작용 가능
<구조>
class outerClass{
static class InnerClass{
....
}
}
3. 지역 클래스
- 메서드 내부 지역변수 위치에 선언
- 메서드나 초기화 블록의 내부에서 다뤄지며
선언된 영역 내부에서 사용
- 메모리 영역 중 스택영역에 존재
메서드 호출 ~ 종료까지 메모리에 존재하는 영역
<구조>
class outerClass{
void A(){
static class InnerClass{
....
}
}
}
3. 내부클래스의 접근성
* 내부 클래스도 클래스이기 때문에 선언부에 접근제어자 사용 가능
<구조>
class outerClass{
private class InnerClass{
.... }
protected class InnerClass{
.... }
}
<실습> InnerClass1
static 클래스와 인스턴스 클래스 실습
<실습> Inner4
OuterClass의 구조
<필드>
- 인스턴스 변수 : a
- static 변수 : b
<내부 클래스>
- 인스턴스 클래스 : Inner
- static 클래스 : StaticInner
* 내부 클래스의 객체를 생성하는 방법
외부클래스.내부클래스명 객체명 = new 외부클래스생성자().내부클래스생성자();
혹은
= 외부크래스객체.내부클래스생성자();
1. OuterClass 객체 생성 후 멤버에 접근
- 인스턴스 멤버 접근 : 인스턴스명.변수명
- static 멤버 접근 : 클래스명.변수명;
2. 인스턴스 내부 클래스 접근
- 외부클래스 객체 생성
OuterClass oc2 = new OuterClass();
- 외부클래스 객체로 내부 클래스 객체 생성
OuterClass.Inner i = oc2.new Inner();
- 내부클래스 객체로 메서드 호출
i.InnerMethod();
3. 스태틱 내부 클래스 접근
- 스태틱 클래스 객체 생성
OuterClass.StaticInner si = ..........
- 스태틱 클래스로 스태틱 메서드 호출
si.staticMethod();
-> 스태틱 멤버는 객체를 생성하지 않고도 클래스명으로 호출 가능
4. 익명클래스 > 뒷부분에서 따로 다룰 것
" 익명 클래스 또는 무명 클래스라고도 하며, 이름이 없는 클래스를 의미 "
익명클래스(Anonymous)
: 이름이 없는 클래스
<기존 클래스의 구조>
class Some{
private int a = 3;
int getter(){
return this.a;
}
void setter(int a){
this.a = a;
}
}
↓기존 클래스를 오버라이딩해서 만든다!
<익명클래스의 구조>
Some annoy = new Some(){
private int a = 3;
int getter(){
return this.a;
}
void setter(int a){
this.a=a'
}
}
<실습>Anonymous2
익명클래스는 일회성이므로, 객체를 다시 생성하고 호출하면
OuterClass1에 정의된 메서드가 호출 -> method a
<실습>Anonymous3
익명클래스는 인터페이스 혹은 추상클래스를 일회성으로 구현할 때 많이 사용
인터페이스와 추상클래스를 구현하는 익명클래스를 생성해보기
'멘토씨리즈 JAVA' 카테고리의 다른 글
30강 예외처리2 (0) | 2022.05.03 |
---|---|
29강 예외처리 - 예외 / 예외처리 개념 (0) | 2022.05.03 |
27강 추상클래스/인터페이스/내부클래스 - 인터페이스 (0) | 2022.05.02 |
26강 추상클래스/인터페이스/내부클래스 - 추상 메서드와 추상클래스 (0) | 2022.04.30 |
25강 상속과 다형성 - 다형성 개념과 다형성 관련 실습 (0) | 2022.04.30 |