Swift - DataType 고급

luminoux·2022년 5월 21일
0

Swift 문법

목록 보기
2/8
post-thumbnail

1. 타입 추론

  • 타입을 명시하지 않아도 컴파일러가 할당된 값을 기준으로 변수나 상수의 타입을 결정합니다.
//타입을 지정하지 않아도, 타입추론을 통하여 name을 String Type으로 선언
var name = "Lumi"

//그 후, 다른 타입의 값의 할당은 불가능합니다.
//name = 12 컴파일에러

2. 타입 별칭 부여

  • typealias 선언을 통해 임의로 다른 이름, 별칭을 부여할 수 있습니다.
typealias MyInt = Int
typealias HelloInt = Int
typealias OurDouble = Double

var age: MyInt = 20
var ratio: OurDouble = 10.2

3. 튜플

  • 튜플이란 지정되지 않은, 프로그래머 마음대로 만드는 타입입니다.
  • Index를 통해 튜플의 값을 뻬올 수 있습니다.
var account: (String, Int, Double) = ("Lumi",1,1.03)

print(account.0) // "Lumi"
print(account.1) // 1
print(account.2) // 1.03

하지만 이런 경우에는 가시성이 떨어집니다
왜냐하면, 인덱스의 순서를 기억하는 것은 어려운 일이기 떄문입니다.
그래서 튜플의 요소의 이름을 지어줄 수 있습니다.

var account: (name: String, order: Int, ratio: Double) = ("Lumi",1,1.03)

// 기존과 같은 방법으로 인덱스를 이용할 수 있습니다.

print(account.0)
print(account.1)
print(account.2)

//같은 결과를 도출합니다. 하지만, 직관적인 코드 작성이 가능합니다.

print(account.name)
print(account.order)
print(account.ratio)

4. 컬렉션형

1. 배열(Array)

  • 같은 타입의 데이터를 일렬로 나열한 후 순서대로 저장하는 형태의 데이터 타입
  • 스위프트의 배열은 크기를 자동적으로 조절합니다.
  • 삽입 및 삭제가 자유롭습니다.
var array: Array<String> = ["Lumi", "HojongE", "Charlie", "Asher"]
// 위의 선언과 정확하게 일치하는 선언입니다.
var array: [String] = ["Lumi", "HojongE", "Charlie", "Asher"]

위 두 선언은 정확하게 같은 동작을 하는 선언입니다.

// 빈 배열을 선언하는 방법들
var emptyArray: [String] = [String]()
var emptyArray: [String] = Array<String>()
var emptyArray: [String] = []

빈 배열을 선언하는 방법들 입니다.
배열의 타입을 정확하게 명시해줬다면, [ ]만으로 빈 배열을 생성할 수 있습니다.

여러가지 Method

  1. isEmpty

    isEmpty 메소드를 이용해 빈 배열인지 확인할 수 있습니다.
    빈 배열일 경우, true값이 반환됩니다.

// 배열을 하나 선언합니다.
var array: [String] = ["Lumi", "HojongE", "Charlie", "Asher"]

// isEmpty를 이용해 빈 배열인지 확인할 수 있습니다.
array.isEmpty // false
  1. count

    배열의 요소의 개수를 알 수 있습니다.

array.count //4
  1. append & Insert

    배열의 요소를 추가할 수 있습니다.
    append 는 맨 뒤에 추가하고
    insert는 인덱스를 지정해 추가할 수 있습니다.
    배열의 인덱스는 0번 부터 시작합니다.

array.append("Jin")
// "Lumi", "HojongE", "Charlie", "Asher", "Jin"
array.insert("Milli", at: 2)
//"Lumi", "HojongE", "Milli", "Charlie", "Asher", "Jin"
  1. firstIndex & lastIndex

    firstIndex는 앞에서부터
    lastIndex는 뒤에서부터 배열의 요소를 탐색을 합니다.
    탐색에 성공하면, 인덱스를 반환하고, 실패할 경우 nil을 반환합니다.

array.firstIndex(of: "HojongE") // 1
array.lastIndex(of: "Charlie") // 3
array.firstIndex(of: "Jason") // nil

2. 딕셔너리(Dictionary)

  • 키와 값이 쌍으로 구성되는 타입
  • 키는 중복을 허락하지 않습니다.
  • Array와 같이 IsEmpty, count등의 메소드가 있습니다.
var pracDictionary : [String: Int] = ["Lumi": 2, "Asher": 3, "Jason": 5]

// 딕셔너리 사용법 - 키로 값을 찾아봅시다.
print(pracDictionary["Lumi"]) // 2
print(pracDictionary["Jin"]) // Jin이라는 키는 없으므로, nil을 반환합니다.

여러가지 메소드

  1. 딕셔너리에 추가하기
pracDictionary["Hans"] = 2 // "Hans"라는 키로 2를 저장합니다.
print(pracDictionary["Hans"]) // 2
  1. removeValue()

    removeValue(forKey:) 를 통해 딕셔너리 요소를 삭제할 수 있습니다.

pracDictionary.removeValue(forKey: "Asher")
print(pracDictionary)
// 키로 Asher를 가지던 값이 삭제됩니다.

3. 세트(Set)

  • 같은 타입의 데이터를 순서없이 하나의 묶음으로 저장하는 형태의 타입
  • 중복된 값을 허락하지 않습니다.
  • 순서가 중요하지 않거나, 각 요소가 유일한 값이어야하는 경우에 사용합니다.
  • Hashable한 값이 요소여야합니다.
//빈 세트를 선언하는 방법
//var names: Set<String> = Set<String>()
//var names: Set<String> = []

// Set은 타입추론을 사용할 수 없습니다. 컴파일러는 Array로 인식하기 때문입니다.
var names: Set<String> = ["Lumi", "Charlie", "Youth", "Asher", "Avery", "Gyu"]

print(names.isEmpty) // false
print(names.count) // 6

여러가지 메소드

  1. insert & remove

    요소의 삽입과 삭제에 이용하는 메소드입니다.

names.insert("Jin")
names.insert("Goban")
names.remove("Youth")
  1. Set의 활용
  • 집합연산
var setOne: Set<Int> = [1, 2, 3, 4, 5 ,6]
var setTwo: Set<Int> = [4, 5, 6, 7, 8, 9]

// 교집합
setOne.intersection(setTwo) // 4, 5, 6

// 배타적 논리합
setOne.symmetricDifference(setTwo) // 1, 2, 3, 7, 8, 9

// 합집합
setOne.union(setTwo) // 1 ~ 9

// 차집합
setOne.subtracting(setTwo) // 1, 2, 3
  • 집합 간 포함 관계
var 동물: Set<String> = ["곰", "호랑이", "참새", "거위", "비둘기"]
var 조류: Set<String> = ["참새", "거위", "비둘기"]

// 동물은 조류의 부분집합인지
동물.isSubset(of: 조류) // false

// 조류는 동물의 부분집합인지
동물.isSuperset(of: 조류) // true

//서로 배타적인지
조류.isDisjoint(with: 동물) // false



profile
Apple Developer Academy @ Postech 2022

0개의 댓글