일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- reactnative강의
- 패캠챌린지
- 직장인자기계발
- PM강의
- 내일배움카드
- 자바
- 패캠reactnative
- fastcampus
- 30개프로젝트로배우는iOS앱개발withSwift초격차패키지Online.
- 직정인자기계발
- 직장인공부
- 수강료0원챌린지
- 코딩자격증
- 패캠강의후기
- 패스트캠퍼스
- 오공완
- 패캠인강후기
- 패스트캠퍼스후기
- K디지털기초역량훈련
- 환급챌린지
- 국비지원교육
- 패캠
- 자바스크립트
- 파이썬
- 코딩교육
- 직장인인강
- 코딩테스트
- Today
- Total
라티의 작은 일기장
[7일차] assert와 guard 본문
오늘은 assert 함수와 guard 문법에 대해서 공부해보려한다.
assert는 Java에서 JUnit을 통해 테스트 코드를 작성할 때, assertFalse와 assertTrue 메소드 사용 경험이 있어서 대충 어떤 기능을 수행하는 함수인지 예상은 했지만 guard 문법은 듣자마자 생소했다. 하지만 이제부터 알아볼테니 괜찮다.
assert?
assert 함수는 특정 조건을 체크하고, 조건이 성립되지 않으면 메세지를 출력하게 하는 함수이다. 또한 디버깅 모드에서만 동작하고, 주로 코드 실행의 조건을 검증할 때 사용한다. 즉 Swift에서는 Java와 다르게 기본 언어 자체에 테스트를 위한 함수를 구현해 둔 것이다.
다음으로 guard문의 의미에 대해 알아보자.
guard?
guard문의 기능은 어떤 코드를 실행한 그 결과를 검사하여, 그 다음에 오는 코드를 실행하거나, 실행하지 않는 것이다.
guard문에 주어진 조건이 거짓일 때, 그 코드가 실행된다.
오? 타 언어를 공부해본 사람 입장에서 이 설명을 듣자마자 바로 떠오른 것이 있다. 바로 삼항 연산자.
조건 ? (조건이 참일 때 실행되는 코드 또는 값) : (조건이 거짓일 때 실행되는 코드 또는 값)
타 언어에서 연산자로 구현되어있는 기능이 Swift에서는 문법으로서 구현되어있었다.
자, 그럼 이제 Playground를 통해 assert 함수와 guard 문의 기본 사용법을 알아보자.
var value = 0
assert(value == 0, "값이 0이 아닙니다.")
value = 2
assert(value == 0, "값이 0이 아닙니다.")
assert 함수의 기본적인 기능은 조건이 참인지를 검사하는 것이다. 만약 거짓이라면 조건 뒤에 오는 문자열을 출력해줌으로써 프로그래머의 의도와 반하는 코드를 알려줄 수 있는 것이다. 그래서 모듈 단위, 프로그램 단위 검증에 사용된다고 한다.
위 코드는 변수 value의 초기값이 0일 때는 작성한 조건대로 value의 값이 0이기 때문에 문자열을 출력하지 않다가, value의 값이 2로 변경되고 다시 한 번 검사했을 때 조건을 만족하지 않아 프로그램 실행을 중단하고 작성한 오류 메시지를 출력하는 결과를 보여준다.
guard문의 사용 방법도 알아보자.
guard문의 기본 형태는 다음과 같다.
guard 조건 else {
조건이 false이면 else 구문이 실행되고
return or throw or break 키워드를 통해 이후의 코드를 실행하지 않도록 한다.
}
앞서 선언했던 value의 값이 0이라는 조건을 활용해서 guard문을 활용한 함수를 작성해보자.
func guardTest(value: Int) {
guard value == 0 else { return }
print("value 값은 0입니다.")
}
guardTest(value: 0)
작성한 함수의 코드에 따르면 guard문에 주어진 조건에 따라 함수에 전달된 value의 값이 0이면 문자열이 출력될 것이고, 그게 아니면 else문에 따라 함수 실행이 중단될 것이다.
실행 결과를 확인해보자.
예상대로 문자열이 잘 출력되는 것을 확인할 수 있다.
value의 값을 2로 바꾼 결과도 확인해보자.
else 문에 있는 return에 따라 함수가 반환되어 아무것도 출력되지 않았음을 확인할 수 있다.
이렇게 guard문은 특정 코드 실행의 예외 상황을 방어하는 역할을 한다.
특정 코드가 한 모듈에서 중요한 기능을 수행하는데, 이 코드에서 예외로 인해 타 모듈에 큰 영향을 미칠 수 있다면, 이렇게 guard문 안에 넣어서 예외 상황에 대한 프로그램 차원에서의 리스크를 관리할 수 있는 것이다. Swift가 강조하는 Safe 속성에 딱 걸맞는 문법이다.
추가로, guard문을 활용하면 일전에 공부했던 옵셔널 바인딩도 가능하다.
옵셔널 바인딩은 옵셔널로 선언된 변수의 값을 활용하기위해 옵셔널 상태를 해제하는 것이었다.
옵셔널 바인딩을 위해서는 컴파일러 입장에서 옵셔널 변수가 갖는 불확실성을 해소해주어야만 하는데, 일전에서는 if-else 구문을 활용했다면, 이번에는 새롭게 알게된 guard문을 활용해보겠다.
func guardTest(value: Int?) {
guard let value = value else { return }
print(value)
}
guardTest(value: 2)
기존 코드를 약간만 변형하였다.
Int 옵셔널 값이 존재한다면 그 값을 원래 변수에 할당하여 출력하고, 존재하지 않다면 else 문을 통해 함수를 반환하도록 했다.
실행 결과는 다음과 같다.
예상대로 2가 잘 출력되었고, 컴파일러 입장에서도 옵셔널 변수의 불확실성이 해소되어 옵셔널 바인딩이 잘 수행된 것으로 보인다.
패스트캠퍼스 바로가기 : http://bit.ly/3Y34pE0
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
> 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Swift' 카테고리의 다른 글
[9일차] 익스텐션, 열거형, 옵셔널 체이닝 (1) | 2023.02.28 |
---|---|
[8일차] 프로토콜 (1) | 2023.02.27 |
[6일차] 상속 (0) | 2023.02.25 |
[5일차] 프로퍼티 (2) | 2023.02.24 |
[4일차] 초기화 구문 init() (0) | 2023.02.23 |