1. 루비의 진릿값 판정 메커니즘
루비의 if와 unless 조건문은 false와 nil만을 거짓으로 판단하며, 숫자 0, 빈 문자열(""), 빈 배열([]) 등은 모두 참으로 처리합니다. 이는 루비 내부의 RB_TEST 함수에 의해 결정되는데, C 언어 수준에서 객체 ID를 비트 연산하여 0이 아닌 값을 참으로 반환하는 방식입니다.
2. 객체 ID와 비트 연산
루비의 모든 객체는 고유한 ID를 가집니다. false의 ID는 0, nil은 8, true는 20으로 할당되어 있으며, C 언어의 bool 타입 특성(0은 거짓, 그 외는 참)을 활용하여 내부적으로 진릿값을 판별합니다. TrueClass와 FalseClass는 ^, &, |와 같은 논리 연산 메서드를 공유하며, 이는 nil에서도 일부 구현되어 있습니다.
3. 도구와 프레임워크에서의 불리언 추상화
표준 라이브러리의 서술형 메서드(?로 끝나는 메서드)들은 내부적으로 RBOOL 매크로나 Qfalse, Qnil을 반환합니다. 반면 YARD, Sorbet, RBS와 같은 정적 분석 도구는 true 또는 false만을 포함하는 엄격한 Boolean 타입을 정의합니다. Rails 또한 데이터베이스와의 정합성을 위해 특정 값들을 true 또는 false로 변환하는 ActiveModel::Type::Boolean 클래스를 제공하여 루비의 유연한 체계 위에 엄격한 타입을 덧씌웁니다.