본문 바로가기
IT공부/IOS개발

스위프트 공부 _ 데이터 타입 심화

by 놀고싶은 노자 2021. 6. 2.

지난번에 공부했던 기본 데이터 타입 외에 무엇이 있는지 알아볼까 한다. 

데이터 타입 안심은 무엇인지, 타입 별칭은 무엇인지, 열거형, 튜플, 컬렉션 형 등에 대해 공부할 생각인데 

오늘은 데이터 타입 안심과, 타입 별칭 그리고 튜플에 대해 알아보겠다. 

 

데이터 타입 안심 

apple에서 swift를 발표당시 강조했던 특징 중 하나인 안정성이 가장 뚜렷하게 나타나는 부분이다. 

swift는 타입에 민감하고 엄격한데, 서로 다른 타입 간의 데이터 교환을 할 경우에는 반드시 형변환을 해주어야 한다. 

 

swift는 데이터 타입을 안심하고 사용할 수 있는 언어이기에 그만큼 실수를 줄일 수 있다. 

즉, Int타입에 Char를 할당할 경우 컴파일 오류가 발생하는데 이런 오류는 프로그래밍 도중에 발견하기 어려워 나중에 컴파일러가 알려주지 않으면 오류를 찾는데도 시간이 걸리게 된다. 

하지만, swift는 컴파일 오류를 알려주기 때문에, 서로 다른 타입의 값을 할당하는 실수를 줄일 수 있다. 

이를 타입확인이라고 하는데, 타입 확인을 통해 여러 타입을 섞어 사용할 때 발생할 수 있는 오류를 피할 수 있다. 

 

타입추론

swift는 변수나 상수를 선언할 때 특정 타입을 명시하지 않아도 컴파일러가 할당된 값을 기준을 변수나 상수의 타입을 결정한다. 

따라서, 코딩을 할 때에 편한 부분이라 볼 수 있다.

타입 별칭 (Typealias)

swift에서 기본으로 제공하는 데이터 타입이든, 사용자가 임의로 만든 데이터 타입이든 이미 존재하는 데이터 타입에 임의로 별칭을 달 수 있다. 그 이후 원래 이름과 별칭 어느쪽으로든 해당 데이터 타입을 활용할 수 있다. 

typealias num = Int
typealias number = Int
typealias decimalNum = Double

var year1 : num = 100
let year2 : number = 200

year1 = year2

let year3: Int = 300
let point : decimalNum = 3.141592 

타입 별칭을 전역적으로 쓰기 위해서라면 프로토콜을 생성하고, 해당 프로토콜을 클래스가 상속받으면 전반적으로 동일하게 사용이 가능하다. 그 외에 타입 두개를 한개의 타입으로 동시에 사용도 가능하니, 잘 사용한다면 보다 효율적인 코딩이 가능해질 것으로 보인다.

튜플(Tupple)

튜플은 타입의 이름이 따로 지정되어 있지 않은, 프로그래머 마음대로 만드는 타입이다. C언어의 구조체의 형태와 유사하다. 

swift의 튜플은 python의 튜플과도 비슷한데, 튜플은 타입 이름이 따로 없으며, 일정 타입의 나열만으로 튜플 타입을 생성할 수 있다. 튜플에 포함된 데이터의 개수는 임의로 지정이 가능하며, 1개부터 수많은 개수가 가능하다. 

var a : (Int, Int, String) = (1,2,"3")
print(a.0) //1
print(a.1) //2
print(a.2) //"3"
print(a.3) //error

a.1 = 22
print(a.1) //22
a.3 = 77 //error => not exist
a.2 = 44 //error => different type

let (b,c,d) = a
print(b) //1
print(c) //22
print(d) //3

var person : (name: String, age: Int) = ("abc", 23)
print(person.name) // abc
print(person.age) // 23
print(person.1) // 23

튜플의 각 요소를 이름 대신 숫자로 표현하기 때문에 간편해 보일 수 있지만, 차후에 각 요소가 어떤 의미, 어떤 데이터 타입인지 확인하기 힘들 수 있기에 사용에 주의해야할 점이 있다. 그래서 이름을 붙여주는 것도 가능하다(각 요소에)

튜플의 경우 위에서 설명한 타입 별칭과 함께 사용한다면 더 좋은 효과를 보여줄 수 있다.