티스토리 뷰

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함