면접 질문 중 하나인 '배열과 튜플의 차이점을 말해보세요.' 대비하여 정리해 보았다.
나아가 차이점에 대한 피드백을 받아서 수정을 하게 되었다.
📌 코드 예시
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)으로 나누어 볼 수 있다.
명명된 타입(named type)
여기서 명명된 타입은 정의할 때 특정한 이름을 붙일 수 있는 타입이며 크게 3가지 종류로 나누어 볼 수 있다.
- 클래스와 구조체, 열거형, 프로토콜과 같이 사용자가 정의한 명명된 타입
- 배열과 딕셔너리, 옵셔널 타입을 포함한 일반적인 명명된 타입
- 데이터 타입으로, 다른 프로그래밍 언어에서는 원시 타입이라 불리는 것들
복합 타입(compound type)
반면에 복합 타입은 Swift 언어에서 정의되어 이름이 없는 타입이며 크게 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 공식 문서
'iOS > Swift' 카테고리의 다른 글
[Swift] (알다가도 모를) 문자열의 접근 (0) | 2023.04.25 |
---|---|
[Swift] 문자열은 참조 타입이 아닌 값 타입이다? (0) | 2023.04.24 |
[Swift] Nil 결합 연산자(Nil-Coalescing Operator) (0) | 2023.04.11 |
[Swift] 문자열 리터럴(String Literals) (0) | 2023.04.08 |
[Swift] 기본 연산자(Basic Operators) (0) | 2023.04.06 |
댓글