Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

[자바의정석] Chap 7. 객체지향 프로그래밍 (내부 클래스) 본문

Java

[자바의정석] Chap 7. 객체지향 프로그래밍 (내부 클래스)

JH_Lucid 2021. 1. 6. 01:53

내부 클래스의 이해가 생각보다 시간이 많이 소요되었다. 간단하게 요약만 하자면,

 

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에 할당하였다.

뭐 일회성으로 사용될 경우 굳이 클래스 정의가 필요 없을 때 사용하는 것 같다. 

Comments