Item 24. 맴버 클래스는 되도록 static으로 만들라

심규환·2022년 2월 12일
0

Effective Java

목록 보기
23/29

이번 아이템에선 중첩 클래스(nested class)에 대한 내용이다. 중첩 클래스란, 다른 클래스 안에 정의된 클래스를 말한다. 이 중첩 클래스는 자신을 감싼 바깥 클래스에서만 쓰여야 한다.
중첩 클래스의 종류는 정적 맴버 클래스, 비정적 맴버 클래스, 익명 클래스, 지역 클래스 이 네 가지가 있는데. 여기서는 두 가지만 설명하겠다.

먼저 정적 맴버 클래스(static)를 살펴보겠다. 정적 맴버 클래스는 다른 클래스 안에서 선언이 되며 바깥 클래스의 private 맴버에 접근할 수 있다는 것을 제외하면 일반 클래스와 동일하다.
정적 맴버 클래스는 바깥 클래스와 함께 쓰일 때 도움을 주는 도우미 클래스로 쓰이는데. 한 예로 계산이 클래스 안에 연산 종류를 정의하는 열거 타입의 클래스로 선언할 수도 있다.
Caculator.Operator.MINUS, Caculator.Operator.PLUS 와 같이 Calculator 클래스 내부에 선언해 사용할 수 있다.

정적 맴버 클래스와 비정적 맴버 클래스와의 차이는 구문상 'static'을 들 수 있지만 의미상의 차이는 꽤 큰편이다.
비정적 맴버 클래스는 바깥 클래스와 암묵적으로 연결되어 있다. 비정적 클래스의 내부에서 정규화된 this(클래스명.this)를 사용해서 바깥 클래스 인스턴스의 참조를 가져 올 수 있다.
그렇기 때문에 만약 바깥 클래스에 접근할 일이 없다면 무조건 static으로 선언하자. 그렇지 않으면 숨은 외부 참조를 갖게되어 가비지 컬렉션이 바깥 클래스의 인스턴스를 회수하지 못할 수 있다.

profile
장생농씬가?

0개의 댓글