본문 바로가기

java/자바

Ch13 이너 클래스, 이너 인터페이스

클래스 안에 4가지 들어갈 있다

  1. 필드 (멤버)
  2. 메서드 (멤버)
  3. 생성자
  4. 이너클래스 (멤버)

멤버: 클래스 중괄호 안에 정의됨, 생성자는 멤버가 아니다.

 

클래스 내부에 있는 클래스의 종류 3가지

1. 인스턴트 멤버(이너) 클래스

: 클래스 바로 아래 클래스

 

2. 정적 멤버(이너) 클래스

클래스 바로 아래  정적 클래스

 

3. 지역 이너 클래스

클래스 안에 함수 안에 클래스

 

 

int a 예시로 들자
클래스 내부에 정의하면 필드라고 한다.
함수 내부에 정의하면 지역변수라고 한다.

 

 

멤버변수는 객체가 생성되어야 사용할 있다.

반면 static은 클래스가 생성되면서 바로 사용할 수 있다.

 

1. 이너클래스를 사용하고싶으면? 객체를 먼저 생성해야한다!

 

2. 이너 클래스의 존재 이유 => 객체를 만든다.

클래스는 붕어빵틀이다. 붕어빵을 만드려고 존재한다.

 

3. 생성이나 접근때 B 로 존재하지 않는다. A.B 이다

 

 

 

 

 

 

 

 

 

 

 

변수이름이 같으면 어떻게 될까?

정적 멤버 이너 클래스

클래스, static 변수가 선언된다.

따라서 클래스 생성될때 생성된다.

객체를 만들 필요 없다.

 

그래서 A객체를 생성하지 않아도

A.B객체를 생성할 있다

지역 이너 클래스

 메소드 안에 정의 되어 있는 클래스다.

 

 

1. 외부 클래스의 필드에 [지역 이너 클래스]는 접근이 가능하다

2. 함수abc() 안에 있는 int b =5; final 붙는다.

[지역 이너 클래스]의 변수는 final 붙어야한다. 값을 변경할 없다.

반면 클래스에 있는 필드 int a =3; 에는 final 붙지 않는다. 변경 가능하다.

 

이유는 abc() 함수는 지역함수라서 함수끝에 도달하면 사라진다.

그래서 지역 변수도 사라져야한다. -> int b =5; 사라짐..

그러나 문제는

클래스 로더에서 읽은 B 사라지지 않는다.

B bb = new B(); bb.bcd();하면 int b =5; 사라짐.. 그래서 final 붙는다.

 함수 안에 있던 클래스는 클래스 영역에 저장된다. 사라지지 않았다.

 

3.메소드 안에 클래스는 static으로 정의 못한다

객체를 만들지 않고 써야하는데

abc()함수는 멤버 함수이다. 객체를 생성해야만 사용할 있다.

클래스 이름이 겹치네?

클래스 C

 

그래서 2C 생겨남

'java > 자바' 카테고리의 다른 글

[Chap14] - 01 예외 및 예외처리  (0) 2022.10.10
ch13 익명 이너 클래스  (0) 2022.10.03
Ch12 인터페이스  (0) 2022.10.03
[Chap12] - 01 추상클래스  (0) 2022.09.25
[Chap11] - 자바 제어자 #2 (final, abstract)  (0) 2022.09.25