iOS/Swift

[Swift] 컬렉션 타입 인덱스에 관하여 (About Collection Type index)

하노 Hano 2022. 5. 26. 17:34

 

안녕하세요 하노입니다 :)

오늘은 컬렉션 타입에서 사용하는 인덱스에 대해 나누고자 합니다!

 

우선 설명하기에 앞서 코드를 먼저 보고 오겠습니다.

 

var strings = ["영", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구"]

print("\(strings.startIndex)")
print("\(strings.endIndex)")

 

위처럼 stirngs 이름의 Array를 선언해주고 각각. startIndex,. endIndex를 출력하게 되면 값이 어떻게 나올까요??

 

정답은

print("\(strings.startIndex)")	// 0
print("\(strings.endIndex)")	// 10

 

로 나옵니다! 혹시 startIndex 값은 예상하셨지만 endIndex 값은 조금 이상하지 않나요??

 

오늘은 이 것에 대해 이야기해보려고 합니다! (여기서부터는 저의 뇌피셜입니다!)

 

 

우선 strings이라는 Array를 만들면 이렇게 각각 멤버가 Array 안에 들어갑니다

 

하지만 여기서 index를 표현해보면

이런 식으로 표현됩니다!

 

그런데 index는 일종의 멤버의 주소라서 멤버 앞에 인덱스가 있어야 하는데요. 이런 식으로 계산해보면,

"영"의 index는 0

"일"의 index는 1

.

.

.

"구"의 index는 9

 

그러면 10이라는 index 값이 남습니다.

 

여기서 배열의 구조에 대해 한번 살펴볼 필요가 있을 것 같습니다.

 

배열은 항상 멤버 끝 부분에 NULL(또는 \0으로 표현) 값이 들어갑니다!

반대로 말하면 배열의 끝부분을 알기 위해서 배열의 맨 끝부분인 NULL을 사용합니다!

특히 C언어는 끝부분에 들어가는 NULL을 사용하여 배열을 초기화하기도 하는데요! (배열의 첫 멤버에 NULL을 넣어 초기화시킵니다!

 

그럼 NULL(\0)을 넣어서 다시 한번 배열을 그려보면 아래 그림처럼 나옵니다!

"영"의 index는 0

"일"의 index는 1

.

.

.

"구"의 index는 9

"\0"의 index는 10

으로 나옵니다!

 

그럼 endIndex의 미스터리는 풀렸네요! index 10의 주인은 NULL(\0)이었습니다!

 

 

여기까지가 제가 생각해본 결과이구요!

사실 배열 내 index를 사용할 일이 많아지다 보니깐 endIndex에 대해서 알게 되고

왜 endIndex가 멤버의 +1이 찍힐까 예전부터 고민하다가 얻은 결과입니다! (사실 제가 C를 몰랐으면 영원히 몰랐을 수도 있습니다... ㅎㅎ)

 

그리고!! 어디까지나 제가 생각해본 결과인 만큼 틀리면 바로 댓글 달아주시면 감사드리겠습니다!