일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 검증 실패 예외처리
- fcm데이터구조
- 동등성동일성
- 프로세스 생성
- multiparfile데이터
- 디스패처서블릿
- fcmv1
- equals
- httpservlet기술
- DispatcherServlet
- multipart바인딩
- 옵티마저
- 옵티마이저
- biblecash
- rest api 검증
- rest api
- 스프링요청반응
- fcm성능비교
- HttpServlet
- java enum
- 데이터베이스파서
- 동기비동기블로킹논블로킹
- HTTP프로토콜
- 왜불변객체인가
- 불변객체
- Wrapper class
- 공유기작동방식
- 래퍼클래스
- 중첩클래스
- 클라이언트요청반응
- Today
- Total
개발은 아름다워
[ Java ] 중첩 클래스, 내부 클래스란? 본문
클래스 안에 존재하는 클래스를 중첩 클래스라고 한다.
중첩 클래스는 언제 사용하는건가??
중첩 클래스는 특정 클래스가 다른 하나의 클래스 안에서만 사용되거나, 둘이 아주 긴밀하게 연결되어 있는 특별한 경우에만 사용해야 한다. 외부의 여러 클래스가 특정 중첩 클래스를 사용한다면 중첩 클래스로 만들면 안된다.
중첩 클래스를 사용해야하는 이유
- 논리적 그룹화 : 특정 클래스가 다른 하나의 클래스 안에서만 사용되는 경우 해당 클래스 안에 포함하는 것이 논리적으로 더 그룹화 된다. 패키지를 열었을 떄 다른 곳에서 사용될 필요가 없는 중첩 클래스가 외부에 노출되지 않는 장점도 있다.
- 캡슐화 : 중첩 클래스는 바깥 클래스의 private 멤버에 접근할 수 있다. 이렇게 해서 둘을 긴밀하게 연결하고 불필요한 public 메서드를 제거할 수 있다.
중첩 클래스 분류
중첩 클래스는 클래스를 정의하는 위치에 따라 크게 두가지로 분류할 수 있다.
- 정적 중첩 클래스
- 내부 클래스
크게 두 가지로 나뉘는 이유는 바깥 클래스의 인스턴스로 소속되는가 아닌가 이다.
정적 중첩 클래스는 바깥 클래스와 전혀 다른 클래스이다. 따라서 바깥 클래스의 인스턴스에 소속되지 않는다.
내부 클래스 바깥 클래스를 구성하는 요소이다. 따라서 바깥 클래스의 인스턴스에 소속된다.
내부 클래스의 종류
- 내부 클래스 : 바깥 클래스의 인스턴스의 멤버에 접근
- 지역 클래스 : 내부 클래스의 특징 + 지역 변수에 접근
- 익명 클래스 : 지역클래스의 특징 + 클래스의 이름이 없는 특별한 클래스
정적 중첩 클래스
- 정적 중첩 클래스는 앞에 static이 붙는다.
- 정적 중첩 클래스는
-> 자신의 멤버에는 당연히 접근할 수 있다.
-> 바깥 클래스의 인스턴스 멤버에는 접근할 수 없다.
-> 바깥 클래스의 클래스 멤버에는 접근할 수 있다.
private 접근 제어자
- private 접근 제어자는 같은 클래스 안에 있을때만 접근이 가능한데 정적 중첩 클래스는 같은 클래스 안에 있으므로 바깥 클래스의 private 클래스 멤버에 접근할 수 있다.
정적 중첩 클래스는 사실 다른 클래스를 그냥 중첩해 둔 것일 뿐이다. 바깥 클래스와 정적 중첩 클래스는 사실 아무런 관계가 없다.
정적 중첩 클래스의 활용
중첩 클래스의 접근
나의 클래스에 포함된 중첩 클래스에 접근할 때는 바깥 클래스 이름을 적지 않아도 된다.
그러나 나의 클래스에 포함된 중첩 클래스가 아니라 다른 곳에 있는 중첩 클래스에 접근할 때는 바깥클래스.중첩클래스 로 접근해야한다.
중첩 클래스의 용도는 자신이 소속된 바깥 클래스 안에서 사용되는 것이다. 따라서 자신이 소속된 바깥 클래스가 아닌 외부에서 생성하고 사용하고 있다면 ,이미 중첩 클래스의 용도에 맞지 않을 수 있다. 이때는 중첩 클래스를 밖으로 빼는 것이 더 나은 선택이다.
내부 클래스
정적 중첩 클래스는 바깥 클래스와 서로 관계가 없다. 하지만 내부 클래스는 바깥 클래스의 인스턴스를 이루는 요소가 된다. 쉽게 말해 내부 클래스는 바깥 클래스의 인스턴스에 소속된다.
내부 클래스는 앞에 static이 붙지 않는다. 쉽게 이야기해서 인스턴스 멤버가 된다.
- 내부 클래스는 자신의 멤버에는 당연히 접근할 수 있다
- 바깥 클래스의 인스턴스 멤버에 접근할 수 있다.
- 바깥 클래스의 클래스 멤버에 접근할 수 있다.
private 접근 제어자
- 접근 제어자는 같은 클래스 안에 있을 때만 접근할 수 있다.
- 내부 클래스도 바깥 클래스와 같은 클래스 안에 있다. 따라서 내부 클래스의 private 접근 제어자에 접근할 수 있다.
내부 클래스는 바깥 클래스의 인스턴스에 소속된다. 따라서 바깥 클래스의 인스턴스 정보를 알아야 생성할 수 있다.
실제로 내부 인스턴스가 바깥 인스턴스 안에 생성되는 것은 아니다. 하지만 개념상 인스턴스 안에 생성된다고 이해하면 된다. 실제로는 내부 인스턴스는 바깥 인스턴스의 참조를 보관한다. 이 참조를 통해 바깥 인스턴스의 멤버에 접근할 수 있다.
'자바' 카테고리의 다른 글
[ Spring ] 고대의 서블릿을 찾아서(4) 수문장인 FrontController의 등장 (0) | 2024.10.12 |
---|---|
[ Java ] 제네릭은 무엇이며 왜 쓰는걸까? (1) | 2024.10.12 |
[ Java ] equals는 왜 쓰는거고 어떻게 쓰는걸까? - 동일성과 동등성 (0) | 2024.10.12 |
[ Java ] 열거형은 어떻게 생겨난거고 왜 ENUM타입을 쓰는걸까? (2) | 2024.10.12 |
[ Java ]왜 Wrapper 클래스가 있는걸까? (0) | 2024.10.12 |