자바에서는 클래스 안에 클래스를 Nested 클래스라고 부른다.
왜 클래스 안에 클래스가 있을까?
- 코드를 간단하게 하기 위해서 이다.
- 한 곳에서만 사용하는 클래스를 논리적으로 묶어서 처리할 필요가 있을때(Static Nested 클래스)
- 캡슐화가 필요할때, 즉 내부 구현을 감추고 싶을때(내부 클래스)
- 소스의 가독성과 유지보수성을 높이고 싶을때
Nested 클래스는 자바 기반의 UI를 처리할 때 사용자의 입력이나, 외부의 이벤트에 대한 처리를 하는 곳에서 많이 사용된다.
Nested 클래스는 선언 방식에 따라서 두가지로 구분할 수 있고, inner 클래스는 이름이 유무에 따라서 다시 두가지로 나눌수 있다.
- Static Nested 클래스
- inner 클래스
- 로컬 내부 클래스
- 익명 내부 클래스
Static Nested 클래스의 특징
내부 클래스는 감싸고 있는 외부 클래스의 어떤 변수도 접근 가능하다. 심지어 private로 선언된 변수도 접근 할 수 있다. 그러나 Static Nested 클래스는 그렇지 않다. Static 하기 때문이다.
Nested 클래스는 컴파일 하면 감싸고 있는 클래스 이름, $기호, 그 뒤에 Nested 클래스의 이름이 나온다. 그리고 별도의 클래스 파일로 만들어진다.
Static Nested 클래스를 만들었을때 객체 생성방법
<코드>
감싸고 있는 클래스의 생성자.Static Nested 클래스 이름() 으로 만들수 있다. 객체를 생성하고 난 이후의 사용방법은 일반 클래스와 같다.
이건 왜 만드는건데?
클래스를 묶기 위해서, 겉으로 보기에는 유사하지만 내부적으로 구현이 달라야 할때 static nested 클래스를 사용함.
<코드>
Static nested 클래스와 내부 클래스의 차이
모양이 다르다. static이 붙는가 붙지 않는가의 차이. 내부 클래스는 static이 없다. 그러므로 생성하는 방법도 다르다. 내부 클래스의 객체를 만들려면, 먼저 내부클래스를 감싸고 있는 클래스의 객체를 만들어야 한다. 이 객체를 통해서 내부 클래스의 객체를 만들 수 있다.
이건또 왜?
캡슐화
하나의 클래스에서 어떤 공통적인 작업을 수행하는 클래스가 필요할때, 다른 클래스에서는 그 클래스가 전혀 필요 없을때 내부 클래스를 만들어 사용한다.(주로 GUI)
내부 클래스보다 더 간단한 방법이 익명클래스를 만드는것.
<코드>
클래스의 이름도 없고, 객체 이름도 없기때문에 다른 클래스나 메소드에서는 참조할 수 없다. 만약 객체를 해당 클래스 내에서 재사용하려면 다음과 같이 해야한다.
<코드>
익명클래스의 장점
메모리 절약 - 클래스를 많이 만들면 만들수록 메모리는 많이 필요하다.
지금까지 배운 익명 클래스나 내부 클래스는 모두 다른 클래스에서 사용할 일이 없을때 사용해야 한다.
Nested 클래스의 특징은 꼭 알아야 한다!
참조 가능변수
Static Nested 클래스에서는 감싸고 있는 클래스의 static 변수만 참조할 수 있다.
내부클래스와 익명 클래스는 감싸고 있는 클래스의 어떤 변수라도 참조할 수 있다.
반대로 감싸고 있는 클래스의 입장에서 static nested 클래스의 인스턴스 변수나 내부 클래스의 인스턴스 변수로 접근하는것은?
<코드>
각 클래스의 객체를 생성하고 그 값을 참조하는 것은 가능하다. private도 가능하다.
'Java' 카테고리의 다른 글
| [자바의 신] 어노테이션 (0) | 2020.11.28 |
|---|---|
| [자바의 신] 예외 (0) | 2020.11.28 |
| [자바의 신] 인터페이스와 추상클래스 (0) | 2020.11.20 |
| [자바의 신] Object (0) | 2020.10.21 |
| [자바의 신] 상속 (0) | 2020.10.06 |