Tuple
Tuple이란?
- 두개 이상의 값을 저장할 수 있는 Compound Type이다.
즉 여러 값의 묶음이라고 보면 된다.
- 서로 다른 타입의 값을 저장하는 것도 가능하다.
- 튜플 내의 값들은 순서대로 저장되며, 값들은 각각의 고유한 인덱스를 가진다.
- 튜플에 저장되는 값의 수는 튜플을 만들때 결정되고, 그 이후에는 변경할 수 없다.
- 튜플은 값 형식이기 때문에, 새로운 변수에 저장하면 기존에 있던 값이 복사된다.
- 상수로 선언하면 불변, 변수로 선언하면 가변 튜플이 된다.
예시들을 보자.
let GpuPrice = ("3050", 50, "3060", 60, "3070", 70)
GpuPrice.0 //"3050"
GpuPrice.1 //50
GpuPrice.2 //"3060"
소괄호 ( )와 ,로 작성한다.
Named Tuple
let parrot = (name: "baechu", age: 3, color: "green")
parrot.0
parrot.name
튜플에 이름을 부여하여 보다 더 편리하게 사용할 수 있다.
위의 parrot.0과 parrot.name은 같은 값을 출력한다.
Named Tuple을 사용하다가 이런식으로 코드를 작성해보면 어떨까? 싶어서 작성해보았다.
// 1. 형식추론 및 Named Tuple
let parrot = (name: "baechu", age: 3, color: "green")
// 2. 타입을 직접 선언하고 Name:, Age:등 생략
let parrot2: (name: String, age: Int, color: String) = ("mungchi", 3, "blue")
// 3. 타입을 직접 선언하고, Named Tuple은 사용하지 않음
let parrot3: (String, Int, String) = ("soondol", 3, "white")
// 4. 타입을 선언하고 Named Tuple을 직접 사용함
let parrot4: (name: String, age: Int, color: String) = (name: "pig", age: 3, color: "blue")
parrot.0
parrot.name
parrot2.0
parrot2.name
parrot3.0
//parrot3.name // Named Tuple을 사용하지 않았기 때문에 불가함.
parrot4.0
parrot4.name
1, 2, 3, 4 모두 작동한다.
하지만 코드의 가독성이나 사용해야할 때의 상황에 따라 알맞은 방식을 사용해서 코드를 작성하면 되겠다.
Tuple Decomposition(튜플 분해 문법)
let (value1, value2, ...) = TupleName
var (value1, value2, ...) = TupleName
- Tuple에 저장되어 있는 값을 개별 상수나 변수에 따로 저장하는 문법.
- 값의 수(위의 value1, value2 등)는 Tuple에 저장된 값의 수와 같아야 한다.
- Decomposition 문법을 사용하면 개별 값에 접근한 다음 하나씩 따로 저장할 필요가 없다.
- Tuple은 단일 값으로 분해되어서 앞에서부터 순서대로 저장된다.
예시를 보자.
// 1.
let parrot = ("배추", 2021, "뭉치", "2024")
// 2.
let baechu = parrot.0
let mungchi = parrot.1
let pig = parrot.2
let soondol = parrot.3
// 3.
let (baechu, mungchi, pig, soondol) = parrot
// 4.
let (baechu, mungchi, pic, _) = parrot
1. 이름이 없는 Tuple (not a named Tuple)
2. 개별 값에 접근한 다음 하나씩 따로 저장
3. Decomposition 문법을 사용한 코드
4. 와일드카드 패턴으로 마지막 soondol을 생략함. 마지막 값인 soondol은 분해되지 않음.
Tuple Matching
let resuolution = (1920, 1080)
if resuolution.0 == 3840 && resuolution.1 == 2160 {
print("4K")
} else if resuolution.0 == 2560 && resuolution.1 == 1440 {
print("QHD")
} else if resuolution.0 == 1920 && resuolution.1 == 1080 {
print("FHD")
}
switch resuolution {
case (_, 1080):
print("FHD")
case (_, 1440):
print("QHD")
case (3840...4096, 2160):
print("4k")
default:
break
}
- if문 보다는 Switch문으로 작성하는게 좀 더 깔끔하다.
- Switch문에서는 Tuple Matching을 지원하고 있다.
그래서 if문처럼 &&이나 ==를 쓰지 않아도 깔끔하게 코드를 작성할 수 있다.
'Language > Swift' 카테고리의 다른 글
Swift 기본 문법 - 클로저(Closure) 작성중 (0) | 2024.11.01 |
---|---|
Swift 기본 문법 - Double 타입에서 나머지 구하기(TruncastingRemainder) (0) | 2024.10.29 |
Swift 기본 분법 - 반복문 (for문, while문) (0) | 2024.10.20 |
Swift 기본 문법 - Range Operator(범위 연산자) (0) | 2024.10.19 |
Swfit 기본 문법 - 조건문 switch문 (0) | 2024.10.19 |
살아남는 iOS 개발자가 되기 위해 끊임없이 노력하고 있습니다.