"지정된 데이터의 묶음"
튜플은 파이썬의 튜플과 비슷하다.
여러타입의 데이터를 하나로 묶을 수 있다
var tupleEx01:(Int, String, Double) = (25, "은수", 181.3) //나이, 이름, 키를 나타내는 튜플
var tupleEx02 = (29, "민수", 175.4)
이름뒤에 :을 붙이고 ()안에 원하는 타입을 적는다 (Any타입도 가능하다!)
타입을 지정해도 되고 안해도 된다.
var tuple01:(Int, String, String) = (25, "eunsoo", "steve")
print(tuple01) //결과: (25, "eunsoo", "steve")
print(tuple01.2) //결과: steve
그냥 print(튜플이름) 이런형태로 작성해도 튜플을 출력해준다.
튜플이름.정수 인덱스값으로 접근도 가능하다 (0부터 시작하는 정수 인덱스)
튜플의 특정데이터 추출을 이전의 인덱스값으로의 접근도 가능하지만 변수나 상수로 추출또한 가능하다.
다음코드를 보자
var tuple01:(Int, String, String) = (25, "eunsoo", "steve")
var (age, name, nickname) = tuple01
print(age, name, nickname)
//결과: 25 eunsoo steve
위에서 만들었던 tuple01이라는 튜플의 데이터를 변수 age, name, nickname이라는 3개의 변수에 집어넣고 출력했다.
이런식으로 변수에 직접추출도 가능하다.
var tuple01:(Int, String, String) = (25, "eunsoo", "steve")
var (_, name, _) = tuple01
print(name)
이처럼 당장 필요없는 데이터의 경우 _언더바 를 사용해서 해당 데이터는 무시한다는 설정을 해주면 된다.
필자가 처음 튜플을 접하고 든 생각이다 튜플과 any타입의 배열과 다른게 무엇일까?
일단 생성부터 보자
var tuple01:(Int, String, String) = (25, "eunsoo", "steve")
var arr01:[Any] = [25, "eunsoo", "steve"]
둘다 동일하게 나이와 이름, 별명을 저장한다.
하지만 tuple은 타입이고 array는 배열이다
tuple의 경우 (25, "eunsoo", "steve") 이렇게 하나의 데이터 이고
array의 경우 25, "eunsoo", "steve" 이 세개가 각각 하나의 원소이다
tuple의 경우 타입이기에 여기서 더이상 확장이 불가능하다.
만약 tuple01에 집주소와 몸무게, 키 등의 데이터를 추가 하고자 한다면 추가가 불가능하다
array, 배열의 경우 추가가 가능하지만 배열 하나를 통째로 한사람의 데이터를 저장하게 만들어야 할것이다.(2차원배열을 사용하면 여러명의 데이터 저장이 가능하긴 하다.)
이 두 차이점을 확실히 구분하는것이 중요하다.
그래고 tuple타입의 배열의 생성이 가능하다.
var tArr:[(Int, String, String)] = [(1,"eunsoo","steve"), (2,"minsoo","peter")]
print(tArr[0]) //결과: (1, "eunsoo", "steve")
이런식으로 생성하는게 가능하다.
함수나 에러의 반환에 사용된다고 한다. (swift공식문서에서 그랬음...)
let http200Status = (statusCode: 200, description: "OK")
이런식으로 에러코드를 만들어서 반환해야 할때 사용 될 수 있다
그리고 튜플은 복잡한데이터에 사용하면 오히려 불리하다.
튜플은 관련된 값의 간단한 그룹에 유용합니다. 복잡한 데이터 구조를 생성하는데는 맞지 않습니다. 데이터 구조가 복잡한 경우 튜플이 아닌 클래스 (class) 또는 구조체 (structure)를 사용하십시오.
너무 복잡한 데이터는 구조체를 사용하도록하자.