불변과 가변, 왜 서로의 서브타입이 될 수 없을까?

Why isn't mutable a subtype of immutable, or vice versa?

불변(immutable)과 가변(mutable) 데이터 구조가 서로의 서브타입이 될 수 없는 이유를 Liskov 치환 원칙으로 설명한다. 불변 쌍은 car/cdr 결과가 항상 같다는 계약을 가지므로 해시 콘싱 등에 활용될 수 있지만, 가변 쌍은 이 계약을 지킬 수 없다. 따라서 두 타입은 완전히 분리되어야 하며, 필요하면 타입 클래스나 덕 타이핑으로 다형성을 구현할 수 있다.

불변성은 해시 콘싱의 전제 조건이다!

이 날의 다른 글

2026-09-20