AI Briefing

코드 품질 개선 - 세션 61: 이 함수는 단 한 명만을 위한 것입니다

·2026.01.09 11:00

함수 상태를 객체의 속성으로 관리할 때 발생하는 동시성 문제를 분석하고, 이를 해결하기 위한 두 가지 설계 방안을 제시한다.

함수의 실행 상태를 나타내기 위해 클래스 내부에 isCalculating과 같은 Boolean 속성을 사용하는 방식은 동시성 환경에서 결함이 발생할 수 있다. 여러 호출이 동시에 실행될 경우, 특정 호출이 종료되면서 상태를 false로 변경하면 아직 실행 중인 다른 호출이 있음에도 불구하고 상태가 잘못 표시되는 문제가 발생한다.

이러한 문제는 함수 호출의 상태를 수신자(Receiver)의 상태로 취급하기 때문에 발생한다. 즉, 여러 호출이 하나의 수신자를 공유할 때 각 호출의 개별적인 상태를 구분하지 못하는 것이다. 이를 해결하기 위한 두 가지 주요 설계 방안은 다음과 같다.

  • 반환 값에 호출 상태 포함: CompletableFutureDeferred와 같이 호출마다 독립적인 상태를 갖는 객체를 반환하여 호출과 상태 간의 1:1 관계를 형성한다.
  • 수신자 상태 분리: 단순히 Boolean을 사용하는 대신, 현재 진행 중인 호출 횟수를 관리하는 AtomicInteger 등을 사용하여 호출 횟수가 0보다 큰지를 확인한다.

이러한 문제는 멀티스레드 환경뿐만 아니라 재귀 호출이 발생하는 단일 스레드 환경에서도 발생할 수 있으므로 설계 시 주의가 필요하다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.