2024. 5. 28. 18:20ㆍJAVA
중첩 클래스
말 그대로 중첩해서 정의한 클래스. 이를 중첩 클래스라 한다.
중첩 클래스 분류
중첩 클래스는 정의하는 위치, 키워드에 따라 분류 된다.
| 내부 클래스 - non-static(비정적) | 중첩 클래스 - static(정적) |
| Inner class(내부 클래스) | static nested class(정적 중첩 클래스) |
| Local class(지역 클래스) | |
| anonymous class(익명 클래스) | |
| *바깥 인스턴스 소속 | *전혀 다른 인스턴스 |
중첩 클래스 선언 위치
(= 변수의 선언 위치)
- 정적 중첩 클래스 위치 = 정적 변수 위치
- 내부 클래스 위치 = 인스턴스 변수 위치
- 지역 클래스 위치 = 지역 변수 위치(= 코드 블럭 안)
ㄴ 익명 클래스는 지역 클래스의 하위 개념이다. 특수성을 띄고 있다.
내부 vs 중첩
중첩(Nested) : 어떤 다른 것이 내부에 위치하거나 포함되는 구조적 관계
내부(Inner) : 나의 내부에 있는 나를 구성하는 요소
내부에 대해 알기 쉽게 대해 예를 들어보자.
체력이 5 증가하는 투구를 썼는데, 히든 옵션(내부)을 통해 공격력이 2 증가했다)
이 히든 옵션은 해당 투구에만 존재하는 히든 옵션이다.
중첩도 공격계열 버프로 예를 들어보자
공격계열 버프에는
속성 데미지,
데미지,
공격 속도,
최종 데미지,
공격력 추가,
공격력 % 증가 등이 있다.
이는 모두 다른 버프지만 공격계열 버프로, 서로 중첩된다.
혹은 뭐 (상자 안의 상자) 라던가..
중첩과 내부의 차이 핵심
바깥 클래스 입장에서 볼 때, 안의 클래스가 바깥인스턴스에 소속 되는가? 않는가?
- 정적 중첩 클래스는, 바깥 클래스와 전혀 다른 클래스이다. 따라서 바깥 인스턴스에 소속 X
- 내부 클래스는, 바깥 클래스를 구성하는 요소이다. 따라서 바깥 클래스의 인스턴스에 소속 O
정적 중첩 클래스
- static 키워드가 붙는다.
- 바깥 클래스의 인스턴스에 소속되지 않는다.
내부 클래스
- static 키워드가 붙지 않는다.
- 바깥 클래스의 인스턴스에 소속된다.
중첩 클래스 언제 사용하나?
내부 클래스를 포함한 모든 중첩 클래스는 특정 클래스가 다른 클래스 안에서만 사용되거나, 둘이 아주 긴밀하게 연결된 특별한 경우에만 사용한다.
중첩 클래스 사용 이유
논리적 그룹화 : 동물과 심장은 함께한다. 동물 따로 심장 따로? 이상하다. 심장을 다른 곳에서 쓰면 몰라도, 동물 안에서만 쓰인다면 굳이 분리하는 것 보다 합치는 게 자연스럽다.
캡슐화 : 중첩 클래스는 바깥 클래스의 private 멤버에 접근할 수 있다. 또, 불필요한 public을 줄일 수 있다.
'JAVA' 카테고리의 다른 글
| 예외처리 -Checked Exception (0) | 2024.06.02 |
|---|---|
| 중첩 클래스 -정적 중첩 클래스 (0) | 2024.05.28 |
| enum (0) | 2024.05.01 |
| String_String pool (0) | 2024.04.17 |
| Object OCP(Open Closed Principle) (0) | 2024.04.05 |