본문 바로가기
iOS/Swift

Swift Collection에 대해 알아보자!!

by iOS rOar 2022. 7. 12.

안녕하세요 rOar입니다. 😀

 

새싹 2주차 진행중인데, 시간이 삭제되고 있어요.😇

 

오늘은 스위프트에서 사용되는 컬렉션들에 대해 간단하게 알아보고 넘어가려고 합니다.!

 

컬렉션에 대한 이해도가 높으면 알고리즘이나 앱만들때 굉장히 유리한 것 같아요!(개인적인 생각)

 

그렇기 떄문에 굉장히 잘 알고 넘어가야 한다고 생각합니다.

 

그럼 시작해볼께요.!!


컬렉션(Collection) 이란??

스위프트에서 사용하는 여러 데이터를 한꺼번에 다루는 바구니(?) 타입 정도로 생각해주시면 될 것 같아요.


스위프트 컬렉션(Collection)의 종류

1) 배열(Array) : 데이터를 순서대로 저장하는 컬렉션

2) 딕셔너리(Dictionary) : 데이터를 키(Key)값(Value)으로 하나의 쌍으로 만들어 관리하는 순서가 없는 컬렉션

3) 셋(Set) : 수학에서의 집합과 비슷한 연산을 제공하는 순서가 없는 컬렉션

4) KeyValuePairs : 딕셔너리와 유사한 형태이지만, 배열처럼 순서가 있는 컬렉션(Swift 5.2 버전부터 나온 컬렉션 이라고해요..)

 

하나씩 차례대로 알아보도록 하겠습니다.


1.  배열(Array)

배열의 특징으로는 데이터를 순서대로 저장하는 컬렉션 이라는 점 입니다.

배열(Array)의 생성

우선 배열은 위와같이 선언을 해주시면 되는데요!

변수나 상수와 처럼 한 바구니[ ] 안에 같은 타입의 데이터만 저장이 가능합니다.

마찬가지로 타입추론 혹은 타입어노테이션이 모두 적용됩니다.

빈 배열(Array)의 생성

위와같은 방식으로 빈 배열도 생성해 주실 수 있는데요, 앱을 만드시거나 알고리즘을 푸시다 보면

빈 컬렉션을 생성해주어야 하는 경우가 많으니 알고 넘어가주시면 좋을것 같아요.

 

그리고 배열을 생성하였으면 안에있는 데이터를 꺼내서 쓸 수 있어야겠죠?!

이때 안에 들어있는 데이터를 요소(element)라고 지칭합니다.

위와 같은 방식으로 대괄호를 이용하여 각 요소에 접근하는 문법을 서브스크립트(Subscript)문법 이라고 합니다.

그리고 이때 사용되는 순서를 index라고 표현합니다. (index는 0부터 시작!!⭐️)

풀어서 말하면, index로 각 요소(element)에 접근 한다고 표현해 주시면 됩니다.

 

여기서부터 많이 사용되지만 헷갈릴 수 있는 부분인데요.

 

삽입(insert), 교체(replace), 추가(append), 제거(remove) 관련 속성입니다.

우선 무작정 외우시기 보단 각 컬렉션의 특징을 잘 생각해주시면 이해하실 수 있는 부분이에요!

배열(Array)의 기본속성

배열(Array)의 경우에는 순서가 있는 컬렉션이기 때문에 삽입, 교체, 추가, 제거 모두 다른 속성으로 구현이 됩니다.

또한 배열(Array)의 경우 순서가 있기 때문에 중복된 값을 저장 할 수 있습니다.


2.  딕셔너리(Dictionary)

딕셔너리의 특징은 키(Key)와 값(Value)의 하나의 쌍으로 이루어진 순서가 없는 컬렉션 이라는 점 입니다.

딕셔너리(Dictionary)의 생성

위와 같이 키(Key) : 값(value)으로 구성되어 있는것을 보실 수 있습니다.

이때, 키(Key)값은 유일(Hashable)해야 하며, 키(Key)와 값(Value)은 각각 동일한 타입의 데이터를 담을 수 있습니다.

 

빈 딕셔너리(Dictionary)의 생성

위와 같이 빈 딕셔너리(Dictionary)를 생성하실 수 있습니다.

키(Key) : Int

값(Value) : String

