앞서 함수를 배웠으니 이쯤되면 등장해야하는 조건문에 대해서 알아보자

 

1. 조건문 (if, switch, guard)

- 주어진 조건에 따라 명령을 수행하는 문장, 즉 조건의 참과 거짓을 판별하여 참일 때 수행된다.

- Swift 에서의 조건문 : if, switch, guard

하나씩 사용법을 알아보도록 하자

 

(1) if

swift 의 if문은 다음과 같은 형식으로 써주면 된다.

 

예제 코드로는 홀수와 짝수 판별식을 만들어보자

 

if 문의 조건이 성립한다면 즉, 2로 나눈 나머지가 0 이라면 "짝수입니다." 를 출력할 것이고, 그렇지 않다면 (else) 다음 else 구문안의 문장을 출력할 것이다. 

따라서 num이 3일때: if 조건문 성립 X -> else 문으로 이동 후 실행

num이 6일때: if 조건문 성립 O, 실행

 

 

 

만약에 조건이 3개 이상이라면? else if 를 사용해주면 된다

myMark 

조건 1: 점수가 90 이상이면 A 

조건 2: 80-90 사이면 B

조건 3: 둘 다 아니면 C

 

위 같은 경우는 switch 문으로 하는 게 낫겠지만 좋은 예시가 생각나지 않으니 이걸로 해보자

 

if ~ else if ~ else

 

 

 

 

(2) switch

- switch 는 입력변수에 매칭되는 case 가 실행된다.

- 반복적으로 if, else - if 를 써야되는 상황이라면 switch 문으로 써주는게 가독성이 더 좋고 적합할 때가 있다. 

 

 

위에서 if 문에서 사용한 myMark를 좀 더 세부화시켜서 switch 구문으로 바꿔보자

 

myMark

조건 1: 점수가 90-100 사이면 A

조건 2: 80-90 사이면 B

조건 3: 70-80 사이면 C

조건 4: 60-70 사이면 D

조건 5: 60 미만이면 F

 

mark 가 입력변수이기 때문에 따로 조건에 맞는 case 구문을 실행한다. 사이에 있는 값은 ... 으로 표현한다

 

 

하지만 위의 if 조건절처럼 mark > 90 이런식으로 쓸 수 있을까?

바로 다음과 같은 에러가 발생한다. " Expression pattern of type 'Bool' cannot match values f type 'Int' "

위 switch 구문에서 입력변수의 데이터타입은 Int이다.

따라서 매칭되는 case 를 찾기 위해서는 case 조건부분이 같은 Int 이어야 한다는 것이다.

하지만 mark >= 90 이 부분은 참과 거짓으로 판단되는 Bool 타입이기에 다음과 같은 에러가 발생하는 것이다. 

그래서 굳이 비교등호가 필요하다면 다음과 같이 써주면되겠다.

 

 

오류 해결 - 1번 방법

 

1번 방법이다. boolean의 case 를 써야된다면, 입력 변수 값을 같은 boolean으로 변경해주면 된다.

switch를 실행시켜야 하기에 당연히 true 를 써주고, 아래 case 수식을 아까 쓰지 못한 등호를 사용하여 완성한다.

하지만 보기에도 좋은 코드는 아닌 듯하니 참고만 하자!

 

 

 

오류 해결 - 2번 방법

 

 

입력 변수 타입을 바꾸지 않겠다면 case _ where 을 추천한다.

혹시 sql 을 공부했었던 사람이면 눈치챘겠지만 where 은 뒤에 조건식을 데리고 다닌다. 그래서 데이터베이스에서 특정 데이터 값을 찾을 때 where FirstName = 'Ellie' 이런식으로 필터링해서 조건에 맞는 데이터 값을 찾는 것이다. 

이처럼 mark의 조건식(where)이 충족한다면 해당 case 는 실행될 것이다.

 

 

 

 

 

(3) guard

- guard 는 우리가 아는 뜻 그대로 무언가를 막는 것이다. 따라서

guard 문은 함수 내에서 입력값의 오류로 프로그램이 종료되는 것을 막기위해 사용해준다.

 

Q: 그렇다면 잘못된 값일 때의 처리를 어떻게 해줄까? 

A: else 구문과 함께 return , throw, break 등 으로 함수의 실행을 막거나 함수를 나가게 하면된다.

그래서 guard - else 는 항상 한 세트로 다니니 기억하도록 하자

 

guard 예시코드

input 앞에 guard 가 붙어있으므로 해당 함수는 input 이 1 일때만 실행된다.

결과에서 알 수 있듯이 1을 입력하면 함수가 실행이 됐지만, 2를 입력하니 return 되어 결과가 없는 것을 확인할 수 있다.

  

Q: 보면서 if 같다고 생각하는 사람이 많을 것이다. 둘의 차이는?

A: if와 다른점은 코드블럭의 수행을 막기위해 if는 부정의 조건식을 쓰지만, guard 는 수행에 필요한 조건을 그대로 나타내어 훨씬 가독성이 좋습니다

 

Q: 여러식의 조건문을 쓰고 싶을 때는?

A: Guard 문은 쉼표(,)로 구분하여 여러 조건을 쓸 수 있다.

 

여러식의 조건문을 쓴 간단한 예시 코드는 다음과 같다.

로그인을 하려면 아이디와 비밀번호 두 개의 필드가 입력되어야만 다음으로 진행이 가능하다.

필드값이 비어있지 않은 경우, 즉 != nil일 경우에 guard 문을 붙이고, 비어있을 경우 (else) 에는 return 을 메세지 출력과 함께 return 을 시켜주자. 

 

 guard로 사용자 아이디와 비밀번호 필드값 입력 확인하기

 

따라서 테스트한 부분을 보면 아이디와 비밀번호가 nil 일 때는 결과값으로 else 문의 코드블럭에 있던 "아이디와 비밀번호가 입력되지 않았습니다. " 가 출력이 되고,

아이디와 비밀번호에 문자열을 입력해준 후 실행하면 guard 문을 통과하여 성공적으로 "아이디와 비밀번호가 입력되었습니다. " 가 출력되는 것이다.

 

 

오늘의 조건문 끝! 사실 반복문까지 다루고 싶었지만 포스트가 너무 길어질까봐 다음장에서 하도록 하겠다!

 

 

+ Recent posts