티스토리 뷰

이펙티브 자바 Effective Java 2/E
국내도서
저자 : 조슈아 블로크(Joshua Bloch) / 이병준역
출판 : 인사이트 2014.09.01
상세보기

중첩 클래스(nested class)는 다른 클래스 안에 정의된 클래스다.
중첩 클래스는 해당 클래스가 속한 클래스 내에서만 사용된다.
그렇지 않으면 중첩 클래스로 선언하면 안된다.

중첩 클래스의 4가지 종류
1. 정적 멤버 클래스 (static member class)
2. 비-정적 멤버 클래스 (nonstatic member class)
3. 익명 클래스 (anonymous class)
4. 지역 클래스 (local class)

1번을 제외하면 모두 내부 클래스(inner class)다.

정적 멤버 클래스는 바깥 클래스의 모든 멤버에 접근할 수 있다. (private 까지)
정적 멤버 클래스를 private으로 선언했다면 접근할 수 있는건 바깥 클래스뿐이다.

정적  멤버 클래스 사용례 = 바깥 클래스와 함께 사용할 때만 유용한 public 도움 클래스를 정의할때
ex) 계산기가 제공하는 연산들을 서술하는 enum 자료형 Operation
이 enum은 Calculator 클래스의 public static 멤버 클래스여야 할것이다.
그러면 클라이언트는 Calculator.Operation.PLUS, Calculator.Operation.MINUS 같은 이름으로 연산을 참조할 것이다.

비-정적 멤버 클래스는 바깥 객체 없이는 존재할 수 없다.
비-정적 멤버 클래스는 바깥 클래스의 메서드를 호출할 수 있고 this 구문을 통해 참조를 획들할 수 있다.

비-정적 멤버 클래스는 Adapter를 정의할때 자주 사용된다.

public class MySet<E> extends AbstractSet<E> { public Interator<E> iterator() { return new MyIterator(); } private class MyIterator implements Iterator<E> { .... } }

바깥 클래스 객체에 접근할 필요가 없는 멤버 클래스를 정의할 때는 항상 선언문 앞에 static을 붙여서 비-정적 멤버 클래스 대신 정적 클래스로 만들자.
=>static을 생략하면 모든 객체는 내부적으로 바깥 객체에 대한 참조를 유지하게 된다.
=>시간과 공간 요구량이 늘어난다.
=>쓰레기 수집이 힘들어진다.
....



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함