[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

위와 같이 정의할 때 별명을 명시하고 튜플을 생성하면 클래스나 구조체의 프로퍼티에 접근하는 것처럼 사용이 가능하다!

카테고리:

업데이트:

댓글남기기