스택큐힙리스트

왜 Array.Length는 int이고 uint가 아닌가 [중복] 본문

카테고리 없음

왜 Array.Length는 int이고 uint가 아닌가 [중복]

스택큐힙리스트 2024. 1. 10. 19:56
반응형



Array.Length는 int이고 uint가 아니죠. 이게 조금 거슬리네요. 길이 값은 결코 음수가 될 수 없는데...


내가 만든 클래스의 길이 속성에도 이를 대비해 int를 사용해야 했고, int 값을 지정할 때 명시적으로 캐스팅해야 했습니다...


그래서 궁극적인 질문은: 부호 없는 정수(uint)를 사용하는 용도가 있을까요? 심지어 Microsoft도 그걸 사용하지 않는 것 같습니다.

답변 1

Unsigned int은 CLS compliant하지 않으며, 따라서 UInt를 구현하는 언어만 속성의 사용을 제한할 것입니다.


여기를 참조하세요:


Framework 1.1



.NET Framework Class Library 소개



Framework 2.0



.NET Framework Class Library 개요


답변 2

배열의 길이를 나타내는 속성인 Array.Length가 int형이지 uint형이 아닌 이유에 대해 알아보자.
처음으로, Array.Length 속성은 배열의 요소 개수를 나타내는 것으로, 속성의 반환 형식은 int입니다. 이렇게 구현된 이유는 여러 가지 이유가 있습니다.
첫째, C#에서 배열의 인덱스는 양의 정수값만을 허용합니다. 이것은 uint의 경우 음수 값을 제외한 양수만을 나타낼 수 있기 때문에 배열의 인덱스로 사용하기에는 제한 사항이 있을 수 있습니다. 따라서 int 형식을 사용함으로써 양수와 음수를 모두 표현할 수 있어 배열 인덱스에 대한 더 유연한 사용을 가능하게 합니다.
둘째, Array.Length 속성의 반환 형식은 uint형보다 int형이 훨씬 널리 사용되기 때문입니다. C#과 .NET 프레임워크는 기본적으로 int를 사용하는 경우가 많아서, 코드의 일관성을 유지하기 위해 Array.Length도 int로 구현되었습니다. 만약 uint를 반환형으로 사용했다면 다른 코드와의 호환성이 떨어지게 되고, 변환에 따른 오버헤드도 발생할 수 있습니다.
셋째, int 형식은 메모리 공간을 덜 차지하기 때문입니다. uint 형식은 int와 거의 동일한 크기를 가지지만, 부호 비트를 포함하지 않기 때문에 한 비트를 더 사용합니다. 배열의 길이는 일반적으로 음수가 될 수 없으므로, 음수 값을 표현할 필요가 없는 uint보다 int가 더 효율적입니다.
이러한 이유로, C#에서는 배열의 길이를 나타내는 Array.Length 속성을 int로 구현하게 되었습니다. int 형식은 양수와 음수를 모두 표현할 수 있고, 코드의 일관성과 호환성을 유지하는 동시에 메모리 공간을 절약할 수 있기 때문에 우수한 선택입니다.

반응형
Comments