티스토리 뷰
INDEX
1. 연산자(Operator)
2. if문
3. switch문
4. 마무리
1. 연산자(Operator)
- 대입 연산자(Assignment Operator) : 등호(=)
- 산술 연산자(Arthmetic Operators) : +(더하기), -(빼기), *(곱하기), /(나누기), %(모듈러, 정수끼리 연산에서 나머지를 구할때)
- 복합 할당 연산자(Compound Assignment Operators)( +=, -=, *=, /=, %=)
- 비교 연산자(Comparison Operators): ( ==, !=, >, <, >=, <=)
- 삼항 조건 연산자(Ternary Condition Operator): -> if문에서 설명
- 논리 연산자 (Logical Operators): ( &&(and), ||(or), !true( not true ==> false), !false(not false ==> true)
- ⭐️범위 연산자 (Range Operators): -> switch문에서 설명
- ⭐️패턴매칭 연산자(Pattern Matching): (~=) -> switch문에서 범위 연산자와 함께 설명
- 각 case에 들어갈 조건은 쉼표로 연결가능함.쉼표는 ||(or)로 기능
범위 연산자를 제외한 연산자들은 다른 언어와 동일해 쉽게 이해 되었기에 별도의 설명은 생략한다. 하지만 Swift는 C언어처럼 증감연산자(전위연산자, 후위연산자)는 지원하지 않는다. ++value을 하고싶다면 value += 1로 써야하고, value--을 하고싶다면 value -= 1로 써야한다. 처음 보았던건 범위연산자였다. 범위 연산자는 낯설게 느껴졌지만 중요한 개념이었기에 switch문에서 자세히 설명하고자하며 Swift에서는 자주 쓰이는 개념이기에 반드시 알아야 한다.
2. 조건문
1. if 문
기본 문법:
if 조건문 { code }
1. Swift의 if문은 조건작성시 따로 소괄호 표기를 해주지 않아도 된다.(물론 해도 상관없다).
2. 중괄호{ } 는 코드가 1줄처럼 짧더라도 반드시 표기하여 안의 내용을 감싸줘야 한다는게 특징이다.
var num = 5
if num <= 5 {
print("num은 5이하의 숫자")
}
num은 5이하의 숫자 //출력
3. else if, else문 역시 위와 동일하다.
var num = 15
if number <= 10 {
print("10보다 작거나 같다.")
} else if number >= 20 {
print("20보다 크거나 같다.")
} else {
print("10보다 크고 20보다 작거나 같다.")
}
10보다 크고 20보다 작거나 같다. //출력
4. 2개 이상의 조건을 작성할때 쉼표(,)로 연결해도되며 이는 &&(and)와 동일한 표현이다.(물론 || (or로도 표현이 가능하다)
var email = "a@gmail.com"
var password = "1234"
//1.쉼표로 연결
if email == "a@gmail.com" , password == "1234" {
print("메인페이지로 이동")
}
메인페이지로 이동 출력
//2.&&(and)로 연결
if email == "a@gmail.com" && password == "1234" {
print("메인페이지로 이동")
}
메인페이지로 이동 출력
email = "xxx@gmail.com" //email 변경
//3. ||(or)로 연결
if email != "a@gmail.com" || password != "1234" {
print("경고메세지 띄우기")
print("이메일주소 또는 패스워드가 올바르지 않습니다.")
}
경고메세지 띄우기 //출력
이메일주소 또는 패스워드가 올바르지 않습니다. //출력
5. 삼항 연산자
(조건문)? true일시 표현식 : false일시 표현식
let score: Int = 90
//if, else문
if score >= 70 { print("Pass") }
else { print("Fail") }
//위 if, else문을 삼항연산자로 표현시
(score > 70) ? print("PASS") : print("Fail")
3. Switch 문
기본문법:
switch 변수{
case 1: code
case 2: code
case 3: code
default: break}
Swift의 switch문은 다른 언어의 switch문보다 많은 기능 보유. swift는 if문보다 가독성이 좋고 실제 앱 분기처리 작업시 자주 사용
- Swift의 switch문은 exhaustive(철저함). 모든 케이스를 다뤄야하기 때문에 default문 입력이 필수적
- C언어와 달리 switch문에서는 케이스에 해당하는 코드를 비워둘 수 없다.
- 매칭값 고려없이 다음 case를 실행시키고 싶을때 fallthrough 라는 키워드를 사용
- ⭐️범위 연산자(1...10, 2...20)로 case 분류가능
- 패턴매칭 연산자(~=): 해당 값이 지정 범위(ex 10...100)에 포함되는가 판단
- swich문과 where절: swich문의 case에 조건을 넣고 싶을때 사용.
- where절로 조건확인과 값 바인딩도 하고 싶을때
- 각 case에 들어갈 조건은 쉼표로 2개이상 연결가능. 여기서의 쉼표는 ||(or)로 기능
1. Swift의 switch문은 exhaustive(철저함)
각 case에서 도출가능한 모든 조건을 다룰 수 없다면 default케이스반드시 입력해야한다.
(보통 switch문을 작성한다고 하면 default케이스의 입력은 필수적이다.) ex) default: break
그렇지 않으면 Switch must be exhaustive라는 컴파일 에러가 발생한다.
2. C언어에서는 케이스에 해당하는 코드를 비워두도록 작성가능하나, Swift에서는 컴파일 에러가 발생한다.
( 각 case에 break문이 자동으로 걸려있다)
//Swift 공식문서 예제
let anotherCharacter: Character = "a"
switch anotherCharacter {
//case "a": // Invalid, the case has an empty body 에러 발생
//case "A":
// print("The letter A")
case "a", "A":
print("The letter A")
default:
print("Not the letter A")
}
The letter A 출력
3. 각 case에 break문이 자동으로 걸려있기에 case에 해당시 switch문은 종료된다.
하지만 이러한 매칭값 고려없이 다음 case까지 실행시키고 싶을때 fallthrough 라는 키워드를 사용하면 된다.
var num1 = 10
switch num1 {
case ..<10:
print("1") // 매칭 값에 무시하고 무조건 다음블럭을 실행
fallthrough
case 10:
print("2")
fallthrough
default:
print("3")
}
결과적으로 2와 3을 출력
4.⭐️범위 연산자로 case 분류가능 => Swift의 장점
범위연산자란 1~10, 2~20과 같이 제한된 숫자 범위 표기를 위해 사용한다.
이는 swich문 뿐만 아니라, for문(Int범위)과 배열의 서브스크립트 문법에서도 쓰인다.
범위연산자는 크게 닫힌 범위연산자(Closed Range Operator)와
반 개방 범위 연산자(Half-Open Range Operator)로 나뉘는데,
switch문에서의 case를 예시로 들면 각각 아래처럼 쓰인다.
참고로 초과기능은 존재하지 않는다. (존재했다면 case >..). 아래 연산자로도 충분히 표현이 가능하다.
Closed Range Operator(닫힌 범위연산자)
0이하를 표현: case ...0 // case <= 0은 틀린표현이다
0이상 10이하: case 0...10
10이상: case 10...
Half-Open Range Operator(반 개방 범위연산자)
0이상 10미만: case 0..<10
0미만을 표현: case ..<0
//Swift 공식문서 예제
let approximateCount = 62
let countedThings = "moons orbiting Saturn"
let naturalCount: String
switch approximateCount {
case 0:
naturalCount = "no" //
case 1..<5:
naturalCount = "a few"
case 5..<12:
naturalCount = "several"
case 12..<100:
naturalCount = "dozens of" // ⭐️각 case에 맞다면, 값의 바인딩도 가능함
case 100..<1000:
naturalCount = "hundreds of"
default:
naturalCount = "many"
}
print("There are \(naturalCount) \(countedThings).")
"There are dozens of moons orbiting Saturn." 출력
5. 패턴매칭 연산자(~=)
해당 값이 지정 범위(ex 10...100)에 포함되는지 Bool(true, false) 타입으로 알려줌. 이는 if문과 switch문 둘다 사용할 수 있다.
var a = 30
0...50 ~= a //true
51...100 ~= a //false
var n = 20
if 10...100 ~= n{ //조건 만족(true)
print("10이상, 100이하입니다!")
}
10이상, 100이하입니다! //출력
6. swich문과 where절: swich문의 case에 조건을 넣고 싶을때 사용한다.
기본문법: case let 임의의 값 where 조건문:
예시 코드에서 임의의 값을 x로 하면,
var num = 7
switch num {
case let x where x % 2 == 0: // let x = num
print("짝수 숫자: \(x)")
case let x where x % 2 != 0:
print("홀수 숫자: \(x)")
default:
break
홀수 숫자: 7 //출력
7. where절로 조건확인을 통해 값 바인딩도 하고 싶을때
var num = 10
switch num {
case var x where x > 5: // 조건충족시,
x = 7 // 바인딩도 가능 var x = num
print("10에서 바뀐값: \(x)")
default:
print(num)
}
바뀐값: 7 //출력
8. 각 case에 들어갈 조건은 쉼표로 연결가능함. 여기서의 쉼표는 if문과 달리 ||(or)로 역할한다. 아래 코드 참조
var ch: Character = "s"
switch ch {
case "A","E", "I", "O","U", "a","e", "i", "o","u":
print("\(ch)는 모음")
case "a"..."z", "A"..."Z":
print("\(ch)는 자음")
default:
print("\(ch)는 알파벳이 아니다.")
}
4. 마무리
연산자에서는 범위연산자와 패턴 매칭 연산자를 짚고 넘어가야 했으며,
if문에서 쉼표로 조건을 AND로 연결(switch문에서는 OR로 연결)하고 코드가 1줄이라도 중괄호를 반드시 표기해줘야 했다. 가장 상세히 길게 다룬 ⭐️Switch문⭐️은
- Swift의 switch문은 exhaustive(철저함). 모든 케이스를 다뤄야하기 때문에 default문 입력이 필수적
- C언어와 달리 switch문에서는 케이스에 해당하는 코드를 비워둘 수 없다.
- 매칭값 고려없이 다음 case를 실행시키고 싶을때 fallthrough 라는 키워드를 사용
- ⭐️범위 연산자(1...10, 2...20)로 case 분류가능
- 패턴매칭 연산자(~=): 해당 값이 지정 범위(ex 10...100)에 포함되는가 판단
- swich문과 where절: swich문의 case에 조건을 넣고 싶을때 사용.
- where절로 조건확인과 값 바인딩도 하고 싶을때
- 각 case에 들어갈 조건은 쉼표로 2개이상 연결가능. 여기서의 쉼표는 ||(or)로 기능
위 8개로 요약할 수 있다. 이 문장들이 당연하게 읽히고 머리속으로도 쉽게 구현된다면 PASS. switch문에는 범위연산자, where절을 통한 바인딩 등 앞으로도 계속 등장할 개념들이 main을 이뤘기에 중요하다고 볼 수 있다. Allen의 Swift강의를 처음부터 끝까지 한번 쭉 듣고 제대로 다진다는 생각으로 초반부 개념부터 다시 보니, Switch문에서 다루는 개념들은 꼼꼼하게 알 필요가 있다고 생각해 길게 다루었다.
연습 예제로 가위바위보 게임을 만들거나, 빙고게임을 만들어 보자.
출처
Inflearn Allen님의 강의 노트
Swift 공식문서
'Swift' 카테고리의 다른 글
Swift [Collection Types] (0) | 2023.02.10 |
---|---|
Swift [옵셔널(Optionals) 총정리] (0) | 2023.02.09 |
Swift [Functions] (0) | 2023.02.08 |
Swift [Tuples/Loops] (0) | 2023.02.07 |
Swift [Variables/Constants/Types] (0) | 2023.02.04 |