null은 왜 "모든 참조 타입의 하위"로 간주되는가?
2025. 4. 30. 16:10ㆍHigh Level Programming Language/Learning the Java Language
자바에서 흔히 "null은 모든 참조 타입의 하위 타입(subtype)"이라고 표현하는 이유는, 타입 계층 상의 직접적인 '하위 클래스'라는 뜻이 아니라, 타입 시스템에서 null
값이 모든 참조형 변수에 대입될 수 있기 때문입니다.
즉, null
은 특별한 리터럴로, 참조형 타입의 모든 변수에 할당할 수 있는 공통의 "값"이기 때문입니다.
✅ null
은 왜 "모든 참조 타입의 하위"로 간주되는가?
🔹 자바 타입 시스템 관점에서
- 자바에서는 기본 타입(primitive type)을 제외한 모든 클래스, 배열, 인터페이스는 참조 타입(reference type)입니다.
null
은 이들 모든 참조 타입 변수에 할당할 수 있는 유일한 값입니다.
String s = null;
Number n = null;
List<String> list = null;
Object obj = null;
Runnable r = null;
위 모든 문장은 문제 없이 컴파일됩니다. 이 말은 곧 null
이 모든 참조 타입의 값 공간(value space)에 포함된다는 뜻이고,
타입 이론 상에서 이를 모든 참조 타입의 공통된 하위 타입으로 취급합니다.
✅ JVM 관점에서의 정리
null
은 실제 메모리에 객체를 참조하지 않는 상태입니다.- 내부적으로는 특정 주소(대개 0 또는 특별한 null 표시값)를 참조로 저장하고 있음
- 어떤 타입의 레퍼런스 변수든
null
이라는 동일한 메모리 상태를 가질 수 있기 때문에 호환성 상의 최하위로 간주됩니다.
✅ 자바 컴파일러 입장에서
- 다음 코드는 모두 유효합니다:
String s = null;
Object o = null;
Runnable r = null;
- 하지만 다음은 에러입니다:
int i = null; // ❌ 기본 타입에는 null 할당 불가
이는 null
이 참조 타입 전용 값임을 명확히 보여주며, 따라서 null은 참조 타입 계층 내에서 공통적으로 호환 가능한 하위 값입니다.
🔎 타입 이론의 표현
타입 이론에서는 null
을 Bottom Type 또는 null type이라 부르며,
이는 "모든 참조 타입의 하위 타입"으로 간주됩니다.
✅ 결론
null
은 자바 타입 시스템에서 "모든 참조 타입의 하위 타입"처럼 작동합니다.- 이것은 형식적으로 상속 구조를 따른다는 의미가 아니라,모든 참조 타입 변수에
null
을 대입할 수 있다는 점에서 하위 호환 타입(substitutable type)으로 취급된다는 뜻입니다.
'High Level Programming Language > Learning the Java Language' 카테고리의 다른 글
Type Inference 알고리즘의 원칙: '후반부 결과'를 사용하지 않는 이유 (0) | 2025.04.30 |
---|---|
Prime Number 17 (1) | 2025.04.23 |
Prime Number 31 (0) | 2025.04.23 |
equals() 메서드의 5대 계약 원칙 (0) | 2025.04.23 |
Object.equals() (0) | 2025.04.23 |