Swift - optional binding ( iOS )

김제형·2024년 10월 15일

이 글은 주인장의 이해를 돕고 가르치는 사람이 되어봤을 때 어떻게 설명해야할 지 생각하며 쓴 글이다.

피드백은 언제나 환영이야 ! ( 대충 트레이서 )

guard

guard는 조건이 거짓일 때 guard 블록내 코드가 실행되고 함수가 종료되고,
조건이 참일 경우 아래의 코드 블럭이 실행된다.

조건이 거짓일 때 아래 블럭으로 이동하여 다음블럭을 실행하고 참일때 그 함수를 실행하고 탈출하는 if 와 반대의 "성향"을 갖는 코드인 것이다.

하지만 반대의 성향이라고 표현한 것과 같이 완벽하게 반대는 아니니 글을 끝까지 읽는 것을 추천한다.

기본적인 guard 문의 코드 형식

guard 조건 else {
	//코드가 거짓일 때 실행 되는 코드
}
//코드가 참일 때 실행 되는 코드

guard 문은 코드의 흐름을 제어하는 역할을 한다.

guard let

옵셔널 변수에서 안전하게 값을 추출할 때 사용한다.

guard let nonOptionalValue = optionalValue else {
    // optionalValue가 nil일 때 실행
    return
}
// nonOptionalValue를 안전하게 사용

옵셔널이 nil이 아닐 때만 언래핑된 값을 안전하게 사용하고,
옵셔널이 nil이면 함수나 흐름을 종료하는 것이 guard let의 핵심이다.

func multiplyByTen(value: Int?) {
	guard let number = value else {
		print("nil")
		return
	}
	print(number*10)
}
multiplyByTen(value: 3) //30
multiplyByTen(value: nil)
multiplyByTen(value: 10)

이런 경우 nil값이 들어가게 된 경우 다음 코드 블럭을 실행하고 number에 숫자를 넣게 되면 return 과 같은 제어문 반환 명령어 뒤에 코드를 실행하게 된다.

guard let 옵셔널 바인딩을 사용하게 되면 코드가 간결해지며 가독성을 높일 수 있다.
그리고 옵셔널 값을 안전하게 사용할 수 있다.

if

if는 값이 참일 때 그 코드 블럭을 실행하고 거짓일때 아래 코드 블럭으로 내려가 else문 혹은 elseif를 실행하게 된다.

else문은 if문에 있는 모든 코드 블럭 마지막에만 사용할 수 있고
사이사이에 있는 코드 블럭에만 else if 를 사용할 수 있다.
else를 코그블럭 마지막이 아닌 else if 위에 사용하게 되면 에러 코드를 출력하게 된다.

let number = 10

if number > 5 {
    print("5보다 큰 수")
} else {
    print("5보다 작은 수")
}
// 출력결과 : 5보다 큰 수

if let

if let은 옵셔널 바인딩을 할 때 사용한다, nil값이 아닐때 값을 안정적으로 추출할 때 사용한다.

let optionalName: String? = "Jea"

if let name = optionalName {
    print("이름이 \(name) 입니다.")
} else {
    print("값이 없습니다.")
}
  • 가장 안전하고 많이 쓰이는 옵셔널 언래핑 방법이다.
    1. 옵셔널 상수에 Jea 라는 값을 넣어줬다 이 옵셔널 변수는 nil 값과 jea라는 값이 동시 존재할 수 있다는 것이다.
    2. if let으로 언래핑 한 후 name과 optionalName을 비교하여 값이 있으면 if 문을 출력하고 값이 없을 경우 else문을 출력하게된다.
    3. 마지막으로 optionalName 에는 jea라는 값이 들어가 있기 때문에 안정적으로 언래핑 된 후 if문이 실행되게 된다.

guard let VS if let

  • guard let
  1. 함수 전체에서 optional로 추출된 상수나 함수를 사용할 수 있다.
  2. 제어문 반환 명령어 ( return, ciontinue, throw, break ... )을 사용해야 한다.
  3. else 문 생략 불가
  • if let
  1. 참, 거짓과 같이 2가지로 나누어 원하는 작업을 할 수 있다.
  2. 지역 변수로만 사용 가능
  3. else 문을 생략 가능
profile
개발자 지망생

0개의 댓글