← 질문 목록
#68깊이 0
상태 변경을 막으면 동시성에서 무엇을 얻는가?
생성 뒤 상태가 변하지 않으면 여러 스레드가 잠금 없이 공유하기 쉽다. 해시 키도 안정된다. 대신 변경마다 새 객체가 필요하다.
| 기준 | 불변 객체 | 가변 객체 |
|---|---|---|
| 공유 | 동기화 부담이 작다 | 경쟁을 제어해야 한다 |
| 변경 | 새 객체를 만든다 | 제자리에서 바꾼다 |
필드를 private final로 두는 것만으로는 부족하다. 생성자에서 가변 인자를 복사하고 내부 배열과 컬렉션도 방어적 복사로 반환해야 한다.
final 필드는 생성자 종료 뒤 초기화 안전성을 제공한다. 단, 생성 중 this가 외부로 노출되면 이 보장이 깨질 수 있다.
작은 값 객체에는 잘 맞는다. 큰 그래프를 자주 갱신하면 할당과 복사 비용이 커져 빌더나 구조 공유 컬렉션이 필요할 수 있다.
추천 꼬리질문
관련 질문
- volatile 키워드는 가시성 문제를 어떻게 해결하는가?언어 · 런타임volatile을 통한 가시성 확보와 불변성을 통한 상태 변경 방지는 모두 멀티스레드 환경의 동시성 제어 방법이다.
- 경쟁 상태를 막으려면 무엇을 고려해야 하는가?운영체제상태 변경을 막아 동시성 문제를 해결하는 것과 경쟁 상태를 막기 위해 고려해야 할 요소는 동시성 제어라는 같은 밑바탕 개념을 공유한다.
- 함수형 프로그래밍을 적용하는 이유는 무엇인가?언어 · 런타임불변성이 함수형의 핵심 수단이고, 그 실익이 동시성에서 드러난다.
- 널 검사를 했는데도 안전 호출이 필요한 때는?언어 · 런타임널 검사가 무효가 되는 원인이 가변 공유 상태다 — 불변이면 검사 결과가 유지된다.
- 코루틴의 구조적 동시성은 무엇을 해결하는가?모바일