클래스 안에 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 |