[Swift] 튜플 (Tuple)
튜플이란?
스위프트 문서에서 직역하자면 여러 값을 단일 복합값으로 그룹화하는 것이다.
말은 어렵지만 여러 Type의 값을 하나로 묶어 사용할 수 있는 것이다.
Type은 배열처럼 모두 같아야 하는건 아니다. 다른 Type끼리도 가능하다
http 상태코드를 예로 들어보자
자주 접할 수 있는 창이다. 여기서 404는 Int이며 File not found는 String이다.
기존에 이러한 데이터는 클래스나 구조체에 담아서 사용 했겠지만 Swift에서는 튜플로 처리가 가능하다!
class HttpStatus {
var code: Int?
var message: String?
}
struct HttpStatus {
var code: Int
var message: String
}
예로 들은 http 상태코드를 튜플로 선언하면 아래와 같다
let httpError = (404, "Not Found")
그러하면 여기서 httpError가 튜플인건 알겠는데 어떤 Type일까?
Xcode에서 확인해보면 httpError의 Type은 (Int, String)이다. Int와 String을 하나의 그룹으로 만들어 사용하는 것 그것이 바로 튜플이다.
이제 처음 말했던 튜플이란 여러 값을 단일 복합값으로 그룹화하는 것이라는 말을 이해할 수 있다!
튜플의 사용
let httpError = (404,"Not Found") // httpError의 타입은 (Int, String)
print("httpError is \(httpError)")
// output : httpError is (404, "Not Found")
위에 처럼 httpError를 출력 하였을 때는 튜플 그대로 출력이 된다. 우리가 원하는건 튜플 안의 값이다!
그럼 저 튜플에 있는 값을 어떻게 사용할 수 있을까?
튜플을 각각 분해하여 사용
튜플의 위치에 각각 대응하는 변수나 상수로 분해하여 사용할 수 있다. 무슨말인지 잘 모르겠지만 코드를 보면 금방 이해가 가능할 것이다!
let httpError = (404, "Not Found") // (Int, String) type의 튜플
let (statusCode, statusMessage) = httpError
print("statusCode \(statusCode)")
// output >> statusCode 404
print("statusMessage \(statusMessage)")
// output >> statusMessage Not Found
httpError를 (statusCode, statusMessage) 튜플에 복사하였다!
튜플의 순서상으로 보면 statusCode는 404가 될 것이고, statusMessage는 “Not Found”가 될 것이다.
우리의 친구 print로 확인해보자
예상대로 잘 나와 주었다!
만약 튜플의 모든 값이 필요 하지 않고 몇개의 값만 필요 하다면 _를 이용하여 생략하여 줄 수도 있다
let (justStatusCode, _) = httpError // _ 로 생략 가능!
인덱스로 접근
가장 간단한 방법으로 인덱스로 접근이 가능하다.
let httpError = (404, "Not Found") // 좌측 부터 인덱스 0으로 시작
print(httpError.0) // 404
print(httpError.1) // Not Found
인덱스를 사용하면 정말 간단하겠지만 아무래도 가독성에는 좋지가 않다.
튜플 정의 시 이름을 지정!
튜플의 값들에 대해 별명을 지어줄 수 있다!
let httpStatus = (statusCode: 200, statusMessage: "OK")
print(httpStatus.statusCode) // 200
print(httpStatus.statusMessage) // OK
위와 같이 정의할 때 별명을 명시하고 튜플을 생성하면 클래스나 구조체의 프로퍼티에 접근하는 것처럼 사용이 가능하다!
댓글남기기