Swift 프로그래밍 (데이터 타입 안심, 타입 별칭, 튜플)
이 포스트는 야곰님의 스위프트 프로그래밍 2판을 보고 공부한 내용을 적어나간 포스트입니다.
데이터 타입 안심
-
스위프트의 특징 중 안전성(safe) 이 가장 뚜렷하게 나타나는 부분
-
스위프트는타입에 민감, 엄격 -
서로 다른 타입끼리의데이터 교환은 꼭타입캐스팅(Type-Casting, 형변환)을 거쳐야 함.- 값 타입의 데이터 교환은 엄밀히 말하면 타입캐스팅이 아닌 새로운 인스턴스를 생성하여 할당하는 것이다.
타입 별칭 (typealias)
-
스위프트에서
기본으로 제공하는데이터 타입,사용자가 임의로 만든 데이터 타입,이미 존재하는 데이터 타입 등데이터 타입에임의로 다른 이름(별칭)을 부여할 수 있다. -
타입에 별칭을 부여한 후기본 타입 이름과이후 추가한 별칭을모두 사용 가능하다.
typealias MyInt = Int
typealias YourInt = Int
typealias MyDouble = Double
let age: MyInt = 100 // MyInt는 Int의 별칭, 또 다른 이름.
var year: YourInt = 2080 // YourInt는 Int의 별칭, 또 다른 이름.
year = age // MyInt도 YourInt도 Int이기 때문에 같은 타입으로 취급한다.
let month: Int = 7 // 기존의 Int도 사용 가능
let percentage: MyDouble = 99.9 // MyDouble은 Double의 별칭, 또 다른 이름. // Int 외에 다른 자료형도 모두 별칭 사용 가능
튜플 (Tuple)
-
튜플(Tuple)은타입의 이름이따로 지정되어 있지 않다. -
튜플은 프로그래머 마음대로 만드는 타입이다. -
튜플은타입 이름이따로 없으므로일정 타입의나열만으로튜플 타입을 생성해줄 수 있다. -
튜풀에 포함될데이터의 개수는자유롭게 정할 수 있다.
// String, Int, Double 타입의 튜플
var person: (String, Int, Double) = ("Jun", 100, 182.5)
// 인덱스를 통해서 값을 빼 올 수 있다
print("이름: \(person.0), 나이: \(person.1), 신장: \(person.2)")
// print 결과값 => 이름: Jun, 나이: 100, 신장: 182.5
// 인덱스를 통해 값을 할당할 수 있다
person.1 = 99
person.2 = 178.5
print("이름: \(person.0), 나이: \(person.1), 신장: \(person.2)")
// 결과값 => 이름: Jun, 나이: 99, 신장: 178.5
-
튜플의 각 요소를이름 대신 숫자로 표현숫자로 표현하기때문에 간편해 보일 수 있지만, 차후에 다른 프로그래머가 보았을 때, 코드의 의미 파악에 어려움을 갖을 수 있다.
-
그래서
튜플의 요소마다 이름을붙여줄 수도 있다.
// 튜플 요소 이름 지정
// String, Int, Double 타입의 튜플
var person: (name: String, age: Int, height: Double) = ("Jun", 100, 182.5)
// 요소 이름을 통해서 값을 빼 올 수 있다.
print("이름: \(person.name), 나이: \(person.age), 신장: \(person.height)")
// print 결과값 => 이름: Jun, 나이: 100, 신장: 182.5
// 요소의 이름을 통해 값을 할당할 수 있다
person.age = 99
// 인덱스를 통해서 값을 할당할 수 있다
person.2 = 178.5
// 기존처럼 인덱스를 이용하여 값을 빼 올 수도 있다
print("이름: \(person.0), 나이: \(person.1), 신장: \(person.2)")
// print 결과값 => 이름: Jun, 나이: 99, 신장: 178.5
-
튜플에는 타입 이름에해당하는 키워드가따로 없다보니사용에 불편함을 겪기도 한다.- 매번 같은 모양의 튜플을 사용하고 싶을시,
선언해줄 때마다 긴 튜플 타입을 모두 써줘야 하는 불편함이 생길 수 있기 때문이다.
- 매번 같은 모양의 튜플을 사용하고 싶을시,
-
이럴 때는타입 별칭을사용하여조금 더 깔끔하고 안전하게 코드를 작성할 수 있다
// 튜플 별칭 지정
typealias PersonTuple = (name: String, age: Int, height: Double)
let Jun: PersonTuple = ("Jun", 100, 178.5)
let Michael: PersonTuple = ("Michael", 150, 183.5)
print("이름: \(Jun.name), 나이: \(Jun.age), 신장: \(Jun.height)")
// print 결과값 => 이름: Jun, 나이: 100, 신장: 178.5
print("이름: \(Michael.name), 나이: \(Michael.age), 신장: \(Michael.height)")
// print 결과값 => 이름: Michael, 나이: 150, 신장: 182.5