[Swift] guard를 통한 type narrowing

작성일: 2026. 2. 9.

태그:

타입을 안정적으로 꺼내기

guard는 guard를 통과한 이후의 context에서 확정적으로 해당 함수가 안전한 타입임을 보장합니다.

guard는 런타임 + 컴파일 타임 모두 안전함을 보장합니다.

func getName(name: String?) {
  guard let name = name else { return } // nil이면 이곳에서 guard에게 막힘
  print(name); // 여기서부턴 name: String이 확정적
}

if let과의 차이

if let과 guard의 차이는 if let이 펼친 closure 내부에서만 타입 안정성이 보장된다는 점입니다.

func getName2(name: String?) {
  if let name = name {
    name // name: String
  }
  name // name: String?
}