Part4. 튜플(Tuple)

튜플 (Tuples)

  • 튜플은 2개 이상의 연관된 데이터(값)를 저장하는 Compound(복합/혼합) 타입입니다. 특별하게 타입이 정해져 있지 않으며, 포함될 데이터 갯수를 마음대로 정의할 수 있습니다.

var threeValues = ("홍길동", 20, "서울")

// 연관된 값(튜플)의 각각의 데이터의 접근
print(threeValues.0) // "홍길동"
print(threeValues.1) // 20
print(threeValues.2) // "서울"

  • Named Tuple(이름이 매겨진 튜플)을 사용하면 가독성이 높아집니다.

let iOS = (language: "Swift", version: "5")

print(iOS.language) // "Swift"
print(iOS.version)  // "5"

  • 튜플을 분해하여 데이터를 개별적으로 사용할 수 있습니다.

let (first, second, third) = (5, 6, 7)
print(first)  // 5
print(second) // 6
print(third)  // 7

  • 튜플은 비교도 가능합니다.

  • 두 개의 튜플 비교 가능 ===> 왼쪽 멤버부터 한 번에 하나씩 비교하고, 같을 경우 다음 멤버를 비교함

  • 튜플의 비교는 7개 미만의 요소를 가진 것만 가능, 요소가 7개 이상인 튜플의 비교는 직접 구현해야 함(스위프트 표준 라이브러리 기능)

// 첫 번째 값을 먼저 비교하고 그 다음 값을 비교
let comparison1 = (1, "zebra") < (2, "apple")  // true, 1이 2보다 작고; zebra가 apple은 비교하지 않기 때문
let comparison2 = (3, "apple") < (3, "bird")   // true, 왼쪽 3이 오른쪽 3과 같고; apple은 bird보다 작기 때문(맨 처음 소문자로 비교)
let comparison3 = (4, "dog") == (4, "dog")     // true, 두 튜플의 모든 멤버가 동일하여 true

let comparison4 = ("blue", -1) < ("purple", 1) // 비교 가능, 결과: true
// let comparison5 = ("blue", false) < ("purple", true) // 에러 발생, Bool 값은 비교 불가능

위의 코드에서는 튜플 비교의 동작 방식과 제약 조건을 보여주고 있습니다. 튜플의 비교는 왼쪽 멤버부터 한 번에 하나씩 비교하며, 같을 경우 다음 멤버를 비교합니다. 튜플의 비교는 요소가 7개 미만인 경우에만 가능하며, 7개 이상인 경우에는 직접 구현해야 합니다. 첫 번째 값을 먼저 비교하고 그 다음 값을 비교하여 튜플의 값을 사전적으로 비교할 수 있습니다.

튜플과 switch문

  • 튜플을 활용하여 switch문을 단순하게 표현할 수 있습니다.

let iOS = (language: "Swift", version: "5")

switch iOS {
case ("Swift", "5"):
    print("스위프트 버전 5입니다.")
case ("Swift", "4"):
    print("스위프트 버전 4입니다.")
default:
    break
}

  • 튜플의 값 분해를 통해 switch문을 더 간결하게 작성할 수 있습니다.

var coordinate = (7, 5)

switch coordinate {
case (let distance, 0), (0, let distance):
    print("X 또는 Y축 위에 위치하며, \(distance)만큼의 거리가 떨어져 있음")
default:
    print("축 위에 있지 않음")
}

  • where절을 활용하여 튜플을 더욱 유연하게 다룰 수 있습니다.

coordinate = (5, 0)

switch coordinate {
case (let x, let y) where x == y:
    print("(\(x), \(y))의 좌표는 y = x 1차함수의 그래프 위에 있다.")
case let (x, y) where x == -y:
    print("(\(x), \(y))의 좌표는 y = -x 1차함수의 그래프 위에 있다.")
case let (x, y):
    print("(\(x), \(y))의 좌표는 y = x, 또는 y = -x 그래프가 아닌 임의의 지점에 있다.")
}

튜플은 여러 값을 한 번에 반환하거나 다양한 데이터를 묶어서 사용할 때 유용한 도구입니다.

댓글을 작성해보세요.

채널톡 아이콘