티스토리 뷰
반응형
내부 클래스에 static이 권장되는 이유는 크게 두 가지이다. 첫째, static으로 선언되지 않은 내부 클래스는 외부 클래스에 대한 숨은 참조를 저장해야 하기 때문에 이를 위한 시간/공간적 복잡도가 증가해 성능이 떨어진다. 둘째, 내부 클래스가 외부 클래스에 대한 숨은 외부 참조를 갖기 때문에 가비지 컬렉션이 제대로 이루어 지지 않아 메모리 누수가 발생할 수 있다. 이러한 이유로 내부 클래스에서 외부 클래스의 인스턴스 변수에 접근하지 않는 경우 static으로 내부 클래스를 선언하는 것이 좋다. 이 때, static으로 선언된 내부 클래스는 외부 클래스에 대한 숨은 외부 참조를 갖지 않는다.
숨은 외부 참조를 가진다는 의미는 다음 코드를 보면 쉽게 이해할 수 있다.
public class OuterClass {
static int staticVariable = 0;
int nonStaticVariable = 0;
public static class StaticInnerClass {
void accessStaticVariable() {
OuterClass.staticVariable += 1; // 외부 클래스 변수에 접근 가능
}
void accessNonStaticVariable() {
OuterClass.this.nonStaticVariable += 1; // 컴파일 오류
}
}
public class NonStaticInnerClass {
void accessStaticVariable() {
OuterClass.staticVariable += 1; // 외부 클래스 변수에 접근 가능
}
void accessNonStaticVariable() {
OuterClass.this.nonStaticVariable += 1; // 외부 클래스 변수에 접근 가능
}
}
}
반응형
'language > JAVA' 카테고리의 다른 글
추상화(Abstraction), 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism) (0) | 2023.04.25 |
---|---|
생성자나 열거타입으로 싱글턴임을 보증하라 (0) | 2021.01.29 |
[이펙티브 자바] 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2021.01.28 |
Stream, generate(), limit(), distinct(), sorted() (0) | 2021.01.24 |
JAVA Enum(열거 타입) 값 비교하기 (0) | 2021.01.22 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바스크립트 개론
- 디자인패턴
- 전략패턴
- 유지보수
- 동적계획법
- java
- 야근
- html
- CONVENTIONS
- 로그
- DP
- Markov
- 문장 생성기
- 크롬
- 클린코드
- 마르코프
- 코딩의 기술
- RESTful
- REST API
- Warning
- markov chain
- Count
- 몰라서망신
- restful api
- was
- 경고
- 마르코프 연쇄
- GROUP BY
- Spring in Action
- 자바스크립트개론
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함