튜플은 집단자료형 타입이다.
여러 요소를 담을 수 있다는 점에서
배열과 비슷하게 볼 수 있다.
이 둘의 차이를 러프하게 생각한다면,
배열은 여러가지 요소들을 담는 목적이 더 강한 '가방'과 같고,
튜플은 담긴 요소들에 접근하여 연계하는 활용성이 큰 '비닐봉지'와 같다.
음.. 비유는 비유일 뿐 큰 의미를 두지 말자...
먼저, 튜플에 대해서 자세하게 알아보자.
튜플은 집단자료형 타입으로, 연관된 데이터의 조합으로 어떠한 형태든 만들 수 있는 타입이다.
let person: (String, Stirng, Int) = ("홍길동", "남자", 28) // 타입 추론 가능
튜플 내부 데이터 접근은 다음과 같다.
print(person.0) // "홍길동" 출력
print(person.1) // "남자" 출력
print(person.2) // 28 출력
Named Tuple
튜플 내부의 각 데이터 요소에 이름은 붙일 수 있는데, 이를 Named Tuple(이름이 매겨진 튜플)이라고 한다.
let person = (name: "홍길동", sex: "남자", age: 28)
Named Tuple 내부에서의 데이터는 가독성 있게 접근할 수 있다.
print(person.0) // 기존 방식으로도 가능
print(person.name) // 이름으로 접근 가능, "홍길동" 출력
print(person.sex) // "남자" 출력
print(person.age) // 28 출력
튜플의 분해
튜플의 특징을 활용하여 여러 변수에 동시에 값을 할당, 바인딩 할 수 있다.
let (name, sex, age) = ("홍길동", "남자", 28)
아래처럼도 가능하다.
let person = ("홍길동", "남자", 28)
let (name, sex, age) = person
튜플의 값 비교
(1, "b") < (2, "a") // 1과 2 중 2가 더 크기 때문에 코드를 끝마치고 true를 반환
(1, "a") < (1, "b") // 1과 1이 같이 때문에 "a"와 "b"를 비교하고 "b"가 더 크기 때문메 true를 반환
(1, "a") == (1, "a") // 1과 1이 같고 "a"와 "a"가 같아서 true를 반환
(1, true) < (2, false) // Bool 값은 비교 불가능한 타입이라 순서 상관없이 오류 발생
튜플의 바인딩
튜플과 switch문을 활용하여 바인딩할 수 있다.
let location = (5, 0)
switch location {
case (let x, 0), (0, let x): // location 내부의 두 값 중 하나가 0일 때
print("완벽한 가로 또는 세로축에 있으며 그 거리는 \\(x)만큼이다.")
default:
print("완벽한 가로 또는 세로축에 없다.")
}
또는 다음과 같이 조건 활용도 가능하다.
let location = (5, 5)
switch location:
case (let x, let y) where x == y:
print("가로와 세로로 똑같이 \\(x)만큼 떨어져있다.")
case (let x, let y): // 여기에서 모든 경우를 대체하기 때문에 default문이 필요없음
print("가로로 \\(x)만큼 세로로 \\(y)만큼 떨어져있다.")
}
'Swift 문법' 카테고리의 다른 글
[Swift] Enum(열거형) (0) | 2022.07.16 |
---|---|
[Swift] 함수 (0) | 2022.07.15 |
[Swift] Switch문 (0) | 2022.07.13 |
[Swift] 연산자 팁 (0) | 2022.07.12 |
[Swift] 변수와 타입 (0) | 2022.07.11 |