본문 바로가기

Swift 문법

[Swift] 튜플

튜플은 집단자료형 타입이다.

여러 요소를 담을 수 있다는 점에서
배열과 비슷하게 볼 수 있다.

이 둘의 차이를 러프하게 생각한다면,
배열은 여러가지 요소들을 담는 목적이 더 강한 '가방'과 같고,
튜플은 담긴 요소들에 접근하여 연계하는 활용성이 큰 '비닐봉지'와 같다.

음.. 비유는 비유일 뿐 큰 의미를 두지 말자...
 먼저, 튜플에 대해서 자세하게 알아보자.

튜플은 집단자료형 타입으로, 연관된 데이터의 조합으로 어떠한 형태든 만들 수 있는 타입이다.

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