Swift

Swift | Collection (컬렉션)에 관하여 4 - Tuple

ziziDev 2024. 5. 11. 18:54
반응형

안녕하세요!

오늘은 Collection 마지막 시간인

Tuple에 대해서 정리하고자 합니다

 

Tuple은 제가 사용했던

C#에서도 사용했던걸로 기억합니다

하지만 구문에 차이가 납니다

 

보통 C#에서는 값을 반환하는데 사용을 많이 하고

메서드 반환 유형으로 많이들 사용했습니다

예전에는 여러 값을 반환하려고하면 클래스나 구조체를 객체로 만들어서

사용했어야 하나 Tuple이 한결 가볍게 만들어줬져

 

 

Swift에서의 Tuple은

괄호 안에 쉼표로 구분된 여러가지 요소들을 넣을 수 있답니다

하지만 튜플의 요소가 한 번 생성이되면 변경할 수 없습니다

만약에 안의 요소를 변경하고 싶다면??..

새로 뚝딱뚝딱 만듭시다 ^^

 

그냥 짧게 말하면

 

선언과 동시에 결정되기 때문에

추가와 삭제 수정이 불가하다

 

 

Tuple

 

여러값을 그룹화 합니다

튜플안에 값은 어떠한 타입도 위에서 말하듯이 가능하고 서로 같은 타입일

필요가 없습니다

 

상수 또는 변수로 분해하여 평소와 같이 접근이 가능

일부만 필요한 경우 튜플을 분해할 때 언더바(_)로 튜플 일부를 무시가능

배열처럼 튜플의 개별 요소 값에 접근할 수 있음

튜플을 정의할 때 각 요소마다 이름을 정의할 수 있고

요소에 이름이 있다면 그 요소에 값을 접근할 때 요소 이름으로 접근이

가능하답니다

 

튜플의 사용법은 소괄호 ()를 사용하여 아이템들을 묶습니다

 

 

튜플은

여러 자료형이 복합적으로

들어갈 수 있답니다

 

 

일반적으로 복잡한 데이터 구조를 생성하는데 Tuple을 사용하는건 알맞지 않고

데이터가 복잡한 경우엔 클래스나 구조체를 사용합니다

 

근데 여기서 잠깐

아이템 수정이 안된다구??..

그럼 저렇게 변수로 선언해서 만들면 수정가능한거아냐??..라고 생각 할 수 있으니

수정하면 Tuple내에 저장된 변수에 리터럴이 변경되었는지 확인해봅시다

 

 

변경되지 않는걸 확인할 수 있습니다

Tuple은 저장된 순간 변경되지 않는다는점!

 

너가 let으로 선언해서 그런거아냐?

라고 할 수 있지만 var loginSuccess라고 해서 다를까요??

 

응~ 변경안돼~

라고 합니다 ^^

 

그리고 튜플에 각 요소에 접근하고 싶다면 

배열에서 인덱스를 참조하는 방식이지만

여기서는 .으로 인덱스 연결하여 사용합니다

 

 

그리고 튜플의 각 요소에 접근할 때 .0, .1 ... 이렇게 접근하는 법 외에

이름을 넣을 수 있답니다

 

이름을 지어줄 때 String으로 넣지 않고

각 요소 이름 : 자료형

이런식으로 넣어줄 수도 있고

변수(상수)화가 가능하답니다

이게 무슨말이냐?

처음부터 변수명을 지을 때 부터 가능하다~

 

 

(0, 1, 2, 50)이라는 튜플을 만들고

이를 해체하여 값을 zero, one, two, fifty라는 변수에 할당하고 있는걸 확인할 수 있습니다

 

서로 다른 데이터 타입의 값을 포함할 수 있고 순서대로 할당이 되는걸 확인할 수 있습니다

 

 

튜플은 값 비교가 가능할까?

 

가능합니다

 

 

이렇게 정수도 들어가는데 

같거나 다른거 말고도

대소 비교도 가능하지 않을까?

라는 생각이 들 수도 있습니다

 

이것 또한

 

가능합니다

 

 

소문자 a 대문자 A 같은 알파벳도 왜

다른거야??!!

 

이유는

소문자 대문자를 비교할 때

유니코드 값으로 비교가 이루어지기 때문입니다

 

유니코드란??

문자를 컴퓨터에서 일관되게 표현하고 처리하기 위해서 고유한

포인트(숫자)를 할당하여 문자를 식별하는데

16진수로 표현되어 있답니다

 

A유니코드

U+0041(41)

a유니코드

U+0061(61)

 

 

튜플을 사용하여 switch문을 작성할 수도 있습니다

 

정수를 튜플로 받아서 더하거나 빼는 함수를 작성할 수가 있습니다

 

if x Tuple

 

로 사용할 수 있는 경우 입니다

 

if let 바인딩을 사용한 예시도 알아봅시다

 

optionalTuple을 if let 바인딩을 사용하여 각 요소를 추출하고 모든 요소가 nil이 아닌 경우에만

출력을 하고 있습니다 :)

 

 

 

point의 각 요소에 대한 패턴 매칭을 통하여 튜플이 어떤 위치에 있는지를 확인하고 출력할 수가 있습니다

 

그리고 tuple은

예전에 배웠던 switch문 where문에서도 상요이 가능합니다

그리고 반복문에서 패턴 매칭 보다 세부적으로 제어하고자 할 때 사용을 할 수 있습니다

 

 

우선 반드시 switch문으로 where절을 사용하려면 바인딩을 사용하여

비교해주어야 활용할 수 있다는점!

 

 

Tuple은 정말 활용할 수 있는게 무궁무진하져?

이제 마무리하도록 하겠습니다:)

 

틀린 부분이 있다면 댓글로 알려주세요!!

읽어주셔서 감사합니다 :)

 

 

반응형