본문 바로가기

Programming/Swift for Beginners

[Swift] 020 Iterating Collections (컬렉션 반복) for beginners


기본적인 컬렉션 타입인 배열과 딕셔너리를 모두 살펴보았습니다. 이젠 배열과 딕셔너리를 반복하는 방법에 대해 알아보고자 합니다. 컬렉션을 반복하는 것은 배열이나 딕셔너리 내의 값을 각각 검사하고 검사 후 잠정적으로 작업을 수행하는 것입니다.

반복은 우리가 일상생활에서 항상 하는 일을 말합니다. 업무를 완료하기 위해 문서로 작성된 단계별 리스트대로 작업할 때 이 리스트의 내용을 반복하는 것입니다. 데이터를 가지고 반복할 때도 다르지 않습니다. 반복은 매우 기본적인 코딩 작업으로 예제를 가지고 다뤄보도록 하겠습니다. Swift에서는 컬렉션에 대한 반복을 쉽게 만들 수 있게 다양한 구문을 제공합니다.

배열 반복(ARRAY ITERATION)

C 언어를 사용해 본 분들이라면 for 반복문 개념이 매우 친숙할 것입니다. Swift는 C언어보다 기본적으로 풍부한 여러 종류의 for 반복문을 제공합니다. 프로그래밍 언어를 잘 알지 못하더라도 for 반복문 개념을 바로 이해하실 수 있을 것입니다.

for-in 반복문은 아래 예제처럼 생성됩니다.


itemName 은 어떤 이름을 넣어도 무방합니다. 반복이 일어나면 리스트의 각 값에 변수를 할당합니다. 이 list는 반복이 일어나고 있는 객체이고 { } 괄호 안의 모든 내용은 실행되는 코드입니다.

앞에서 언급한 combinedRefillableCandyJar 배열을 다시 한번 살펴보겠습니다.



다음 예제는 개별 배열 값을 출력하기 위해 Swift의 for-in 구문을 사용하는 코드 세그먼트입니다. 코드가 여러 행으로 구성되어 있습니다. REPL에 코드를 입력하면 프롬프트는 숫자와 > 기호 순서대로 표시되고 그 다음 행의 숫자와 마침표 다음으로 자리를 바꿉니다. 프롬프트는 왼쪽 괄호 기호인 { 를 추가하면 다음 행으로 넘어가게 됩니다. { 기호는 REPL에 새로운 코드 블록이 시작되었다고 알려줍니다.

이런 특징 때문에 오른쪽 괄호 기호인 }를 포함하는 마지막 행을 입력하기 전까지는 결과가 나타나지 않습니다.

위 코드 블록의 설명은 이렇습니다. comebinedRefillableCandyJar 배열의 항목들은 각각의 candy 변수에 할당되었습니다. 배열 내에 9개의 값이 있기 때문에 for-in 문은 9번 반복을 하게 됩니다. 반복할 때마다 { } 로 묶인 코드가 실행됩니다. 위 경우에는 값이 포맷된 문자열 값으로 결합되고 그 내용이 화면에 출력됩니다.

또 다른 버전의 for-in 문은 배열 내의 값과 인덱스를 모두 제공합니다.

Swift의 EnumerateSequence() 메서드는 앞서 정의된 배열인 combinedRefillableCandyJar를 래핑합니다. 이 메서드는 편리하게도 값의 인덱스와 배열 내에 있는 값을 모두 포함하는 튜플을 반환합니다. 변수 index 와 candy는 결합된 문자열을 생성하기 위해 참조합니다.

딕셔너리 반복(DICTIONARY ITERATION)

for-in문을 사용해 딕셔너리를 반복하는 것은 앞서 확인한 배열 예제와 동일합니다. 아래 예제로 설명을 이어 가겠습니다.

딕셔너리는 키(key)와 값(value)으로 구성되어 있기 때문에 자동으로 튜플을 반환합니다. 이 튜플은 캡쳐되고 튜플의 내용은 변수 key 와 value 에 할당됩니다. value는 그 자체가 변수이며 print 메서드는 배열을 매우 편리하게 표시한다는 점에 주목하면 됩니다.

반복문을 더 자세히 알아보겠습니다. 아래 예제처럼 for-in 문 안에 또 다른 for-in 문을 넣어보겠습니다.

중첩 for-in 문의 예제입니다. 딕셔너리 반복문을 수행하기 위해 Swift는 변수 value(배열)의 값을 캡쳐하고 변수에 enumerate() 메서드를 사용해 추가 반복을 수행합니다.

요약(SUMMARY)

지금까지 컬렉션에 대해 알아보았습니다.배열과 딕셔너리는 텍스트에서 숫자에 이르기까지 다양한 자료 타입을 조직하고 그룹화하는 매우 훌륭한 구조체입니다. 컬렉션 타입은 다른 컬렉션을 포함하고 있어 매우 정교한 데이터 참조 구성표를 만들 수 있게 해줍니다. 마지막으로 Swift가 새로운 배열과 딕셔너리를 선언하는데, 유연한 문법을 제공한다는 내용도 살펴보았습니다. 심지어, 새로운 컬렉션을 생성할 때 코드를 읽는 방법까지도 개발자가 선택할 수 있다는 점도 알수 있습니다.