본문 바로가기

iOS/Swift

Swift) 튜플(Tuple)에 대해 알아보자

안녕하세여 소들이빈다 👀

 

오늘은 오랜만에 Swift 문법에 대한 포슽팅을

해볼라고 합니다 :)

 

아 이번주만 버티면 추석 연휴까지 9일을 쉬어서

마음이 붕붕........... 🐝ㅎㅎ

쉬는 날에도 알고리즘이랑 포스팅 공부해야 하지만,,

 

키키키 쨌든 오늘할 공부는 오늘 해봅시다

이번에 배울 거승 바로

 

 

튜플 (Tuple)

 

 

어렵지 않고 가벼운 내용이라

빠르게 설명하고 퇴근해버릴 것임

 

 

 

 

 

 

1.  튜플이란?

 

자 튜플이라 함은 무엇이냐

 

 

(expr1, exp2, ... )

 

 

이렇게 괄호 () 안에 표현식이 원하는 만큼 들어가있는 것임

이렇게 말하면 못알아 들으니께

예제로 보면 다음과 같음

 

 

 

 

자 이런 식으로 괄호 안에 원하는 타입을 나열해서 쓰는 것이 튜플임

타입을 다음과 같이 막 섞어섞어 써도 됨

 

 

 

 

자 이렇게 블로그 주인장 'sodeul'에 대한 값들을

Int, String, Double 자료형을 마음대로 섞어서 튜플로 나타낼 수 있음

이러면 sodeul의 자료형은

 

 

 

 

내가 지정한 타입대로 됨 ㅎㅎ 

 

근데 튜플도 몇 가지 규칙이 있음

 

 

 

 

 

1-1. 튜플에 저장된 값에 접근 하려면 .(dot) 문법을 사용한다

 

아까 봤던 예제로 보겠음

참고로 튜플은 선언할 때 나열된 순서대로 배열처럼 index를 가짐

요롷게

 

 

 

 

자 이 튜플의 값에 접근하기 위해선

 

 

 

 

.(dot)을 이용해서 index로 접근 가능함

 

 

 

 

 

1-2. let으로 선언하면 Immutable Tuple, var로 선언하면 Mutable Tuple

 

자 아까 튜플에서 멤버 값을 바꿔 보겠음

 

 

 

그럼 에러가 남 당연함

sodeul은 let으로 선언된 상수이기 때문에 

당연히 튜플 값도 상수로 저장됨 (Immutable Tuple)

 

var로 선언하면 

 

 

 

 

수정 가능 >< (Mutable Tuple)

 

 

 

 

 

1-3. 튜플을 선언한 후엔 자료형 및 멤버의 갯수는 수정할 수 없다

 

먼가 튜플이 아니라 어느 자료형에도 해당하는 말인데

괜히 튜플이라 하니까 헷갈릴까봐 정리ㅎ ㅐ둠

 

자 아까 선언했던 튜플을 보겠음

 

 

 

 

자 이 튜플의 자료형은 

 

 

 

 

이것임 

 

 

근데 내가 1번 째 인덱스에 Int 값이 아닌 String 값을 대입 하려 함

다음과 같이

 

 

 

 

그럼 이런 식으로 에러

Int Type인데 왜 String 대입해????? 라는 에러임

 

쨌든 튜플로 선언한 것도 하나의 자료형이기 때문에

선언 이후에 자료형 및 멤버의 갯수를 바꿀 수 없음

 

 

 

.

.

 

엥 근데 튜플을 이런 식으로 쓰기엔 약간 무리 있는 거 같지 않음!?!?

sodeul.1이 무슨 값인지 어케 알고 씀  --__--

가독성 무엇?

 

 

따라서 튜플은 멤버들의 이름을 붙여줄 수 있음 ㅎㅎ

 

 

 

 

 

2. Named Tuple

 

튜플으ㅣ 멤버들에 이름을 붙여줘보자~~~~~~~

어떻게 붙이냐면~~~~~~~

 

 

(name: expr1, name2: exp2, ... )

 

 

멤버 앞에 이런 식으로 붙여주면 됨~)~

 

 

 

 

요롷게 ~~~~~~~_~~~~~~~~~~

그럼 접근할 때두

 

 

 

 

index가 아닌 이름으로 접근 가능해짐!!!!

가독성이 훨씬 높아졌음 ㅎㅎㅎ 

마치 엄청 간단하고 단순해진 구조체 같지 않음!?!?!

ㅎㅎㅎㅎㅎ 아주 편리한 자료형일세 (코쓱)

 

 

 

 

 

3. Tuple Decomposition

 

이번엔 튜플을 분해 🔪하는 방법에 대해 알아보겠음

