코드 품질 개선 - 세션 37: 긴 생명주기 간의 얽힘
·2025.07.11 11:00
객체의 생명주기가 서로 얽히면서 발생하는 상태 관리 오류와 설계상의 문제점을 분석한다.
로그를 버퍼에 모았다가 한꺼번에 전송하는 FooBufferedLogger 클래스를 예로 들어 설계 오류를 살펴본다. 초기 설계에서는 각 tag마다 별도의 인스턴스를 생성하여 Closeable 인터페이스를 통해 안전하게 관리했다.
하지만 FooApiClient를 재사용하고 tag 관리를 숨기기 위해, 하나의 인스턴스 내에서 startLogging과 finishLogging을 호출하여 내부 상태를 변경하도록 설계를 변경했다. 이 과정에서 예상치 못한 문제가 발생했다.
함수 호출 구조상 executeBar가 executeBaz를 호출할 때, 내부 함수에서 호출한 startLogging이 상위 함수의 tag 상태를 덮어쓰는 스파게티 얽힘(Spaghetti entanglement) 현상이 나타난 것이다. 결과적으로 상위 함수의 로그 데이터가 유실되거나 잘못된 태그로 기록되는 문제가 발생한다.
이 문제의 근본 원인은 서로 다른 **생명주기(Lifecycle)**를 가진 작업들이 하나의 객체 상태에 의존하며 복잡하게 얽혀 있기 때문이다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.