본문 바로가기
iOS/Swift

[Swift] 배열과 튜플의 차이점

by Dev.Andy 2023. 4. 24.

면접 질문 중 하나인 '배열과 튜플의 차이점을 말해보세요.' 대비하여 정리해 보았다.

나아가 차이점에 대한 피드백을 받아서 수정을 하게 되었다.

 

📌 코드 예시

Array

var names = ["Andy", "Lucas", "Ellie", "Nora"]
print(names) // ["Andy", "Lucas", "Ellie", "Nora"]
print(names[2]) // Ellie

 

Tuple

let aPerson = (name: "Andy", age: 20)
print(aPerson.name) // Andy
print(aPerson.1) // 20

 

📌 차이점 - 두 가지 타입에 관하여

Swift의 타입은 크게 명명된 타입(named type)과 복합 타입(compound type)으로 나누어 볼 수 있다.

Types | Documentation

명명된 타입(named type)

여기서 명명된 타입은 정의할 때 특정한 이름을 붙일 수 있는 타입이며 크게 3가지 종류로 나누어 볼 수 있다.

  1. 클래스와 구조체, 열거형, 프로토콜과 같이 사용자가 정의한 명명된 타입
  2. 배열과 딕셔너리, 옵셔널 타입을 포함한 일반적인 명명된 타입
  3. 데이터 타입으로, 다른 프로그래밍 언어에서는 원시 타입이라 불리는 것들

복합 타입(compound type)

반면에 복합 타입은 Swift 언어에서 정의되어 이름이 없는 타입이며 크게 2가지로 나눌 수 있다.

  1. 함수 타입
  2. 튜플 타입

튜플 타입(tuple type)

튜플 타입은 소괄호`()`로 묶여서 쉼표 `,`로 구분한 타입의 리스트이다.

공식 문서에 대한 결론

이를 종합해 보면, 배열은 일반적인 명명된 타입(named type)이고, 튜플은 복합 타입(compound type) 중에서 튜플 타입이다.

 

📌 사소한 차이점

(1) 구문(Syntax)의 차이

  • 배열의 생성은 대괄호 [] 사용, 튜플의 생성은 소괄호 () 사용
  • 배열은 요소의 이름을 정할 수 없고, 튜플은 요소의 이름을 정할 수 있다. let aPerson = (name: "Andy", age: 20)
  • 배열은 대괄호를 이용한 인덱스 [i] 로 접근, 튜플은 온점 . 으로 이용한 인덱스 aPerson.0 나 튜플 요소의 이름 aPerson.name으로 접근

(2) 타입의 종류와 요소의 자료형

  • 배열과 튜플은 모두 value type이다. (Swift의 배열은 구조체로 이루어져 있다.)
  • 배열은 같은 자료형의 컬렉션인 것에 비해, 튜플은 다른 자료형 또한 포함될 수 있다

(3) 가변성(mutability) vs 불변성(immutability)

  • 배열은 수정 가능(var로 선언이 됐다는 가정 하에) → 배열은 이후에 크기 변경이 된다.
  • 튜플은 수정 불가능 → 튜플은 크기가 정해져 있다.

(4) 실제 활용

  • 배열은 자료형의 저장과 접근, 수정에 초점을 두었다.
  • 튜플은 좀 더 단순한 관련된 값들의 모임에 가깝다.

 

📌 자료

한글 Swift 공식 문서

영문 Swift 공식 문서

댓글