프로그래밍의 기본원리와 조건문

쏘스야·2023년 3월 31일
0

if문에서 논리적인 구조 및 조건의 순서가 중요하다.


// 논리적인 오류 없도록 구성해야함 ==========

var num = 8


if num >= 0 {
    print("0 또는 양수입니다.")
} else if num % 2 == 0 {
    print("양의 짝수입니다.")
} else if num % 2 == 1 {
    print("양의 홀수입니다.")
} else {
    print("음수입니다.")
}



// 올바르게 수정해 본다면? ================

if num >= 0 {
    print("0 또는 양수입니다.")
    
    if num % 2 == 0 {
        print("짝수입니다.")
    } else if num % 2 == 1 {
        print("홀수입니다.")
    }
    
} else {
    print("음수입니다.")
}




// 조건의 확인 순서를 잘 고려해야함 ==========


var score = 100


if score >= 70 {
    print("70점이상입니다.")
} else if score >= 80 {
    print("80점이상입니다.")
} else if score >= 90 {
    print("90점이상입니다.")
} else {
    print("70점미만입니다.")
}



// 올바르게 수정해 본다면 ================


if score >= 90 {                // 범위가 작은 조건이 먼저 와야함
    print("90점이상입니다.")
} else if score >= 80 {
    print("80점이상입니다.")
} else if score >= 70 {
    print("70점이상입니다.")
} else {
    print("70점미만입니다.")
}

분기처리를 해야한다.
분기 : 어떤 조건을 선택적으로 코드를 실행시키는 것

switch 문

[스위치문의 특징]

  • 1) 스위치문에서 케이스의 ,(콤마)는 또는의 의미로 하나의 케이스에
    여러 매칭값을 넣을 수 있음
  • 2) switch 문은 (비교하고 있는)값의 가능한 모든 경우의 수를 반드시
    다루어야 함 (exhaustive: 하나도 빠뜨리는 것 없이 철저한)
    모든 사례를 다루지 않았을 때에는 디폴트 케이스가 반드시 있어야 한다.
  • 3) 각 케이스에는 문장이 최소 하나 이상 있어야 하며 만약 없다면 컴파일
    에러 발생(의도하지 않은 실수를 방지 목적)
    실행하지 않으려면, break를 반드시 입력해야함 (if문에서는 실행문을
    입력안해도 괜찮지만, 스위치문에서는 필요함)
  • 기본
let test1: String = "b"

switch test1{
case "a" :
    print("a 입니다.")
case "b" :
    print("b 입니다.")
case "c" :
    print("c 입니다.")
default:
    break
}
  • ,(콤마) 사용
var test2:Int = 2
switch test2{
case 1:
    print("1")
case 2,3 :
    print("2,3")
case 4 :
    print("4")
default:
    print("끝")
    break
}
  • switch 문은 (비교하고 있는)값의 가능한 모든 경우의 수를 반드시
    다루어야 함 (exhaustive: 하나도 빠뜨리는 것 없이 철저한)
    모든 사례를 다루지 않았을 때에는 디폴트 케이스가 반드시 있어야 한다.
var isTrue = true


switch isTrue {
case true:
    print("true")
case false:
    print("false")
}
  • fallthrough - 뚤고 지나가다. (case 문에 fallthrough 가 있으면 실행 후 밑으로 진행한다.
var num1 = 10

switch num1 {
case ..<10:
    print("1")        // 매칭된 값에 대한 고려없이 무조건 다음블럭을 실행함
    fallthrough
case 10:
    print("2")
    fallthrough
default:
    print("3")
}
  • 범위 연산자🤙🏻 , 패턴매칭연산자 (참과 거짓의 결과가 나옴)
var num = 30

// ⭐️ 범위연산자, 패턴매칭 연산자 (참과 거짓의 결과가 나옴)
// 0...50 범위연산자
// ~= num 패턴매칭 연산자

0...50 ~= num // 0~50 까지의 범위를 나타냄
51...100 ~= num
  • 범위 연산자, 패턴매칭연산자 사용법

// 잘못된 예시
// 비교연산자와 값을 넣으면 안되고, 비교하려는 값이 와야함

switch temperature {
case  < 0 :    //이런식으로 작성하면 안된다. ==>   ..<0
    print("영하 - 0미만")
case >= 0 && <= 18 :     //이런식으로 작성하면 안된다. ==>   0...
    print("0이상 무덥지 않은 날씨")
default :
    break
}


// 올바른 예시

switch num {
case 0...50:      // 0...50 ~= 30 내부적으로 패턴매칭으로 확인
    print("숫자의 범위: 0 ~ 50")
case 51...100:
    print("숫자의 범위: 51 ~ 100")
default:
    print("그 외의 범위")
}

// 올바른 예시 2 - ..< 사용

let test1 = 30

switch test1{
case ..<10 :
    print("1")
case 11...20 :
    print("2")
case 21... :
    print("3")
default:
    print("끝")
    break
}

스위치문의 활용

  • 바인딩
// 바인딩의 일반적인 의미

var a = 7

let b = a     // 바인딩을 한다. (다른 변수/상수의 새로운 식별자로 할당한다.)
  • 스위치문에 바인딩 사용법
var num1 = 4

switch num1{
case let a :  // let a = num1
    print("바인딩 한 값 : \(a)")
default:
    break;
}
  • 스위치문에 where(조건절) 사용
// 일단 다른 상수 값에 바인딩한(넣은) 후, 조건절(참/거짓 문장)을 통해 다시 한번 더 조건 확인
// (바인딩 된 상수는 케이스블럭 내부에서만 사용가능하고, 상수 바인딩은 주로 where절하고 같이 사용됨)

num = 7

switch num {
case let n where n % 2==0 :
    print("짝수 : \(n)")
case let n where n % 2 != 0 :
    print("홀수 : \(n)")
default:
    break
}

switch num {
case var n1 where n1 > 10:  // 변수로 바인딩도 가능 var n1 = num
    n1 = 10
    print(n1)
default:
    print(num)
}

// where절은 대부분 밸류바인딩 패턴과 함께 사용 (여러 강의에서 또 다룰 예정)
profile
개발자

0개의 댓글