Programming/swift

[Swift Basic] 튜플 Tuples

유나니 2022. 11. 28. 17:40

Tuple은 여러 값을 하나의 복합 값으로 그룹화합니다. 튜플 내의 값은 모든 유형을 사용할 수 있으며 서로 동일한 유형일 필요는 없습니다.

예를 들어 (404, "Not Found")는 HTTP 상태 코드를 설명하는 튜플입니다. HTTP 상태 코드는 웹 페이지를 요청할 때마다 웹서버에서 반환되는 값입니다. 존재하지 않는 웹페이지를 요청하면 상태 코드 404  Not Found가 반환됩니다.

    let http404Error = (404, "Not Found")
    // http404Error의 타입은 (정수, 문자열)입니다.

(404, "Not Found") 튜플 그룹은 Int와 String을 함께 그룹화하여 HTTP 상태 코드에 숫자와 사람이 읽을 수 있는 설명이라는 두 개의 개별 값을 제공합니다. "(Int, String) 타입의 튜플"이라고 설명할 수 있습니다.

모든 유형의 순열에 대해 튜플을 만들 수 있으며, 원하는 만큼 다양한 타입을 포함할 수 있습니다.  (Int, Int, Int) 또는 (String, Bool) 타입의 튜플 또는 실제로 필요한 다른 순열을 갖을 수 있습니다.

튜플의 내용을 별도의 상수 또는 변수로 분해한 다음 평소와 같이 엑세스 할 수 있습니다.

    let (statusCode, statusMessage) = http404Error
    print("The status code is \(statusCode)")
    // Prints "The status code is 404"
    print("The status message is \(statusMessage)")
    // Prints "The status message is Not Found"

만약 어떤 튜플 값중 일부만 필요한 경우, 튜플을 분해할 때 밑줄(underscore)_ 이 있는 튜플의 일무를 무시합니다.

    let (justTheStatusCode, _) = http404Error
    print("The status code is \(justTheStatusCode)")
    // Prints "The status code is 404"

0부터 시작하는 인덱스 번호를 사용하여 튜플의 개별 요소 값에 액세스 합니다.

    print("The status code is \(http404Error.0)")
    // Prints "The status code is 404"
    print("The status message is \(http404Error.1)")
    // Prints "The status message is Not Found"

튜플을 정의할 때 각각의 요소에 이름을 붙일 수 있습니다.

let http200Status = (statusCode: 200, description: "OK")

만약 튜플 요소에 이름을 붙이면, 요소 이름을 사용해 해당 요소의 값에 액세스 할 수 있습니다.

print("The status code is \(http200Status.statusCode)")
// Prints "The status code is 200"
print("The status message is \(http200Status.description)")
// Prints "The status message is OK"

튜플은 특히 함수의 반환 값으로 사용할 때 유용합니다. 웹페이지를 검색하려고 하는 함수가 페이지 검색의 성공이나 실패를 설명하기 위해 (Int, String) 튜플 타입을 반환할 수 있습니다. 각각 타입이 다른 두 개의 개별 값이 있는 튜플을 반환함으로써 함수는 단일 유형의 단일 값만 반환할 수 있은 경우보다 결과에 대해 더 유용한 정보를 제공합니다. 자세한 내용은 Functions with Multiple Return Values를 참조하세요.

 

NOTE.

튜플은 관련있는 간단한 그룹에서 유용합니다. 튜플은 복합한 데이터 구조를 만드는 데에 적합하지 않습니다. 만약 테이터 구조가 복잡한 경우 튜플이 아닌 클래스(Class) 또는 구조체(Structure)로 모델링을 하세요.