튜플(Tuple)은 스위프트에서 제공하는 특별한 성격의 집단 자료형으로서, 파이썬에서도 사용되는 자료형이다.
튜플은 한 가지 타입의 데이터만 저장할 수 있는 배열이나 딕셔너리와는 달리 하나의 튜플에 여러 가지 타입의 데이터를 저장할 수 있지만, 일단 선언되고 나면 상수적 성격을 띠므로 더 이상 값을 추가하거나 삭제하는 등의 변경이 불가능하다.
즉, 타입과 관계없이 다양하게 저장할 수 있지만 오직 최초에 선언된 상태의 데이터만 사용할 수 있고 수정이나 삭제, 추가 등 변경할 수 없는 것이 튜플의 특징이다.
튜플은 대괄호를 사용하는 배열이나 집합과 달리 소괄호 ()를 사용하여 데이터를 정의한다.
( < 튜플 데이터 1 >,< 튜플 데이터 2 >,...)
튜플은 선언된 후로는 데이터의 변경이 일체 제한되므로 배열이나 집합에서 사용했던 것처럼 값의 동적 추가가 불가능하다. 이 때문에 별도의 선언을 위한 구문이 없는데, 튜플을 정의하기 위해서는 튜플 정의 형식처럼 괄호 안에 추가될 데이터들을 나열하기만 하면 된다.
튜플의 각 데이터는 인덱스 속성을 이용하여 참조할 수 있다.
배열의 인덱스와는 여러 부분에서 다르지만, 결정적으로 튜플의 인덱스는 속성으로 제공된다. 이 때문에 배열에서 인덱스를 참조하는 방식과 그 표기에서 차이가 있다.
배열에서 인덱스를 사용하기 위해 대괄호 내부에 인덱스를 작성한다면, 튜플에서는 점(dot)으로 인덱스를 연결하여 사용한다.
tupleValue.0 // "b"
tubleValue.1 // "i"
tubleValue.2 // "n"
tubleValue.3 // 4
tubleValue.4 // 19
튜플 역시 없는 인덱스를 참고하고자 할 때 오류가 발생하며, 인덱스가 0부터 시작한다는 점은 배열의 인덱스와 같다. 실제로 데이터가 저장될 때는 각 인덱스에 해당하는 속성값에 개별 데이터들이 저장된다.
tupleValue에서 데이터가 저장된 형태를 살펴보면 아래와 같다.
.0 "b"
.1 "i"
.2 "n"
.3 4
.4 19
튜플은 별도의 선언 구문이 없지만 타입 어노테이션을 사용하기 위한 타입을 정의할 수는 있다.
이때 정의되는 타입 어노테이션의 내용은 튜플의 데이터에 따라 달라진다.
var tpl01 : (Int, Int) = (100, 200)
var tpl02 : (Int, String, Int) = (100, "a", 200)
var tpl03 : (Int, (String, String)) = (100, ("t", "v"))
var tpl04 : (String) = ("Sample String")
타입 어노테이션을 이용하여 튜플을 선언할 때는 들어갈 데이터의 개수와 순서에 맞게 각각의 타입을 선언해야 한다.
위에 코드에서는 이에 맞게 tpl01은 두개의 Int 타입 값을 저장하는 튜플로, tpl02는 Int, String, Int 타입을 저장하는 튜플로 정의했다. tpl03은 튜플 내의 데이터로 튜플을 가진다는 특징이 있다. 이 역시 타입 어노테이션에서 튜플 형식을 작성하면 된다.
마지막 tpl04는 주의해서 봐야할 부분인데, 문자열 하나만 저장하는 튜플로 선언했지만, 실제로 저장된 결과를 확인해 보면 이 변수는 튜플이 아닌 문자열 변수로 선언이 된다. 여기서 알 수 있는 점은 하나의 데이터만 있는 튜플은 데이터 타입의 일반 자료형이 된다는 사실이다.
tpl04는 "Sample String" 이라는 값 하나만 데이터로 가지기 때문에 문자열 타입의 변수로 선언이 된다.
📝 따지고 보면 String 타입의 변수를 선언하면서 변수에 할당될 값 양쪽에 괄호를 둘러놓은 거
'메모장' 카테고리의 다른 글
단위 테스트(Unit Test) (1) | 2023.12.26 |
---|---|
MVC 패턴 (1) | 2023.11.07 |
Swift 집합 연산 (2) | 2023.03.28 |
Swift 집합의 동적 추가와 삭제 (3) | 2023.03.24 |
Swift 집합 순회 탐색 (2) | 2023.03.22 |