패스잇
CS 기초 · 중급

동시성 프로그래밍에서 불변 객체(Immutable Object)가 갖는 장점은 무엇이며, 어떻게 불변 객체를 설계하여 스레드 안전성을 높일 수 있는지 구체적인 방법을 설명해주세요. 단점이나 제약 사항도 있다면 함께 언급해주세요.

힌트 · 불변 객체는 상태가 변경되지 않아 여러 스레드가 동시에 접근해도 안전합니다. 모든 필드를 final로 선언하고, setter를 제공하지 않으며, 방어적 복사를 통해 스레드 안전성을 확보합니다.

스레드 안전성불변성공유 상태얕은 복사방어적 복사

모범답안

면접관님, 동시성 프로그래밍에서 불변 객체는 스레드 안전성을 확보하는 데 매우 유용합니다. 왜냐하면 불변 객체는 생성 후 내부 상태가 변하지 않기 때문에 여러 스레드가 동시에 접근해도 데이터 경쟁 조건이 발생하지 않기 때문입니다.

불변 객체를 설계하는 방법은 다음과 같습니다. 첫째, 클래스의 모든 필드를 final로 선언하여 변경을 막습니다. 둘째, 객체의 상태를 변경하는 setter 메서드를 제공하지 않습니다. 셋째, 가변 객체를 필드로 가질 경우, 생성자에서 방어적 복사를 수행하여 외부에서 객체 내부의 가변 상태를 변경하는 것을 방지합니다.

하지만 불변 객체는 모든 변경 사항에 대해 새로운 객체를 생성해야 하므로, 객체 생성 비용이 증가할 수 있습니다. 또한, 복잡한 객체의 경우 불변성을 유지하기 위한 코드가 복잡해질 수 있다는 단점도 있습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 동시성 / 멀티스레딩 면접 질문

← 동시성 / 멀티스레딩 면접 질문 전체 보기