Collection 타입의 기본으로는 Array
, Dictionary
, Set
이 있고 각 타입은 고유한 특징과 용도를 가지고 있다.
Array
는 같은 타입의 값들을 순서대로 저장하는 컬렉션이다. 순서가 있는 경우 배열에 있는 값들은 순서가 정해져 있을 것이다. 예를 들어, [1, 2, 3]
에서 1
은 첫 번째, 2
는 두 번째, 3
은 세 번째이다. 그리고 너그럽게 중복된 값도 허용해주는데 같은 값을 여러 번 넣을 수 있다. 예를 들어, [2, 1, 2, 3]
처럼 중복된 2
가 있을 수 있다.
var fruits: [String] = ["석류", "바나나", "거봉"]
Dictionary
는 키
와 값
이 쌍으로 저장된 것을 말한다. 그리고 그 키
를 이용하여 값
을 찾을 수 있다. 대신 키
는 고유해야 하는 점을 알고 있어야 하고 같은 키를 여러 번 사용할 수 없는 점 또한 인지해야 한다. 예를 들어, ["사과": 1, "바나나": 2]
에서 "사과
"라는 키는 하나만 존재해야하며, 대신 키는 고유해야하지만 값은 중복이 가능하기에 같은 값을 여러 키에 할당하는 것은 가능하다.
var studentGrades: [String: Int] = ["Mimi": 160, "Ron": 169]
키
로, 점수를 값
으로 저장한 딕셔너리다.Set
은 같은 종류의 값들을 모아놓지만 중복된 값은 허용하지 않는다. 그리고 순서가 없는 것이 특징인데, 집합에 있는 값들은 어떠한 순서도 없다. 예를 들어 [1, 2, 3]
과 [2, 3, 1]
은 같은 집합으로 간주된다. 하지만 여기서 같은 값을 여러번 넣게 되면 한 번만 저장이 된다. 즉 중복된 값을 허용하지 않는다는 것인데, 예를 들어 Set([1, 2, 2, 3])
의 경우 2
가 두 번 중복되기에 [1, 2, 3]
이 된다.
var Fruits: Set<String> = ["사과", "바나나", "사과"] // "사과"는 중복되어 저장되지 않음
그리고 컬렉션의 특징 중 알게 된 것 중 이니셜라이저
라고 다양한 방법으로 초기화 할 수 있는 특징이 있다고 한다.
이니셜라이저
는 객체를 생성할 때 초기 상태를 설정하는 메서드인데, 클래스
나 구조체
의 인스턴스를 만들 때 호출되고, 주로 속성 값
을 초기화
하는데 사용된다. 여기서 궁금한 점이 생겼는데 굳이 왜 초기화
를 해야하지? 라는 생각이 들었다. 초기값을 지정했으면 그 값을 꺼내오면 되는 것인데 왜?
그 이유는 클래스
나 구조체
의 인스턴스가 유효한 상태로 만들어지기 위해서 라고 한다. 이게 무슨 말이냐하면 초기화
를 하지 않을 경우 속성
들이 올바른 값 없이 사용될 수 있기 때문에 안정성을 보장하기 위해 초기화가 필요하다는 것.
class Student {
var name: String
var age: Int
// 이니셜라이저
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
만약 여기서 이니셜라이저
를 사용하지 않으면 name
과 age
속성이 무엇인지 알 수 없는 상태로 남아있을 수 있다. 이름도 나이도 모르는 학생 객체
가 생긴다면 그 객체
는 의미가 없고, 나중에 문제가 생길 수 있기 때문에 이러한 인스턴스
를 만들 때는 모든 속성이 초기화 되어야 한다는 규칙이 있다고 한다.
즉 초기화
가 되지 않은 속성은 존재할 수 없다라는 것이다. 초기화
는 쓸대 없는 코드늘림이 아닌 객체가 의미 있는 상태로 존재할 수 있게 도와주고, 속성들이 올바르게 초기화 되지 않으면 프로그램이 오류를 일으킬 수 있어 안정성을 보장하기 위해서도 반드시 필요하기에 객체를 유효한 상태로 만드는 아주 중요한 역할을 한다고 볼 수 있다.
Array
: 순서가 있는 값들의 리스트, 중복 가능.
Dictionary
: 키와 값 쌍으로 저장, 키는 고유해야 하고 값은 중복 가능.
Set
: 중복 없는 값들의 집합, 순서 없음.