guard let과 if let의 차이점

Lena·2020년 3월 9일
8
post-thumbnail

📢기억하려고 기록해놓는 글

비교 코드

//if let
func printName(){
  var value:String?
  value = "Lena"
  print(value) // Optional("Lena")
  if let name = value {
    print(name) // "Lena"
  } 
  //if문 안에서만 name 변수를 사용 가능.
}

//guard let
func printName(){
  var value:String?
  value = "Lena"
  print(value) // Optional("Lena")
  guard let name = value else { return }
  print(name) // "Lena"
  //name변수는 메소드 내에서 지역상수처럼 사용 가능.
}

guard let

guard 뒤에 따라붙는 코드의 실행 결과가 true일 때 코드가 계속 실행됩니다.
if 구문과는 다르게 guard 구문은 항상 else 구문이 뒤에 따라와야 합니다.
만약 guard 뒤 따라오는 Bool 값이 false라면 else의 블록 내부 코드를 실행하게 됩니다.
이 내부 코드에는 자신보다 상위 코드 블록을 종료하는 코드가 반드시 들어가게 됩니다.
코드 블록 종료시 return, break, continue, throw 등 제어문 전환 명령을 사용합니다.

Bool타입의 값으로 guard문 동작시킬 수 있지만 옵셔널 바인딩 역할도 가능합니다.
이렇게 사용시 guard로 옵셔널 바인딩 된 상수를 guard 구문 실행 코드 아래부터 함수 내부의 지역상수처럼 사용 가능합니다.

guard let으로 할 경우 ','(쉼표)로 추가조건을 나열할 수 있고 조건은 Bool 타입 값이어야 합니다. ','로 나열했을 때 AND 논리연산자와 같은 결과이고, ','를 '&&' 로 치환 가능

장점

guard 구문 사용시 if 코드를 훨씬 간결하고 읽기 좋게 구성 가능합니다.
예외사항만을 처리하고 싶다면 guard 구문을 사용하는 것이 훨씬 간편합니다.

단,

guard는 return,break,continue,throw 등의 제어문 전환 명령어를 쓸 수 없는 상황이라면 사용이 불가능합니다. 함수나 메서드, 반복문 등 특정 블록 내부에 위치하지 않는다면 사용이 제한됩니다.

if let

if let로 옵셔널 바인딩 된 상수는 그 블럭 안에서만 변수가 사용 가능합니다

참고한 자료

  • 스위프트 프로그래밍 3판

궁금한 점, 틀린 내용, 오타 지적, 오역 지적 등 피드백 환영합니다! 댓글로 남겨주세요!
😊 🙏

profile
개발 공부하고 있어요!

8개의 댓글

comment-user-thumbnail
2020년 3월 9일

코드가 계속 실행된다는게 for loop가 계속 되는건가요?
역시 최신언어라 그런지 신기한 문법이네요 😮

1개의 답글