SlideShare a Scribd company logo
1 of 22
튜플 🔗
Swift: Tuples
2020.04.27.
김주원
튜플?🤔
튜플?
튜플(tuple)은 셀수있는 수량의 순서있는 열거이다.
n 개의 요소를 가진 튜플을 n-튜플(n-tuple) 또는 n중쌍, n짝이라고 한다.
비어있는 열은 유일한 0-튜플이다.
임의의 n-튜플은 순서쌍의 개념을 이용하여 재귀적으로 정의된다.
튜플은 다른 수학 개념들(예를 들어 벡터)을 나타내는 데에 자주 사용된다.
튜플은 보통 원소들을 괄호 '( )'안에 쉼표 ','로 구분되게 나열하여 표시한다.
5-튜플의 예를 들면 (2, 7, 4, 1, 7)와 같다. 때로는 대괄호 '[ ]'나 화살괄호 '< >'와 같은 다른 부호를 사용하
기도 한다.
중괄호 '{ }'는 집합을 표시할 때 쓰이기 때문에 튜플 표시에는 사용하지 않는다.
컴퓨터 과학에서, 튜플은 어떤 요소의 집합, 혹은 테이블에서의 행을 가리킨다(레코드와
동일한 의미).
단, 일반적인 집합과는 달리 중복이 허용될 수 있다.
튜플의 개념은 언어학[1]과 철학[2]에서도 사용된다.
위키백과 - 튜플 중
튜플?
Swift -Tuples
튜플은 여러 값들을 하나의 값으로 묶어준다.
튜플안의 여러 값들은 어느 타입도 가능하고, 각각 동일한 타입일 필
요도 없다.
튜플을 만들자 🔨
튜플을 만들자
쉼표로 구분하고, 소괄호로 묶어준다.
let account = (1, "이름", "남", phoneNumber)
요소를 열거한다는 점에서 배열과 비슷해 보인다.
튜플을 만들자
배열과 뭐가 다르죠?
1 튜플은 타입이 정해져 있지 않다.
let array = [Int]()
let tuple1 = (Int, Int)
let tuple2 = (Int, Double, String)
2 튜플은 개수가 고정되어 있다.
var array = [Int]()
var tuple = (0, "text")
array.append(0)
tuple.append(0.1) // X
튜플을 만들자
배열과 뭐가 다르죠?
3 튜플은 요소를 소괄호로 묶는다.
let array = [0, 1, 2, 3, 4]
let tuple = (0, 1, 2, 3, 4)
4 튜플은 ‘.’으로 인덱스 접근한다.
let first = array[0]
let second = tuple.1
튜플을 만들자
선언과 초기화
1 값으로만 묶어서 생성
let gender = “남"
let account = (1, "이름", gender, “01012345678")
2 타입 지정 후 대입
let account: (Int, String, Character, String) = (1, "이름", "남", "01012345678")
튜플을 만들자
선언과 초기화
1 값으로만 묶어서 생성
let gender = “남”
let account = (number: 1, name: "이름", gender: gender, phoneNumber: “01012345678")
2 튜플 타입 지정 후 대입
let account: (number: Int, name: String, gender: Character, String) = (1, "이름", "남", phoneNumber:
"01012345678")
튜플을 만들자
튜플 타입 정의
typealias Account = (Int, name: String, Character, String)
let account: Account = (1, "이름", "남", "01012345678")
이렇게 사용합니다 🔮
이렇게 사용합니다.
튜플 요소 접근
let account = (number: 1, "이름", gender: "남", “01012345678")
1 인덱스로 접근
let number = account.0
let gender = account.2
2 이름으로 접근
let number = account.number
let gender = account.gender
이렇게 사용합니다.
튜플의 분해
let account = (1, "이름", "남", phoneNumber: “01012345678”)
let (number, name, gender, phoneNumber) = account
print(account.phoneNumber, gender) //01012345678 남
분해 요소 생략
let (number, _, gender, _) = account
이렇게 사용합니다.
임시 구조체 or 여러 값을 묶어 리턴
struct Vector3 {
let x, y, z: Double
static var zero: Vector3 {
return .init(x: 0, y: 0, z: 0)
}
}
func extractVector2(from vector3: Vector3) -> (x: Double, y: Double) {
return (vector3.x, vector3.y)
}
let vector3 = Vector3.zero
let vector2 = extractVector2(from: vector3)
print(vector3, vector2) // Vector3(x: 0.0, y: 0.0, z: 0.0) (x: 0.0, y: 0.0)
이렇게 사용합니다.
조건문에서
Switch
typealias Account = (Int, String, Character, String)
let account: Account = (1, "이름", "남", "01012345678")
switch account {
//1
case (1, _, "남", _):
//2
case (1, "이름", "남", "01012345678"):
//3
case (let number, _, "남", let phoneNumber) where phoneNumber.count > 0:
print(number) // 1
default:
break
}
이렇게 사용합니다.
조건문에서
If
typealias Account = (Int, String, Character, String)
let account: Account = (1, "이름", "남", "01012345678")
//3
if case (let number, _, "남", let phoneNumber) = account, phoneNumber.count > 0 {
print(number) // 1
}
이렇게 사용합니다.
반복문
For
var accounts = [
(1, "한놈", "여", "01012345678"),
(2, "두시기", "남", "01023456789"),
(3, "석삼", "남", "010134567890"),
(4, "너구리", "여", "01045678901")
]
for (_, name, _, phoneNumber) in accounts {
print(name, phoneNumber)
}
/*
한놈 01012345678
두시기 01023456789
석삼 010134567890
너구리 01045678901
*/
이런 것도 돼요 ✨
이런 것도 돼요.
튜플 정렬
var accounts: [(number: Int, name: String, gender: Character, phoneNumber: String)] = [
(1, "한놈", "여", "01012345678"),
(2, "너구리", "남", "01023456789"),
(3, "석삼", "남", "010134567890"),
(4, "너구리", "여", "01045678901"),
(5, "너구리", "여", “01046789012”)
]
let sortedAccounts = accounts.sorted{($0.name, $1.gender, $0.phoneNumber) < ($1.name, $0.gender,
$1.phoneNumber)}
print(sortedAccounts)
/*
[
(number: 4, name: "너구리", gender: "여", phoneNumber: "01045678901"),
(number: 5, name: "너구리", gender: "여", phoneNumber: "01046789012"),
(number: 2, name: "너구리", gender: "남", phoneNumber: "01023456789"),
(number: 3, name: "석삼", gender: "남", phoneNumber: "010134567890"),
(number: 1, name: "한놈", gender: "여", phoneNumber: "01012345678")
]
*/
어때요, 참 쉽죠?
마침. 🎬
다음 주제는?

More Related Content

Similar to Swift 튜플 (tuples)

파이썬 자료형 발표
파이썬 자료형 발표파이썬 자료형 발표
파이썬 자료형 발표joonjhokil
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제NAVER D2
 
텐서플로우-기초 프로그래밍
텐서플로우-기초 프로그래밍텐서플로우-기초 프로그래밍
텐서플로우-기초 프로그래밍jdo
 
파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311Yong Joon Moon
 
파이썬 숫자,변수,문자열
파이썬 숫자,변수,문자열파이썬 숫자,변수,문자열
파이썬 숫자,변수,문자열HoYong Na
 
C++11 Tuple
C++11 TupleC++11 Tuple
C++11 Tuplequxn6
 

Similar to Swift 튜플 (tuples) (7)

파이썬 자료형 발표
파이썬 자료형 발표파이썬 자료형 발표
파이썬 자료형 발표
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
 
텐서플로우-기초 프로그래밍
텐서플로우-기초 프로그래밍텐서플로우-기초 프로그래밍
텐서플로우-기초 프로그래밍
 
파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311
 
파이썬 숫자,변수,문자열
파이썬 숫자,변수,문자열파이썬 숫자,변수,문자열
파이썬 숫자,변수,문자열
 
C++11 Tuple
C++11 TupleC++11 Tuple
C++11 Tuple
 

Swift 튜플 (tuples)

  • 3. 튜플? 튜플(tuple)은 셀수있는 수량의 순서있는 열거이다. n 개의 요소를 가진 튜플을 n-튜플(n-tuple) 또는 n중쌍, n짝이라고 한다. 비어있는 열은 유일한 0-튜플이다. 임의의 n-튜플은 순서쌍의 개념을 이용하여 재귀적으로 정의된다. 튜플은 다른 수학 개념들(예를 들어 벡터)을 나타내는 데에 자주 사용된다. 튜플은 보통 원소들을 괄호 '( )'안에 쉼표 ','로 구분되게 나열하여 표시한다. 5-튜플의 예를 들면 (2, 7, 4, 1, 7)와 같다. 때로는 대괄호 '[ ]'나 화살괄호 '< >'와 같은 다른 부호를 사용하 기도 한다. 중괄호 '{ }'는 집합을 표시할 때 쓰이기 때문에 튜플 표시에는 사용하지 않는다. 컴퓨터 과학에서, 튜플은 어떤 요소의 집합, 혹은 테이블에서의 행을 가리킨다(레코드와 동일한 의미). 단, 일반적인 집합과는 달리 중복이 허용될 수 있다. 튜플의 개념은 언어학[1]과 철학[2]에서도 사용된다. 위키백과 - 튜플 중
  • 4. 튜플? Swift -Tuples 튜플은 여러 값들을 하나의 값으로 묶어준다. 튜플안의 여러 값들은 어느 타입도 가능하고, 각각 동일한 타입일 필 요도 없다.
  • 6. 튜플을 만들자 쉼표로 구분하고, 소괄호로 묶어준다. let account = (1, "이름", "남", phoneNumber) 요소를 열거한다는 점에서 배열과 비슷해 보인다.
  • 7. 튜플을 만들자 배열과 뭐가 다르죠? 1 튜플은 타입이 정해져 있지 않다. let array = [Int]() let tuple1 = (Int, Int) let tuple2 = (Int, Double, String) 2 튜플은 개수가 고정되어 있다. var array = [Int]() var tuple = (0, "text") array.append(0) tuple.append(0.1) // X
  • 8. 튜플을 만들자 배열과 뭐가 다르죠? 3 튜플은 요소를 소괄호로 묶는다. let array = [0, 1, 2, 3, 4] let tuple = (0, 1, 2, 3, 4) 4 튜플은 ‘.’으로 인덱스 접근한다. let first = array[0] let second = tuple.1
  • 9. 튜플을 만들자 선언과 초기화 1 값으로만 묶어서 생성 let gender = “남" let account = (1, "이름", gender, “01012345678") 2 타입 지정 후 대입 let account: (Int, String, Character, String) = (1, "이름", "남", "01012345678")
  • 10. 튜플을 만들자 선언과 초기화 1 값으로만 묶어서 생성 let gender = “남” let account = (number: 1, name: "이름", gender: gender, phoneNumber: “01012345678") 2 튜플 타입 지정 후 대입 let account: (number: Int, name: String, gender: Character, String) = (1, "이름", "남", phoneNumber: "01012345678")
  • 11. 튜플을 만들자 튜플 타입 정의 typealias Account = (Int, name: String, Character, String) let account: Account = (1, "이름", "남", "01012345678")
  • 13. 이렇게 사용합니다. 튜플 요소 접근 let account = (number: 1, "이름", gender: "남", “01012345678") 1 인덱스로 접근 let number = account.0 let gender = account.2 2 이름으로 접근 let number = account.number let gender = account.gender
  • 14. 이렇게 사용합니다. 튜플의 분해 let account = (1, "이름", "남", phoneNumber: “01012345678”) let (number, name, gender, phoneNumber) = account print(account.phoneNumber, gender) //01012345678 남 분해 요소 생략 let (number, _, gender, _) = account
  • 15. 이렇게 사용합니다. 임시 구조체 or 여러 값을 묶어 리턴 struct Vector3 { let x, y, z: Double static var zero: Vector3 { return .init(x: 0, y: 0, z: 0) } } func extractVector2(from vector3: Vector3) -> (x: Double, y: Double) { return (vector3.x, vector3.y) } let vector3 = Vector3.zero let vector2 = extractVector2(from: vector3) print(vector3, vector2) // Vector3(x: 0.0, y: 0.0, z: 0.0) (x: 0.0, y: 0.0)
  • 16. 이렇게 사용합니다. 조건문에서 Switch typealias Account = (Int, String, Character, String) let account: Account = (1, "이름", "남", "01012345678") switch account { //1 case (1, _, "남", _): //2 case (1, "이름", "남", "01012345678"): //3 case (let number, _, "남", let phoneNumber) where phoneNumber.count > 0: print(number) // 1 default: break }
  • 17. 이렇게 사용합니다. 조건문에서 If typealias Account = (Int, String, Character, String) let account: Account = (1, "이름", "남", "01012345678") //3 if case (let number, _, "남", let phoneNumber) = account, phoneNumber.count > 0 { print(number) // 1 }
  • 18. 이렇게 사용합니다. 반복문 For var accounts = [ (1, "한놈", "여", "01012345678"), (2, "두시기", "남", "01023456789"), (3, "석삼", "남", "010134567890"), (4, "너구리", "여", "01045678901") ] for (_, name, _, phoneNumber) in accounts { print(name, phoneNumber) } /* 한놈 01012345678 두시기 01023456789 석삼 010134567890 너구리 01045678901 */
  • 20. 이런 것도 돼요. 튜플 정렬 var accounts: [(number: Int, name: String, gender: Character, phoneNumber: String)] = [ (1, "한놈", "여", "01012345678"), (2, "너구리", "남", "01023456789"), (3, "석삼", "남", "010134567890"), (4, "너구리", "여", "01045678901"), (5, "너구리", "여", “01046789012”) ] let sortedAccounts = accounts.sorted{($0.name, $1.gender, $0.phoneNumber) < ($1.name, $0.gender, $1.phoneNumber)} print(sortedAccounts) /* [ (number: 4, name: "너구리", gender: "여", phoneNumber: "01045678901"), (number: 5, name: "너구리", gender: "여", phoneNumber: "01046789012"), (number: 2, name: "너구리", gender: "남", phoneNumber: "01023456789"), (number: 3, name: "석삼", gender: "남", phoneNumber: "010134567890"), (number: 1, name: "한놈", gender: "여", phoneNumber: "01012345678") ] */

Editor's Notes

  1. 안녕하세요 Swift 스터디 2회차 발표를 맡은 김주원입니다.
  2. 튜플은 무엇일까요? 튜플은 이런 것이다, 간단하게 말씀해 보실 분?
  3. 위키백과에서 튜플을 이렇게 정의하고 있습니다. ‘셀 수 있는 수량의 순서 있는 열거’ ‘어떤 요소의 집합’ 이라고요
  4. 스위프트의 튜플은 공식 문서에서 이렇게 설명하고 있습니다.
  5. 튜플의 정의를 알았으니, 튜플을 만들어봅시다.
  6. 튜플은 기본적으로 소괄호()로 묶어주고, 쉼표로 요소를 구분합니다. 명시적으로 정하든, 타입 추론으로 자동으로 정해지든, 한 번 정해진 튜플 타입과 요소의 개수는 바꿀 수 없습니다. 배열과는 많이 다르죠. 그렇다면, 배열과는 어떤 점이 다를까요?
  7. 1. 배열은 타입을 지정해야 하지만, 튜플은 타입이 정해져 있지 않습니다. 2. 배열은 개수를 줄이거나 늘릴 수 있지만 튜플은 개수가 정해져 있다.
  8. 3. 요소를 묶는 방식은 배열은 [], 튜플은 () 4. 접근 방식도 묶는 방식과 같이 다릅니다. 배열은 [0], 튜플은 .0
  9. 원래 주제로 돌아와서, 튜플을 만들어봅시다. 튜플은 두 가지 방법으로 생성할 수 있습니다. 값으로만 묶어서 대입 타입을 지정한 후 자료형에 맞추어 대입
  10. 두 방법에 이름을 부여할 수도 있습니다.
  11. 튜플의 유형을 반복적으로 사용해야 한다면 typealias로 타입을 정의한 후 사용할 수 있습니다.
  12. 튜플의 정의를 알았으니, 튜플을 만들어봅시다.
  13. 튜플의 요소에 접근하기 위한 방법은 2가지입니다. 인덱스로 접근 .0 이름으로 접근 인덱스로 접근하는 방법은 이름을 지정하든 안하든 상관 없이 사용할 수 있습니다.
  14. 튜플의 요소를 분해해서 접근하려면 튜플 형식으로 대입하면 됩니다. 이 때, 언더바_ 를 사용해서 사용하지 않음을 명시할 수 있습니다. 개수는 고정되어 있기 때문에 생략은 할 수 없습니다.
  15. 일반적으로 임시 구조체 용도로 사용하거나, 함수에서 값을 여러 요소로 묶어서 리턴할 때 사용합니다
  16. switch 문에서 여러 요소의 조건을 확인할 때 이렇게 사용합니다. 번호가 1이고 성별이 남성인 계정 모든 요소가 일치하는 계정 전화번호가 비어있지 않고 성별이 남성인 계정의 번호 출력
  17. if 문에서도 사용할 수 있어요 한 가지 조건에 대해서만 체크할 때는 If 문을 사용하는 것이 좋습니다. 여기에서도 튜플을 분해 해서 사용하고 있습니다.
  18. for문에서도 이렇게 분리해서 사용할 수 있습니다.
  19. 튜플 활용법 중 제가 생각하기에 가장 좋았던 활용법입니다.
  20. 튜플을 활용한 정렬입니다. 여러 속성을 도시에 비교하고 우선순위에 따라 정렬할 때 튜플을 사용할 수 있습니다. 튜플로 속성을 묶어서 비교하면 왼쪽에 있는 속성부터 비교하여 같다면 오른쪽으로 옮겨가면서 비교합니다. 1순위로 이름을 오름차순으로 비교하고, 2순위로 성별을 내림차순 비교하고, 3순위로 전화번호를 오름차순 비교합니다.