1. 중첩클래스
- 클래스 내부에 다른 클래스를 선언하는 것을 중첩클래스라고 한다.
- 중첩클래스의 종류는 정적 중첩 클래스, 내부 클래스, 지역 중첩 클래스, 익명 중첩 클래스가 존재한다.
- 정적 중첩 클래스(static nested class)
- 정적 중첩 클래스는 외부 클래스의 정적 멤버(static으로 선언된 변수, 메소드)와 같은 위치에 선언한다.
- 외부 클래스의 객체를 생성하지 않아도 자신의 인스턴스를 생성할 수 있다.
- 외부 클래스의 모든 멤버변수와 메소드에 접근할 수 있다.
- static으로 선언된 정적 중첩 클래스안에는 정적 멤버를 가질 수 있다. 정적 멤버들은 객체를 생성 안해도 접근 가능하지만 일반 멤버들은 객체를 생성해서 접근해야 한다.
//정적 중첩 클래스의 객체 생성 NestedClass.Div div = new NestedClass.Div(); //정적 중첩 클래스의 정적 멤버 접근 NestedClass.Div.result; //정적 중첩 클래스의 일반 멤버 접근 div.num3; div.getNum3();
- 인스턴스 클래스(inner class(내부 클래스), 인스턴스 클래스)
- 인스턴스 클래스는 외부 클래스의 인스턴스 멤버(멤버변수, 메소드)와 같은 위치에 선언된다.
- 외부 클래스의 객체가 생성된 후에 인스턴스 클래스의 객체를 생성할 수 있다.
- 외부 클래스의 모든 멤버변수와 메소드에 접근할 수 있다.
- 인스턴스 클래스안에는 static 멤버를 선언할 수 없다.
- final static은 상수이기 때문에 선언 가능.
//인스턴스 클래스의 객체 생성 //먼저 외부클래스의 객체를 생성한다. NestedClass nc = new NestedClass(); //위에 생성한 외부클래스의 객체를 이용해서 인스턴스 클래스의 객체를 생성한다. //인스턴스 클래스의 생성자를 외부클래스 객체의 멤버처럼 사용한다. NestedClass.Mul mul = nc.new Mul(); //인스턴스 클래스 객체의 멤버 접근할 수 있다. mul.num1; mul1.getNum1(); mul.multiple();
- 지역 중첩 클래스
- 메소드안에 선언되는 클래스. {} 블록안에 선언되기 때문에 지역 중첩 클래스라고 부른다.
- 외부클래스나 메소드의 매개변수, 지역변수에도 접근이 가능
- 외부클래스나 메소드 안에서 인스턴스를 만들어야지만 사용이 가능하다.
- 익명 중첩 클래스
- 인터페이스나 추상클래스를 구현한 클래스의 인스턴스를 생성할 때 사용된다.
- 클래스의 이름이 없고 선언과 동시에 인스턴스를 생성한다.
- 외부클래스나 메소드의 매개변수, 로컬 변수에 접근할 수 있다.
- workspace에 bin폴더에 가면 anonymous 클래스가 생기게 된다.
- 중첩 클래스의 장점
- 같은 파일안에 여러개의 클래스를 정의할 수 있어서 코드의 가독성을 높일 수 있다.
- 클래스에 접근성을 제한 할 수 있다. private 접근제어자를 사용해서 다른 클래스에서는 참조하지 못하는 중첩 클래스를 만들어서 사용할 수 있다.
- 외부 클래스의 멤버변수나 메소드에 쉽게 접근할 수 있다.
결국 클래스를 두번 겹칠뿐 사용법은 같다고 생각하는게 좋다.
728x90
'네이버클라우드 캠프 5기 > 학습내용 정리' 카테고리의 다른 글
7. JAVA - Generic (0) | 2023.03.28 |
---|---|
6. JAVA - 컬렉션 프레임워크 (List, Map, Set ....) (0) | 2023.03.27 |
4. JAVA - interface 관련 정리 (0) | 2023.03.23 |
3. JAVA - 이클립스에서 터미널에서 실행 가능Jar파일 만드는법 (0) | 2023.03.20 |
2. JAVA - 다형성 관련 정리 (0) | 2023.03.20 |