으로 이루어진 빈 딕셔너리가 되겠죠?!

 

딕셔너리(Dictionary)의 요소(element)에 대한 접근

배열(Array)과는 다르게 위와같은 방법으로 접근이 가능합니다.

주의하셔야 할 점은 위와같이 요소(element)에 접근을 해서 값(Value)을 뽑아낼때,

해당 키(Key)값이 없을 가능성이 있기 때문에, 옵셔널(Optional)로 반환이 됩니다.

그래서 해당 요소를 사용하실때는 일반적으로 언래핑(Unwrapping)이라는 과정을 거쳐야 하는데요,

언래핑(Unwrapping)의 방법으로는 대표적으로

강제 언래핑, if let 바인딩, guard let 바인딩, 닐 코얼레싱(Nil-Coalescing) 등이 있습니다.

옵셔널(Optional)에 관한 자세한 문법은 다음번에 포스팅 하도록 하겠습니다.

 

다음은 딕셔너리(Dictionary)에서의 삽입(insert), 교체(replace), 추가(append), 제거(remove) 속성입니다.

딕셔너리(Dictionary)의 기본속성

위에서 말씀 드렸지만, 딕셔너리(Dictionary)는 순서가 없는 컬렉션 입니다.

때문에, 배열(Array)에서와 같이 index(순서)를 이용한 문법이 불가능 하다는 점 입니다.

딕셔너리(Dictionary)에서는 업데이트(update) 키워드를 기억해주셔야 하는데요.!

업데이트(update)로 삽입, 교체, 추가 모두 가능하게 됩니다.

 

삭제(remove)는 해당 키(Key)에 대한 값(Value)이 없으면 nil을 리턴하기에 따로 존재합니다. 


3.  셋(Set)

셋(Set)은 수학에서의 집합과 비슷한 연산을 제공하는 순서가 없는 컬렉션 입니다.

셋(Set)의 생성

위와 같이 셋(Set)을 생성해 주실 수 있는데요.!

주의하실점은 타입 어노테이션(Type Annotation)을 무조건⭐️ 해주셔야 합니다.

그렇지 않으면, 배열(Array)로 생성되기 때문에 주의 해주셔야해요!

또한, 특징으로는 서브스크립트 문법이 없다는 점.

그리고 요소(element)를 중복으로 넣어도, 중복된 요소는 저장이 되지 않습니다.⭐️

딕셔너리(Dictionary)는 키(Key)값이 Hashable하다면,

셋(Set)은 요소(element)가 Hashable 합니다.

 

빈 셋(Set)의 생성

위와 같이 꼭!! 타입을 명시해 주세요!

 

다음은 셋(Set)에서의 삽입(insert), 교체(replace), 추가(append), 제거(remove) 속성입니다.

셋(Set)의 기본속성

셋(Set)도 딕셔너리(Dictionary)와 마찬가지로, 순서가 없는 컬렉션 이기때문에

업데이트(update)로 삽입, 교체, 추가를 대체합니다.

또한, 주의하셔야 할 점은 서브 스크립트(Subscript) 대괄호 문법이 없다는 점 입니다.⭐️

 

마찬가지로 삭제(remove)에 대한 속성은 따로 존재합니다.

 

마지막으로 셋(Set)이 제공해주는 집합과 같은 기능을 해주는 속성을 알아보겠습니다.

셋(Set)의 집합기능을 제공하는 속성

위와 같이 알고만 계신다면, 언젠가 쓰게되는 상황이 생기게 되실텐데,

굳이 외우실 필요까진 없다는 개인적인 생각입니다. 🤣

 

오늘은 이렇게 스위프트의 컬렉션(Collection)에 대하여 알아보았는데요.

각각의 컬렉션마다 더 여러가지의 속성들을 제공하고 있지만,

나중에 속성들에 대해 더 자세한 포스팅을 하며, 어떤식으로 사용하게 되는지를 포스팅 해보도록 하겠습니다.

그리고 KeyValuePairs는 저도 아직 사용을 제대로 해보지 않아서 ^^..😭

나중에 사용할 일이 많아지게 되면 포스팅을 해보도록 하겠습니다.

 

이상으로 오늘의 포스팅을 마치도록 하겠습니다.! 감사합니다 즐코하세요!💻