Swift(16) Collection

개발렬·2023년 7월 31일
0

Swift

목록 보기
16/23
post-thumbnail

Swift의 컬렉션(예: 배열, 딕셔너리, 집합)은 값 타입(Value Type)입니다.
이는 컬렉션을 변수나 상수에 할당하거나 함수에 전달할 때, 해당 컬렉션의 실제 내용이 메모리에 복사되는 것을 의미합니다. 이러한 복사 방식은 메모리 공유를 지원하지 않습니다.

var originalArray = [1, 2, 3, 4, 5]
var newArray = originalArray // originalArray의 내용이 newArray로 복사됩니다.

func processArray(array: [Int]) {
    // 함수에 배열이 전달될 때도 복사가 발생합니다.
    // 함수 내에서 array의 변경은 원본 배열에 영향을 미치지 않습니다.
}

processArray(array: originalArray)

이러한 값 타입의 특성은 안전성과 예측 가능성을 제공하지만, 때로는 큰 데이터 구조를 복사하는 데 비용이 발생할 수 있습니다.

  • Array (배열): 순서가 있는 항목들의 집합으로, 동일한 데이터 타입의 요소를 순차적으로 저장합니다. 인덱스를 사용하여 요소에 접근할 수 있습니다.
// Int 타입의 배열 선언
var numbers: [Int]

// String 타입의 배열 선언
var fruits: [String]
  • Set (집합): 순서가 없는 유일한 값들의 집합입니다. 중복된 값은 허용되지 않습니다.
// Int 타입의 집합 선언
var uniqueNumbers: Set<Int>

// String 타입의 집합 선언
var uniqueFruits: Set<String>
  • Dictionary (사전): 키와 값으로 이루어진 쌍(pair)의 집합입니다. 각 키는 유일하며, 키를 사용하여 값을 찾을 수 있습니다.
// String 키와 Int 값의 사전 선언
var ages: [String: Int]

// String 키와 String 값의 사전 선언
var favoriteFruits: [String: String]

초기화되지 않은 배열

var numbers: [Int] 

numbers.append(1) 
numbers.append(2) 

배열을 선언만 하고 초기화하지 않았기 때문에 number는 아직 빈 배열입니다. 즉, 요소가 없는 상태에서 append 메서드를 호출하려고 하기 때문에 오류가 발생합니다.
배열은 값 타입이기 때문에 메모리에 고정된 크기를 가지고 있습니다. 초기화되지 않은 배열은 메모리에 할당되지 않은 상태입니다.

생성자로 생성하기

생성자는 객체를 초기화하고 생성하는 특별한 메서드로서, 클래스, 구조체, 또는 열거형 등의 인스턴스를 생성할 때 호출되는 함수입니다. Swift에서 생성자는 해당 타입의 인스턴스를 만들 때 초기값을 설정하거나 기본값을 할당하는 데 사용됩니다.

  • Array (배열)
// 빈 배열 생성
var emptyArray = Array<Int>()

// 배열 생성자를 사용하여 요소를 초기화
var numbers = Array<Int>([1, 2, 3, 4, 5])

// 배열 리터럴을 사용하여 생성자 호출 (단축 문법)
var fruits = [String](["사과", "바나나", "오렌지"])
  • Set (집합)
// 빈 집합 생성
var emptySet = Set<Int>()

// 집합 생성자를 사용하여 요소를 초기화
var uniqueNumbers = Set<Int>([1, 2, 3, 4, 5])

// 배열 리터럴을 사용하여 생성자 호출 (단축 문법)
var uniqueFruits = Set<String>(["사과", "바나나", "오렌지"])
  • Dictionary (사전)
// 빈 사전 생성
var emptyDictionary = Dictionary<String, Int>()

// 사전 생성자를 사용하여 키와 값으로 초기화
var ages = Dictionary<String, Int>(uniqueKeysWithValues: [("철수", 25), ("영희", 30), ("민수", 28)])

// 사전 리터럴을 사용하여 생성자 호출 (단축 문법)
var favoriteFruits = [String: String](uniqueKeysWithValues: [("철수", "사과"), ("영희", "바나나"), ("민수", "오렌지")])

생성자는 해당 타입의 인스턴스를 생성하고 초기화하는 역할을 합니다.

profile
Flutter, iOS...나는 모바일 앱 개발자

0개의 댓글