티스토리 뷰
INDEX
1. 튜플(Tuples)
2. 반복문 - for문, while문, repeat-while문
3. continue와 break
4. 마무리
1. 튜플(Tuples)
1. 튜플이란
2. 데이터 값 접근(점을 통한 접근, Named Tuple)
3. switch문에서의 활용(바인딩, where절 활용, 범위연산자)
1. 튜플은 여러개의 연관된 데이터를 하나로 묶어서 간단하게 사용하는 타입이다. Int, Double., String등 여러 타입이 함께 들어가 있어도 되지만 주의할 점은 튜플을 최초로 만든 이후에는 데이터 값의 추가와 삭제가 불가능하다.
let threeNumbers = (1, 2, 5)
print(threeNumbers)) // 1,2,5 출력
type(of: threeNumbers) // (Int, Int, Int)
2. 튜플 데이터 값에 접근가능한 방법은 2가지로 .을 통한 숫자 index로 접근가능하고 Named Tuple방식으로도 접근가능하다. Named Tuple은 각 튜플의 데이터값에 이름을 붙이는 것으로 swich의 case문을 작성하는 것 같았다. 코드를 보면 쉽게 이해할 수 있다.
var threeValues = ("이도형", 20, "Seoul")
threeValues.0 //이도형
let iOS = (language: "Swift", version: "5")
iOS.0 //Swift
iOS.language //Swift
iOS.version // 5
3. 튜플은 앞서 정리해둔 switch문과도 자주 사용되며, 튜플역시 범위 연산자의 적용을 받고, 바인딩을 통한 where절로도 활용이 된다. 기존의 switch문의 특성을 잘 알고있다면 쉽게 가능하다.
//1. 바인딩 예제
var coordinate = (0, 5) // 좌표계
switch coordinate {
case (let distance, 0), (0, let distance): // x축 또는 y축(또는 둘다)에 있으면 출력하라는 코드
print("X 또는 Y축 위에 위치하며, \(distance)만큼의 거리가 떨어져 있음")
default:
print("축 위에 있지 않음")
}
//2. where절로 활용
var coordinate2: (Int, Int) = (5,-5)
switch coordinate2 {
case (let x, let y) where x == y: //임의의 상수값 x,y로 조건 비교
print("y = x 그래프 위")
case (let x, y) where x == -y: // (let x, let y)와 let(x,y)는 동일표현
print("y = -x 그래프 위")
default:
print("위 두 그래프에 해당 X")
}
y = -x 그래프 위 //출력
//3. 범위연산자로도 데이터값 비교 가능
let point = (1, 2)
switch point {
case (0, 0):
print("(0, 0)은 원점 위에 있다.")
case (-2...2, -2...2):
print("(\(point.0), \(point.1))은 원점의 주위에 있다.")
default:
print("점은 (\(point.0), \(point.1))에 위치한다.")
}
(1, 2)은 원점의 주위에 있다. //출력
//4. 두 수를 정의하고 switch문의 where절을 활용해 크기 비교해보기
let biggerNum = (num1: 50, num2: 50)
switch biggerNum{
case let(x, y) where (x > y):
print("x가 더 큰 수 ")
case (let x, let y) where x < y:
print("x가 더 작은 수 ")
default:
print("Same")
}
Same //출력
Wonders
1. 튜플과 배열의 차이점은 무엇일까? (튜플의 장점으로 이어진다)
- 튜플은 여러타입의 데이터를 저장할 수 있지만 배열은 단일타입만 저장가능하다.
- 튜플은 처음 선언한 이후에 데이터 타입의 변경이 불가한 반면, 배열은 값의 추가, 삭제가 자유롭다.
- 튜플은 Named Tuple방식을 통해 데이터에 접근 가능한 폭이 넓지만, 배열은 [0] [1]과 같은 방식으로 대괄호안의 정수로만 접근가능하다.
2. 튜플의 Named Tuple이 가지는 장점은?
튜플은 점을 통한 숫자 인덱스로 데이터에 접근할 수는 있지만 데이터 수가 많고,
코드가 길어진다면 인덱스만으로 데이터에 접근이 어렵고, 가독성이 떨어진다는 단점(저장한 데이터값의 순서 암기).
하지만 Named Tuple은 각 요소의 데이터가 무엇과 연관되어 있는지 알 수 있기에,
저장된 데이터를 이해하기 쉬운 구조로 만들어주어 코드의 가독성도 높인다.
2. 반복문(Loops) - for문, while문, repeat-while문
1. for 문
swift의 for문은 활용 범위가 높기에 자세히 설명하고자 한다. 지정해놓은 범위, 컬렉션, 문자열 등의 타입에서도 구현이 가능하다. 주의점이 있다면 for문의 중괄호내에서만 선언하는 상수에 대해 헷갈리지 않는 것이다. 단순히 반복 횟수를 카운팅하는 용도이므로 이에 대해 값을 대입하거나 연산을 하는 실수를 저질러서는 안된다.
기본 문법:
for (중괄호 내에서 반복할) 임의의 상수 in 범위 or 컬렉션 { code }
//기본 예제
for x in 1...5 { //let x = 1, let x = 2, let x = 3, let x = 4, let x = 5
print("For문 출력해보기: \(x)")
}
//아래는 출력문
For문 출력해보기: 1
For문 출력해보기: 2
For문 출력해보기: 3
For문 출력해보기: 4
For문 출력해보기: 5
for index in 1...4 {
print("\(index)에 5를 곱하면 \(index * 5)")
}
//아래는 출력문
1에 5를 곱하면 5
2에 5를 곱하면 10
3에 5를 곱하면 15
4에 5를 곱하면 20
2. 범위 연산자로 범위 표현도 가능하다.
이와 함께 자주 쓰이는 새로운 패턴이 등장한다.
-> ⭐️와일드카드 패턴: _(언더바)⭐️
스위프트에서는 생략의 의미를 뜻한다. 아래의 코드를 보자
//범위 연산자 사용
var number = 10
for i in 1...number {
print(i)
}
1~10까지 출력
//와일드 카드 패던을 상수로 두고, 범위연산자 사용
for _ in 0...4 {
print("hello")
}
hello가 5번 출력
3. 다음은 문자열에서 사용한 for문이다.
swift의 print()함수에 대해 공부해보자.
아래 코드를 통해 print()함수가 내부적으로 어떻게 만들어져 있는지 알 수 있다.
// 문자열에서 각 문자를 차례 차례 한개씩 뽑아서 중괄호 안에서 사용
for chr in "Hello" {
print(chr)
}
//아래는 출력문
H
e
l
l
o //하지만 우리는 이보단 Hello로 출력되길 바랄 것이다. 그럴려면 print함수에 대해 먼저 이해해야한다.
print()함수의 원형은 아래와 같다.
func print(
_ items: Any...,
separator: String = " ",
terminator: String = "\n"
)
//즉 함수의 parameter가 3개인 셈이다.
//1번째 타입은 우리가 작성하는 출력하고자 하는것으로 아무(Any)타입이 가능하다
//2번째 parameter인 separator은 1칸 띄우는 역할을 하고,
//3번째 parameter는 자동 줄바꿈 기능을 지닌다.
//따라서 Hello로 붙여 쓰고 싶다면, separator와 terminator의 값 변경이 필요하다.
for chr in "Hello" {
print(chr,separator: "", terminator: "") //다음줄로 넘어가지 말고, 한칸을 띄워라
}
Hello //출력
4. 이 밖에 반복문에 접근하는데 있어서 .reversed()를 통해 역순으로 바꿀 수도 있고 stride문을 통해서 특정 값을 건너서 접근이 가능하다. 이는 코드로 쉽게 이해가능하다.
// .reversed()
let range = stride(from: 1, to: 15, by: 2) // StrideTo<Int>
print(range)
// 1, 3, 5, 7, 9, 11, 13
for i in range {
print(i)
}
//stride(from: ,through: , by: )
let range1 = stride(from: 1, through: 15, by: 2) // StrideThrough<Int>
print(range1)
Swift.StrideThrough<Swift.Int> //출력
for i in range1 {
print(i)
}
1, 3, 5, 7, 9, 11, 13, 15 //출력
2. while문, repeat-while문
while문은 다른언어에서 쓰이는 방식과 동일하기에 자세히 설명하지 않는다. if문처럼 조건에 소괄호를 표기해주지 않아된다. 기본문법은
while 조건문 { code }
repeat-while문은 c언어의 do while문을 떠올리면 이해하기쉽다. while문처럼 반복을하지만, 차이점이 있다면 repeat-while문은 조건이 충족하지 않더라도 반드시 1번은 실행을 한다는점이다.
var number = 5
var sumOfNum = 0
//while문
while number < 5 {
sumOfNum += number
number += 1
}
number // 5
sumOfNum // 0
//아래는 repeat-while문
number = 5
sumOfNum = 0
repeat {
sumOfNum += number // 어쨋든 1번은 실행을한다.
number += 1 // 어쨋든 1번은 실행을한다.
} while number < 5
number // 6
sumOfNum // 5
3. continue와 break
continue와 break역시 다른언어와 사용법과 기능이 완전히 동일하기에 간단히 설명하고, 예시코드도 생략한다.
continue: continue를 만나면 continue아래의 문장들은 무시하고 다음 인덱스로 넘어간다.
break: 그 반복문을 중지시킨다.
4. 마무리
튜플과 for문을 상대적으로 많이 다루고 자세히 설명하였다. 튜플만이 가진 장점을 이해하고, Named Tuple로 간단히 선언하고 ,switch문에서의 활용(where절을 통한 바인딩)을 구현하는데 문제가 없다면 PASS.
for문에서는 기본문법과, 와일드 카드 패턴(_)과 범위연산자를 통한 for문구현, 또 추가적으로 배운 print() 함수에 대해 잘 떠오른다면 PASS. 물론 이밖의 것들도 알아야되는건 맞지만 가장 낯설게 느껴졋던걸 남기는게 다음에 봐도 좋을 것 같다고 생각했다. 다음 복습 단원은 함수다.
출처
Inflearn Allen님의 강의 노트
Swift 공식문서
'Swift' 카테고리의 다른 글
Swift [Collection Types] (0) | 2023.02.10 |
---|---|
Swift [옵셔널(Optionals) 총정리] (0) | 2023.02.09 |
Swift [Functions] (0) | 2023.02.08 |
Swift [연산자(Operators)와 조건문(if문/switch문)] (0) | 2023.02.05 |
Swift [Variables/Constants/Types] (0) | 2023.02.04 |