코드 품질 개선 - 세션 45: 끝이 null이면 모든 것이 해결될까?
·2025.09.05 11:00
반복자(Iterator)의 종료 신호로 null을 사용할 때 실제 데이터와 구분하지 못해 발생하는 문제를 방지하는 설계 방법을 제시한다.
Java나 Kotlin의 Iterator에서 요소가 없는 상태로 next()를 호출하면 NoSuchElementException이 발생한다. 이를 방지하기 위해 요소가 없을 때 null을 반환하는 SafeIterator를 구현하여 예외 없이 안전하게 코드를 작성할 수 있다.
하지만 이 방식에는 치명적인 문제가 있다. 만약 컬렉션의 요소 자체에 null이 포함되어 있다면, 데이터로서의 null과 종료 신호로서의 null을 구분할 수 없게 된다. 이로 인해 반복문이 실제 데이터가 남아 있음에도 불구하고 조기에 종료되는 버그가 발생할 수 있다.
이러한 문제를 해결하기 위한 설계 전략은 크게 두 가지다.
- 타입 제한 및 명시적 타입 사용: 요소의 타입을
T : Any로 제한하여null이 포함될 수 없도록 하거나,Optional또는NullableValue와 같이 '비어 있음'을 명시적으로 나타내는 별도의 타입을 정의한다. - 전용 반환 타입 정의:
NextResult와 같은 별도의 반환 타입을 만들어, 요소가 존재하는 경우(Exists)와 요소가 없는 경우(NoSuchElement)를 명확히 구분한다. 이를 통해 데이터가null이더라도 종료 신호와 혼동하지 않고 안전하게 처리할 수 있다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.