본문 바로가기

Programming/Swift for Beginners

[Swift] 017 ARRAYS (배열) for beginners



Birds of a feather (유유상종)

배열이 다른 타입의 값을 가질 수 있을까? 

위 예제를 보니 Swift는 확실히 배열이 다른 타입의 값을 가지는 것을 허용하지 않습니다.따라서 배열의 값은 동일한 타입이어야 합니다.

그렇다면 배열 선언 자체에서 값 타입에 대해 구체적으로 명시하고 싶으면 어떻게 할까요?

배열이 특정 타입의 값을 가지도록 선언하려면 콜론을 추가하고 그 다음에 [] 괄호로 묶은 타입의 이름을 넣습니다.

Extending the array (배열확장)

앞에서 다룬 가변 변수인 refillableCandyJar 배열을 다시 한번 살펴보겠습니다. 여기에 새로운 배열을 추가해 보겠습니다.

이번에는 결과창을 보여주지 않아 어떤 변화가 발생했는지 알 수가 없네요.

예상했던 대로 Candy Canes 가 배열의 4번째 위치(배열 첨자 3)에 추가되었습니다.

이번에는 다른 문법을 사용해보겠습니다.

단일 문자열 값을 추가하는 것 대신에 다른 배열을 추가했습니다. Swift의 유연성을 여실히 보여주는 예입니다. += 연산자만으로 배열의 내용을 다른 배열에 추가할 수 있습니다. refillableCandyJar의 모든 내용을 확인하였습니다.

지금까지 상수 배열과 변수 배열을 조금 알아보았습니다. 상수 배열을 변수 배열에 할당도 해 보았고 가변 배열도 만들어 보았습니다. append() 메서드와 += 연산자를 사용해 배열의 내용도 수정했습니다. 

Replacing and removing values (값 대체 및 삭제)

배열 값을 대체하는 것은 배열 첨자를 명시하는 것과 배열 첨자를 새로운 값으로 할당하는 것만큼 쉬운 일입니다. Happy Ranchers를 다른 사탕 종류로 대체해 보겠습니다.

잘 대체가 되었습니다. 

그러나 값을 삭제하고 싶으면 어떻게 하면 될까요? 

removeAtIndex()라는 배열 메서드를 사용했습니다. removeAtIndex() 메서드는 제거하려는 인덱스 값의 단일 파라미터를 가지고 있습니다. removeAtIndex() 메서드의 결과는 값이 제거되었고 그 값이 $R3에 할당되었습니다.


수 refillableCandyJar를 살펴보면, Googey Bears가 삭제되었고 전체 배열의 내용이 모두 "이동"한 것을 볼 수 있습니다. 사탕 항아리에 7개의 항목 대신에 이제는 6개만 남았습니다.

배열에서 항목 하나가 제거되면 다른 값이 "빈 공간을 채우게"되고 그 다음 값이 위의 빈 공간으로 이동하면서 모두 자리 이동을 하게 됩니다.

다음 예제는 배열의 마지막 값을 삭제하는 또 다른 유용한 방법입니다.

마지막 값이 삭제되면서 제거된 값을 반환하고 배열의 값이 6개에서 5개로 줄어들었습니다.

Inserting values at a specific location(특정 위치에 값 삽입)

이제까지 append() 메서드를 이용해 배열의 마지막에 값을 추가하고, 배열에서 특정 위치의 값을 삭제하라고 Swift에 지시하기도 했습니다. 그럼 반대로 값을 삽입하기가 얼마나 쉬운지도 확인해 보겠습니다. 특정한 인덱스에 배열 값을 넣고 싶다면 배열의 insert 메서드를 이용합니다.

현재 "Candy Canes"가 있는 자리에 "Twirlers"를 추가해 보겠습니다.

삽입이 잘 되었는지 확인하기 위해 배열의 내용을 살펴보겠습니다.



"Twirlers"가 잘 삽입되었습니다. "Twirlers"가 2번 위치에 보입니다. insert() 메서드 덕분에 새로운 값을 수용하기 위해 값이 한 단계씩 내려간 것을 볼 수 있습니다. insert() 메서드는 배열에 삽입하는 값과 삽입이 일어나는 곳의 인덱스(또는 위치) 이렇게 두 개의 파라미터를 가지고 있다는 것을 알 수 있습니다.

 insert() 메서드의 흥미로운 점은 두 번째 파라미터입니다. 명명 파라미터는 전달되는 파라미터에 대한 내용을 제공함으로써 Swift 코드의 가독성을 높여줍니다. 뒷부분에서 Swift의 메서드 이름 구성애 대해 알아볼 예정입니다.

Combining Arrays (배열 결합)

배열을 결합하는 Swift의 문법은 문자열을 결합하는 것만큼 자연스럽습니다. 다른 종류의 사탕을 생성해서 다른 사탕 항아리 배열을 만들어 보겠습니다.

앞서 사용한 refillableCandyJar 배열과 6개의 값을 사용해 배열 조합 문법으로 세 번째 배열을 만들어 보았습니다. 그리고 세 개의 값을 가진 새로운 anotherRefillableCandyJar도 만들어 보았습니다.

새로운 배열은 9개의 값이 있습니다. 첫 번째 배열은 6개, 두 번째 배열은 3개의 값을 가지고 있습니다. 그리고 값은 원래 배열에서 사용된 순서대로 나열되었습니다.

지금까지, 배열에 관해 많은 내용을 다루었습니다. 배열은 값이 관련이 있건 없건 간에 값의 리스트(lists of values)를 저장하는데 매우 훌륭합니다. 배열은 let 명령어로 상수를 선언하게 되면 불변하게 만들 수도 있고 값을 추가, 제거 또는 대체할 수도 있는 가변 배열이 되기도 합니다. 한 번 더 언급하자면 배열 내의 모든 값은 반드시 동일한 타입이어야 합니다.