내부클래스 ( inner class )
규칙
1. 클래스 안의 클래스
장점
1. 내부클래스에서 외부클래스의 멤버들을 쉽게접근 할수 있다.
ㄴ B클래스에서, A객체 생성 없이도 A의 멤버 접근가능
2. 코드의 복잡성을 줄일 수 있다. (캡슐화)
3. 내부클래스의 종류와 유효범위(scope)는 변수와 동일
ㄴ 내부클래스는 외부클래스의 멤버처럼 다루어진다.
ㄴ 내부클래스의 제어자는 변수에 사용가능한 제어자와 동일
내부클래스의 종류와 유효범위(scope)는 변수와 동일하게 취급
인스턴스 클래스 = Outer클래스영역
static 클래스 = 무관
Local 클래스 = 메서드영역
익명클래스 = 일회용
내부클래스의 제어자는 변수에 사용가능한 제어자와 동일
상수에 static 여부 ( ex_카드객체일 때 ) |
||
코드 | final static height; | final num; |
상세 | 카드의 물리적 사이즈이기에 카드사이즈 변경 x 공통사용 o |
해당객체 내에서만 사용하는 경우 카드의 숫자가 결정된 후 카드의번호가 바뀔 수 없음. (static을 붙일순없음. 왜?? 카드 52장마다 번호가 달라야하기 때문에) |
예제 1) 메서드내부 (지역)클래스에서 static 변수 선언불가 (※ static 은 객체 생성 없이 사용가능해야함)
메서드내부 (지역)클래스는 메서드내에서만 사용가능 ( LocalInner.CONST 사용불가 )
예제 2) 인스턴스멤버 → static맴버 ( ok )
static멤버 → 인스턴스맴버 ( error )
예제 3) 내부클래스에서, 외부클래스의private 멤버 접근가능하다.
단, 메서드내부 (지역)클래스에서는 (final)상수멤버만 접근가능.
※ 예외
final이 없는 일반변수인데, 값이 바뀌지 않으면 상수로 취급한다. ( JDK 1.8 ↑ 부터 )
(상수는 따로관리함 constant pool)
예제 4) 외부 클래스 밖에서 내부클래스를 어떻게 사용하는지?
구지..? 그럴일은 잘없다. 외부클래스의 안에서만 쓰려고 내부클래스를 사용하는 것인데, 방법은 있다.
인스턴스내부클래스를 사용할 경우, 외부클래스 객체 만들고, 내부클래스 객체 만들어야한다. (문법주의)
static내부클래스사용할경우, 외부객체 불필요, 바로 내부객체 만들면됨. (문법주의)
※ 내부클래스는 멤버처럼 취급, 즉 인스턴스내부클래스는 인스턴스이니 객체를 만들어야 사용가능
예제 5) 외부 클래스의 멤버 = value → Outer.this.value
내부 클래스의 멤버 = value → this.value
내부 클래스 메서드의 멤버 = value → value
들의 이름이 같다면, 어떻게 구별하는지?
익명클래스 (anonymous class)
규칙
1. 이름이 없는 일회용 클래스. 정의와 생성을 동시에
출처 : 남궁성의 정석코딩
https://www.youtube.com/@MasterNKS
70~96 (26)
'Java의 정석' 카테고리의 다른 글
9장. 유용한클래스(Object클래스, equals(), hashCode(),toString(),String클래스의 문자열비교) (0) | 2023.02.11 |
---|---|
8장. 예외처리( 계층구조, try-catch 등) (0) | 2023.02.09 |
7장. 객체지향프로그래밍2 (추상클래스, 인터페이스) (0) | 2023.02.06 |
7장. 객체지향프로그래밍2 (다형성 장점 2가지) (0) | 2023.02.06 |
7장. 객체지향프로그래밍2 (캡슐화, 다형성,instanceof 연산자) (0) | 2023.02.05 |