Swift 기본타입 - 2

미니·2022년 4월 20일
0

Swift 문법

목록 보기
2/6
post-thumbnail

스위프트는 안전성을 확보하기 위해서 타입에 굉장히 민감하게 제작되었다.
서로 다른 타입끼리의 데이터 교환은 꼭 형변환을 거쳐야 한다.

타입 추론

스위프트에서는 변수나 상수를 선언할 때 특정 타입을 명시하지 않아도 컴파일러가 타입을 결정해준다. 이를 우리는 타입 추론이라고 한다.

var name = "mini"
print(type(of: name)) //String
name = 100 //오류

위와 같이 컴파일러는 name이라는 변수를 String 타입으로 추론한 것이다. 그렇기 때문에 Int 타입의 100을 할당하게 되면 오류가 발생하는 것이다.

타입 별칭

스위프트에서는 기본으로 제공하는 데이터 타입, 사용자가 만든 데이터 타입이든 임의로 다른 이름을 부여할 수 있다.

typealias myInt = Int
typealias yourInt = Int
typealias myDouble = Double

let age:myInt = 100
var year:yourInt = 2019

튜플

튜플은 '지정된 데이터의 묶음'으로 표현할 수 있다. 튜플은 타입 이름이 따로 없으므로 일정 타입의 나열만으로 튜플 타입의 변수나 상수를 생성할 수 있다.

var person:(String,Int,Double) = ("mini",26,176)
print("이름 : \(person.0) ,나이 : \(person.1),키 : \(person.2)")
person.0 = "min"
print("이름 : \(person.0) ,나이 : \(person.1),키 : \(person.2)")
print1 - 이름 : mini ,나이 : 26,키 : 176.0
print2 - 이름 : min ,나이 : 26,키 : 176.0

튜플의 각 요소의 접근을 숫자로 하기 때문에 편할 수 있다. 하지만, 협업이나 다른 개발자가 문서를 참고할 경우, 어떤 의미를 가지는 데이터인지 알 수 없다. 그래서 튜플에 요소마다 이름을 정할 수 있다.

var person:(name:String,age:Int,height:Double) = ("mini",26,176)
print("이름 : \(person.name) ,나이 : \(person.age),키 : \(person.height)")
person.name = "min"
print("이름 : \(person.name) ,나이 : \(person.age),키 : \(person.height)")
print1 - 이름 : mini ,나이 : 26,키 : 176.0
print2 - 이름 : min ,나이 : 26,키 : 176.0

Collections

스위프트에는 튜플외에도 데이터를 묶어서 저장하고 관리할 수 있는 컬렉션 타입이 있다. 이에 해당되는 것은 배열(Array), 딕셔너리(Dictionary), 세트(Set)등이 있다.

1. 배열

배열은 같은 타입의 데이터를 일렬로 나열한 후 순서대로 저장하는 컬렉션이다. 배열을 선언하는 방법은 다양하다.

var names:Array<String> = ["i","love","you","🥰"]
var names2:[String] = ["i","love","you","🥰"]
var emptyArr:[Any] = [Any]()
var emptyArr2:[Any] = Array<Any>()
var emptyArr3:[Any] = []

배열은 인덱스를 통해서 요소에 접근할 수 있다. 잘못된 인덱스에 접근하게 되면 익셉션 오류가 발생하게 된다.

print(names[1]) //love
names[4] = "😍" // Index 오류
names.append("😍")
names.insert("😘", at: 2)

names.removeFirst()
print(names) // ["love", "😘", "you", "🥰", "😍"]
names.removeLast()
print(names) // ["love", "😘", "you", "🥰"]
names.remove(at: 2)
print(names) // ["love", "😘", "🥰"]

딕셔너리

딕셔너리는 요소들이 순서 없이 키와 값의 쌍으로 구성되는 컬렉션이다. 딕셔너리 내에는 키와 값은 여러개일 수 있다. 하지만, 키는 같은 값을 중복해서 할당할 수 없다.

typealias dic = [String:Int]

var numberForName:Dictionary<String,Int> = Dictionary<String,Int>()
var numberForname:[String:Int] = [String:Int]()
var numberForname2:dic = dic()
var numberForname3:[String:Int] = [<:]
var numberForname4:[String:Int] = ["mini":25,"min":26]

딕셔너리는 각 값에 키로 접근 가능하다. 딕셔너리는 배열과 다르게 딕셔너리 내부에 없는 키로 접근을 해도 오류가 발생하지 않고, nil을 반환하게 된다.

print(numberForname.isEmpty) //true
print(numberForname4.count) //2

print(numberForname4["min"]) //Optional(26)
numberForname4.removeValue(forKey: "min")
print(numberForname4.removeValue(forKey: "min")) //nil

하지만 주의해야 할 점은 값에 접근을 하게 되면 딕셔너리는 Optional 값을 반환하게 된다. 이와 관련된 내용은 추후 포스팅에서 다룰것이다.

Set

세트는 같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션이다. 세트 내에 모두 유일한 값이여야한다. 그래서 보통 순서가 중요하지 않거나 각 요소가 유일한 값이어야 하는 경우에 사용한다.

var mine:Set<String> = Set<String>()
var mine2:Set<String> = []
var mine3:Set<String> = ["alex","min","lee"]
var numbers = [100,200,300] //-> 타입 추론이 Array로 발생한다.
print(type(of: numbers)) //Array<Int>

print(mine3.isEmpty) //false
print(mine3.count) //3

mine3.insert("hari")
print(mine3) //["lee", "hari", "alex", "min"]
mine3.remove("min")
print(mine3) //["hari", "alex", "lee"]

참고 : 스위프트 프로그래밍 (저자 - 야곰)

profile
IOS 개발자 지망생

0개의 댓글