티스토리 뷰
|
중첩 클래스(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를 정의할때 자주 사용된다.
바깥 클래스 객체에 접근할 필요가 없는 멤버 클래스를 정의할 때는 항상 선언문 앞에 static을 붙여서 비-정적 멤버 클래스 대신 정적 클래스로 만들자.
=>static을 생략하면 모든 객체는 내부적으로 바깥 객체에 대한 참조를 유지하게 된다.
=>시간과 공간 요구량이 늘어난다.
=>쓰레기 수집이 힘들어진다.
....
'JAVA > Effective Java' 카테고리의 다른 글
규칙21 전략을 표현하고 싶을 때는 함수 객체를 사용하라 (0) | 2018.12.19 |
---|---|
규칙20 태그 달린 클래스 대신 클래스 계층을 활용해라 (0) | 2018.12.19 |
규칙19 인터페이스는 자료형을 정의할 때만 사용하라 (0) | 2018.12.19 |
규칙18 추상 클래스 대신 인터페이스를 사용하라 (0) | 2018.12.19 |
규칙17 계승을 위한 설계와 문서를 갖추거나, 그럴 수 없다면 계승을 금지하라 (0) | 2018.12.19 |
- Total
- Today
- Yesterday
- getBoolean
- DyanomoDB
- reactor
- ConcurrentHashMap
- msyql-connector-java
- Seperate Chaining
- router
- circurit breaker
- notify()
- HashMap
- mariada-connector
- referencedColumnName
- Flux
- dynamodb
- mariadb-connector-j
- MariaDB
- ResultSet
- N+1
- GlobalFilter
- RouteDefinition
- custom config data convertion
- spring cloud gateway
- Lazy
- aurora
- rate limit
- RoutePredication
- reative
- wait()
- notifyAll()
- AbstractMethodError
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |