본문 바로가기

iOS/Swift

[Swift] 튜플 (Tuple) 알아보기

튜플 (Tuple)

튜플이란 "데이터의 묶음"이다.
타입에 따로 구애받지 않기 때문에 여러가지의 타입의 데이터를 묶어서 관리할 떄 사용된다.
다음 코드처럼 타입을 미리 정해서 사용할 수도 있고,

var person : (String, Int, Double) = ("Suzzang", 26, 164.9)

다음 코드처럼 타입을 따로 정하지 않고 사용할 수도 있다.

var person = ("Suzzang", 26, 164.9)

이때 튜플은 타입 추론에 의해서 컴파일러가 할당된 값을 기준으로 타입을 결정한다.

옵션을 누르고 튜플의 이름을 눌러보면 다음과 같이 자료형이 정해져 있는 것을 볼 수 있다.

 

튜플의 각 요소는 다음과 같이 튜플의 인덱스 값을 통해서 접근할 수 있다.

var person : (String, Int, Double) = ("Suzzang", 26, 164.9)
print("\(person.0), \(person.1)")
// 출력 : Suzzang, 26

 

하지만 위의 방식의 단점은 데이터의 각 요소가 나타내는 것이 어떤 것인지 쉽게 파악하지 못한다는 것이다. 그래서 이것을 보완하기 위해서 튜플에는 각각의 요소마다 이름을 붙일 수 있는 기능이 존재한다.

var person : (name : String, age : Int, heigth : Double) = ("Suzzang", 26, 164.9)
print("\(person.name), \(person.age)")
// 출력 : Suzzang, 26

 

파이썬의 튜플과의 차이점

스위프트의 튜플은 파이썬의 튜플과 역할이 매우 비슷해보여서 자칫하면 엥? 굳이 튜플을 왜써? 라고 생각할 수도 있다.
하지만 파이썬의 튜플과 스위프트의 튜플은 엄청난 차이가 존재한다...

스위프트의 튜플은 내부의 값을 변경할 수 있다

파이썬의 튜플은 내부의 값을 변경할 수 없다. 한번 정해진 값을 따로 수정할 수 없기 때문에 바꾸기 위해서는 리스트로 변경하고 다시 튜플로 만들어 주는 등을 통해서 해결해야했다.

하지만 스위프트의 튜플은 파이썬의 튜플과는 다르게 내부의 데이터를 수정할 수 있었다.
그에 대한 이유를 고민해 보니 아무래도 스위프트는 상수와 변수를 정의할 수 있기 때문인 것 같았다.

letvar을 통해서 그 값이 수정되고 아니고를 미리 정할 수 있기 때문에 파이썬의 튜플과는 다른 용도인 다양한 타입을 가진 데이터의 묶음의 역할을 할 수 있다고 생각한다.

 

회고 🔧

이전의 키오스크 프로젝트에서 장바구니를 만들 때 자료형이 AnyArray와 여러 개를 담을 수 있는 Array의 중첩을 통해서 구현했다. 튜플을 굳이 사용하지 않았던 이유는, 파이썬에서의 튜플과 같다고 생각했기 때문이다..

 

하지만 그렇게 구현하니 아주 귀찮은 일들이 많이 생겼다. Any타입으로 설정했기 때문에 다른 곳에서 장바구니에 담겨있는 자료를 사용할 때마다 타입캐스팅을 해서 사용해야하는 불편함이 있었다.

한 두번 정도 하는 타입 캐스팅이었으면 괜찮았을 수도 있지만, 그것을 여러번 진행하려니 코드가 의미없이 길어지고 가독성또한 매우 낮아졌다.
이제라도 배웠으니,,, 다음에는 튜플을 사용해서 더 가독성과 깔끔함을 겸비한 코드를 만들 수 있을 것 같다! 💪💪💪뽜이링

 

'iOS > Swift' 카테고리의 다른 글

[Swift] Class와 Struct의 차이점  (0) 2023.08.26
[Swift] while문의 구문이름표를 알아보자  (0) 2023.08.04
[Swift] String 관련 메서드 정리  (2) 2023.08.03
[Swift] Map 알아보기  (1) 2023.08.01