자 다시 다음과 같이 튜플이 있을 때

 

 

 

 

나는 이 sodeul 이라는 튜플의 멤버를 각각의 상수에 저장하고 싶음

그럼 다음과 같이 하겠지??

 

 

 

 

근데 이렇게 하는 건 튜플 멤버의 갯수가 많아지면 그만큼 지저분해지고

코드도 더러워지고 별로임 웩

 

 

따라서 Decomposition 문법을 쓰면

다음과 같이 쉽게 분해할 수 있음

 

 

 

 

차례대로 상수 name, age, height 3개를 생성하고

튜플 멤버 값을 순서대로 저장하는 것임

 

바로 위의 name, age, hieght를 직접 선언하여 대입해줬던 코드와 결과적으로 같은 코드임 ㅎㅎㅎ

하지만 매우매우 간단해짐 ㅎㅎㅎ

 

근데 간단한 만큼 주의할 점은 있음

 

 

 

 

3-1. 튜플의 갯수와 지정할 상수의 갯수는 동일해야 한다

 

먼말이냐면

튜플 sodeul의 멤버 값이 3개잖음??? 그럼 무조건 

 

 

 

 

이 값도 3개가 와야 함

만약 3개 보다 부족하거나 많다면

 

 

 

 

에러가 뜬답니다~~~~~~~

 

그럼 만약 나는 name, age라는 두 개의 상수만 생성하고 튜플 값을 넣고 싶으면 어떡함!???

쓸데없는 height라는 상수도 만들어서 바인딩 해야됨 ? ㅠ_ㅠ

 

 

아니~~~

그땐 wildcard pattern을 이용하면 됨!!!!

 

 

 

 

3-2. 상수를 생략하고 싶다면 wildcard pattern을 이용한다

 

님들 wildcard pattern이 머냐면 

가끔 표현식을 사용하지 않거나 생략할 때 _ (언더바) 많이 쓰잖음?

머 제일 대표적으로 for in 구문 쓸 때 쓰는 거

 

 

 

 

이게 바로 wildcard pattern 임

 

 

쨌든 튜플도 마찬가지로 wildcard pattern 을 이용해서

필요 없는 멤버는 생략하고 바인딩 할 수 있음

 

 

 

 

쨔잔 요런식으루 ~_~

wildcard pattern을 이용하면 된다 ~~_~~

 

 

 

 

 

4. Tuple Matching

 

님드라 튜플ㅇ ㅣ빛을 발할 때는 언제냐면

바로바로오오오오오오

 

Switch 문

 

을 사용할 때임 ㅎㅎㅎㅎㅎ 

왜냐?

 

Switch 문은 Tuple Matching을 지원하거든

 

 

그럼 Tuple Matching이 뭔지 알아봅세!!! :)

 

 

 

 

4-1. Tuple Matching을 지원하는 Switch 문

자 다음과 같은 튜플이 있을 때

 

 

 

 

다음과 같이 Switch 문의 조건을 줄 수 있음

 

 

 

 

case 조건을 위처럼 Tuple 자료형으로 설정하는 것임

따라서 resolution은 자기와 같은 튜플 조건문을 가진 case 문을 실행하게 되는 것임

 

 

 

 

 

4-2. Interval Matching도 가능하다

다음고 ㅏ같이 Interval Matching도 가능함

 

 

 

 

 

 

 

4-3. wildcard pattern을 이용해 원하는 멤버 값에 대한 조건을 걸 수 있다

 

_를 이용해 다음과 같ㅇㅣ

원하는 튜플으 ㅣ멤버값에 대한 조건을 걸 수 있음

 

 

 

 

 

 

 

4-4. value binding을 활용할 수 있다

 

value binding은 아까 튜플 Decomposition 문법같이

 

 

 

 

튜플 resolution의 멤버 값은 상수 w, h에 바인딩 되고,

이 바인딩 된 상수 w, h 값을 이용해 조건문을 만드는 것임

 

뭐 이런 식으로도 응용이 가능하단 말임!!!!!!!!!!!!! :D

 

 

 

 

 

 

 

.

.

튜플은 개념이 전혀 어렵ㅈㅣ 않고  접근하기도 쉬운데 

 코드를 짤 땐 정말 유용하게 사용하니 꼭 알아두셈 :))))))

 

 

오늘은~~ 간단하게 튜플에 대해 정리해 봤는데!!!

혹시 잘못된 내용이나 모르는 내용, 이해 안 가는 내용 있으면

언제든 댓글 주세용 🐝

 

고럼 20,000

 

 



Calendar
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
최근 댓글
Visits
Today
Yesterday