🔥 튜플

640자
8분

Swift에서 튜플(Tuples)은 여러 값을 단일 복합 값으로 그룹화하는 강력한 방법이에요. 튜플 내의 값은 어떤 유형이든 될 수 있으며 서로 같은 유형일 필요가 없죠. 이 기능은 관련된 값을 간단히 묶어서 표현할 때 아주 유용하답니다.

HTTP 상태 코드 튜플 예제

예를 들어, 웹 서버에 웹 페이지를 요청할 때마다 웹 서버가 반환하는 특별한 값인 HTTP 상태 코드를 튜플로 표현해 볼까요?

let http404Error = (404, "Not Found")
// http404Error의 타입은 (Int, String)이며, 값은 (404, "Not Found")입니다.
swift

위 코드에서 (404, "Not Found")라는 튜플은 HTTP 상태 코드를 설명해요. 이 튜플은 IntString을 함께 그룹화하여 HTTP 상태 코드에 두 개의 별도 값, 즉 숫자와 사람이 읽을 수 있는 설명을 제공하죠. 이를 "(Int, String) 타입의 튜플"이라고 설명할 수 있어요.

다양한 타입의 튜플 생성

여러분은 어떤 타입의 조합으로든 튜플을 만들 수 있고, 원하는 만큼 많은 서로 다른 타입을 포함할 수 있어요. (Int, Int, Int), (String, Bool) 또는 여러분이 필요로 하는 다른 어떤 조합으로든 튜플을 만드는 것을 막을 수 없죠.

튜플 분해하기

튜플의 내용을 별도의 상수나 변수로 분해할 수 있어요. 그런 다음 평소처럼 이 상수나 변수에 액세스할 수 있죠.

let (statusCode, statusMessage) = http404Error
print("상태 코드는 \(statusCode)입니다.")
// "상태 코드는 404입니다."를 출력합니다.
print("상태 메시지는 \(statusMessage)입니다.")
// "상태 메시지는 Not Found입니다."를 출력합니다.
swift

만약 튜플의 일부 값만 필요하다면, 튜플을 분해할 때 밑줄(_)로 튜플의 일부를 무시할 수 있어요.

let (justTheStatusCode, _) = http404Error
print("상태 코드는 \(justTheStatusCode)입니다.")
// "상태 코드는 404입니다."를 출력합니다.
 
swift

또는 0부터 시작하는 인덱스 번호를 사용하여 튜플의 개별 요소 값에 액세스할 수도 있죠.

print("상태 코드는 \(http404Error.0)입니다.")
// "상태 코드는 404입니다."를 출력합니다.
print("상태 메시지는 \(http404Error.1)입니다.")
// "상태 메시지는 Not Found입니다."를 출력합니다.
swift

튜플 요소에 이름 지정하기

튜플을 정의할 때 튜플 내의 개별 요소에 이름을 지정할 수 있어요.

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

튜플의 요소에 이름을 지정하면 해당 요소 이름을 사용하여 해당 요소의 값에 액세스할 수 있답니다.

print("상태 코드는 \(http200Status.statusCode)입니다.")
// "상태 코드는 200입니다."를 출력합니다.
print("상태 메시지는 \(http200Status.description)입니다.")
// "상태 메시지는 OK입니다."를 출력합니다.
swift

좋은 아이디어네요! "함수의 반환 값으로서의 튜플" 섹션에 예제 코드를 추가해 볼게요.

함수의 반환 값으로서의 튜플

튜플은 특히 함수의 반환 값으로 유용해요. 웹 페이지를 가져오려고 시도하는 함수는 페이지 검색의 성공 또는 실패를 설명하기 위해 (Int, String) 튜플 타입을 반환할 수 있죠. 서로 다른 타입의 두 개의 고유한 값을 반환함으로써, 이 함수는 단일 타입의 단일 값만 반환할 수 있는 경우보다 결과에 대해 더 유용한 정보를 제공해요.

예를 들어, 다음과 같이 URL에서 데이터를 가져오는 함수를 작성할 수 있어요.

func fetchData(from url: String) -> (Int, String) {
    // URL에서 데이터를 가져오는 코드
    // ...
 
    // 성공 시 (200, "OK") 튜플 반환
    return (200, "OK")
 
    // 실패 시 (404, "Not Found") 튜플 반환
    // return (404, "Not Found")
}
 
// 함수 호출 및 결과 처리
let (statusCode, statusMessage) = fetchData(from: "<https://www.example.com>")
print("상태 코드: \(statusCode)")
print("상태 메시지: \(statusMessage)")
swift

위 코드에서 fetchData(from:) 함수는 URL에서 데이터를 가져오려고 시도해요. 함수의 반환 타입은 (Int, String) 튜플로 지정되어 있죠.

  • 데이터 가져오기가 성공하면 (200, "OK") 튜플을 반환해요.
  • 만약 데이터 가져오기가 실패한다면 (404, "Not Found") 튜플을 반환할 거예요.

함수를 호출할 때, 반환된 튜플을 (statusCode, statusMessage) 변수로 분해해요. 그러면 statusCodestatusMessage 변수를 통해 각각의 값에 접근할 수 있죠.

이렇게 튜플을 사용하면 함수가 여러 개의 관련된 값을 반환할 수 있어요. 이는 함수의 결과를 더 명확하고 의미 있게 표현할 수 있게 해줍니다.

자세한 내용은 여러 반환 값이 있는 함수를 참조하세요.

튜플 사용 시 주의사항

튜플은 관련 값의 간단한 그룹에 유용하지만, 복잡한 데이터 구조를 만드는 데는 적합하지 않아요. 데이터 구조가 더 복잡해질 가능성이 있다면 튜플이 아니라 클래스나 구조체로 모델링하는 게 좋답니다. 자세한 내용은 구조체와 클래스를 참조하세요.

이렇게 튜플은 Swift에서 관련된 값들을 간단하게 묶어서 표현할 수 있는 매우 유용한 기능입니다. 여러 값을 하나의 변수에 담을 수 있고, 각 요소에 접근하는 방법도 다양하죠. 특히 HTTP 상태 코드와 같이 관련된 정보를 함께 전달할 때 유용합니다.

앞으로도 튜플을 잘 활용한다면 더욱 간결하고 직관적인 코드를 작성할 수 있을 거예요. 튜플로 값을 묶어 전달하고, 필요한 요소만 꺼내 쓰는 방법을 연습해 보세요. 여러분의 코딩 실력이 한 단계 더 업그레이드될 것입니다!