forDevLife
[자바의정석] Chap 7. 객체지향 프로그래밍 (내부 클래스) 본문
내부 클래스의 이해가 생각보다 시간이 많이 소요되었다. 간단하게 요약만 하자면,
1) 인스턴스 클래스, static 클래스, local 클래스(메서드 내 또는 초기화 블럭), 익명 클래스로 나뉜다.
2) 내부 클래스도 클래스이므로, abstract, final와 같은 제어자 및 private, protected 접근 제어자도 사용 가능하다.
3) 내부 클래스 중에서 static 클래스만 static 멤버를 가질 수 있다.
4) static 메서드 내부에서는 인스턴스 멤버에 접근할 수 없다. 강제로 하려면, 외부 클래스를 생성할 필요가 있다.
InnerEx2 outer = new InnerEx2(); // 외부 클래스 선언
InstanceInner obj1 = outer.new InstanceInner(); // 또는 new InnerEx2().new InstanceInner() 도 가능하다.
5) 지역클래스에서 외부클래스의 인스턴스 멤버 및 static 멤버를 모두 사용 가능하다. 하지만 지역클래스가 포함된 메서드에 정의된 지역변수는 final로 선언된 것만 사용 가능하다.
java8 부터 자동으로 final을 넣어주며, 일단 메서드가 종료될 때 지역 클래스 인스턴스는 힙에 남아 있으며, 변하지 않는 무언가를 계속 참조해야하기 때문에 final로 선언해야 한다고 이해하자.일단..
6) 익명 클래스는 클래스 이름이 없으며, 클래스 선언과 객체 생성을 동시에 하기 때문에 단 한번만 사용 가능, 오직 하나의 객체만 생성 가능하며 생성자도 가질 수 없다. 조상 클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 사용해서 정의한다.
Object iv = new Object(), 조상인 object를 이용하여 익명 클래스를 생성, iv에 할당하였다.
뭐 일회성으로 사용될 경우 굳이 클래스 정의가 필요 없을 때 사용하는 것 같다.
'Java' 카테고리의 다른 글
[자바의정석] Chap 11. 컬렉션 프레임워크(Arrays / comparator / comparable) (0) | 2021.02.08 |
---|---|
[자바의정석] Chap 11. 컬렉션 프레임워크(스택, 큐) (0) | 2021.01.29 |
[자바의정석] Chap 7. 객체지향 프로그래밍4 (0) | 2020.12.28 |
[자바의정석] Chap 7. 객체지향 프로그래밍3 (0) | 2020.12.28 |
[자바의정석] Chap 7. 객체지향 프로그래밍2 (0) | 2020.12.10 |