우리는 이전 글에서 배열이라는 것을 공부했습니다. 배열처럼 Swift엔 '값'들을 묶어놓을 수 있는 타입이 더 있어요.
배열을 포함한 이런 타입들을 컬렉션(Collection)이라 합니다.
이번 글에선 컬렉션에 어떤 것들이 있는지 간단하게 알아보겠습니다.
딕셔너리 (Dictionary)
사전을 영어로 하면? 바로 'Dictionary'입니다. 영한사전을 생각해볼게요. 어떻게 구성되어있나요?
"단어" : "뜻" 이렇게 되어있는 것을 확인할 수 있습니다. 가만 생각해보면 같은 뜻을 가진 단어는 있을 수 있지만 같은 단어는 없습니다.
(제가 아는 영어는 그렇습니다. 같은 단어가 있다면.. 댓글로 남겨주세요 😅)
네, 아무튼 Swift의 Dictionary도 영한사전처럼 구성되어있습니다. 바로 "키(Key)": "값(Value)" 으로 말이죠. 그리고 키 값은 유일합니다.
여기서 Key로 사용할 타입은 어떤 것이든 가능한 것은 AnyHashable 타입만 가능합니다.
(AnyHashable.. 지금 몰라도 됩니다. String, Int 등으로 사용할 수 있다고 일단 생각하시면 편합니다.)
영한사전을 Swift의 Dictionary로 구현해보겠습니다.
조금 전 키 값은 유일하다고 설명했습니다. 그렇다면 이미 존재하는 키 값에 접근하게 되면 어떻게 될까요?
다행히(?) 별 문제는 없고 이미 존재하는 값을 변경합니다. 즉, 현재 Dictionary에 없는 키라면 새로 추가하고, 이미 있는 키라면 값을 변경하는 것이죠.
아래와 같이 초기화 시점에 Dictionary에 값을 추가할 수도 있습니다. 타입 추론과 함께 말이죠.
이상합니다. 초기화할 때 '어머니, 아버지, 누나' 순서대로 초기화했는데 출력해보니 순서가 달라지고 있습니다.
여기서 우리는 한 가지를 더 배울 수 있습니다. 아 Dictionary는 순서가 없구나.
셋 (Set)
두 번째 컬렉션 타입 바로 'Set'입니다. Set은 간단합니다. 바로 수학에서 배우는 '집합'이에요.
집합의 특징이 어떤 것이 있을까요? 배운 지 조금 오래돼서 잊으셨을 수 있으니 한번 보겠습니다.
수학에서, 집합(集合, 영어: set)은 특정한 조건에 맞는 원소들의 모임이며, 명확한 기준에 의하여 주어진 서로 다른 대상들이 모여 이루는 새로운 대상이다. 어떤 대상이 집합에 속하는지 여부는 명확해야 하며, 집합 위에는 순서나 연산 따위의 구조가 주어지지 않는다. - 위키백과
정리해보면 이렇습니다.
- 특정 조건에 맞는 원소들의 모임
- 명확한 기준에 의해 '서로 다른 대상'이 모여있다.
- 순서나 연산 따위의 구조가 주어지지 않는다.
첫 번째부터 살펴보면.. '특정 조건 모임 = 같은 타입 모임'정도로 생각하면 이해가 편합니다.
따라서, Set은 아래와 같이 초기화합니다.
이렇게 Set은 특정 타입을 받겠다!라고 말해야 합니다. <>는 Generic을 사용해 타입을 받겠단 의미인데, 이건 나중에 설명하고자 합니다.
두 번째, '서로 다른 대상 = 중복이 없구나'입니다.
초기화할 때 3이 중복되어 있는 것을 확인할 수 있습니다. 그렇지만 출력할 땐 3이 제거됐습니다. 이렇게 Set은 중복을 허용하지 않습니다.
초기화 할 때만 그런 것이 아니라 Set에 특정 값을 추가할 때도 중복을 허용하지 않습니다. 값을 추가할 땐 insert 함수를 사용합니다.
세 번째, 아.. Set도 순서가 없구나?
다시 첫 번째 코드로 돌아와 보면 set을 출력했을 때 순서가 달라진 것을 확인할 수 있습니다. Set도 Dictionary와 마찬가지로 순서가 없습니다.
한 가지 더 있습니다. Set은 수학적 개념이랑 동일하다고 말씀드렸습니다. 그렇기 때문에 Set은 아래와 같이 합집합, 교집합, 차집합 등 집합 연산이 가능합니다.
튜플 (Tuple)
마지막으로 딱 하나만 더 설명하겠습니다. 바로 튜플(Tuple)입니다. 튜플은 어떤 값의 묶음 정도로 생각하면 편합니다.
(배열이랑은 조금 달라요, 튜플은 길이가 한정되어 있답니다.)
튜플은 아래와 같이 사용할 수 있습니다.
물론, 타입 추론도 가능하지만 명확하게 보여드리기 위해 타입을 선언했습니다.
(메뉴 이름, 가격)으로 구성되어 있는 타입이죠.
여기서 menuA의 메뉴 이름이나 가격을 출력해보겠습니다.
튜플에 속하는 특정 값에 접근하기 위해선 순서에 맞춰서 숫자를 변수 뒤에 .을 사용해 이어주면 됩니다. 숫자로 하는 게 어색할 수 있죠.
그럴 땐 이렇게 이름을 붙여주면 됩니다.
이렇게 튜플은 간단하지만 명확해 보이는 자료형으로 활용이 가능합니다.
이번엔 Swift가 제공하는 컬렉션엔 어떤 것이 있는지 공부했습니다.
이 컬렉션들을 적절한 곳에 활용하면 나름 편리하다고 생각하실 것입니다.
질문이 있다면 댓글 남겨주세요. 언제나 환영합니다. 😁
고맙습니다.
'개발 > 쉽게 풀어보는 Swift' 카테고리의 다른 글
배열 (Array) (0) | 2020.09.29 |
---|---|
타입(Type) (0) | 2020.09.22 |
상수(Constant)와 변수(Variable) (0) | 2020.09.20 |