Swift/개념 & 응용

[Swift] 콤마(,)와 && 차이

유정주 2023. 3. 28. 23:09
반응형

서론

지난 포스팅에서는 where을 다뤘습니다.
포스팅을 적으면서 여러 반복문을 where로 바꿔보고 있었는데요.
아래와 같은 에러가 발생하는 경우가 있었습니다.

where문에서 두 개의 조건을 콤마(,)로 연결해본 코드인데요.

for i in 0..<100 where i % 3 == 0 && i % 5 == 0 {
    print("i: \(i)")
}

위처럼 콤마 대신 논리연산자 &&를 적어야 정상적으로 수행되었습니다.

for i in 0..<100 {
    if i % 3 == 0, i % 5 == 0 {
        print("i: \(i)")
    }
}

if문, guard문에서는 자연스럽게 사용했는데 왜 where 옆에서는 에러를 발생 시키는걸까요?
 
대부분이 어느정도 차이는 알고 계시겠고,
틀려도 위처럼 컴파일러가 잡아주기 때문에 정확히 몰라도 개발은 가능하지만
한 번 정리해두면 유용하겠다 싶어 포스팅을 작성하기로 했습니다. (tmi. 코테 공부 지겨워서도 포스팅 이유 중 하나 ㅎ;)
 

Condition

콤마(,)는 condition을 이어붙이는 용도입니다.
condition이라는 단어는 Swift 레퍼런스에도 등장하는데요.
condition이란

  • expression
  • availability-condition
  • case-condition
  • optional-binding-condition

을 의미합니다.
 
그리고 condition-list라는 것도 있습니다.
condition-list는 condition이거나 condtion, condtion-list 를 의미하는데요.
쉽게 표현하면

  • condition 한 개
  • 콤마로 연결한 condtion 여러 개

모두 condition-list라고 할 수 있습니다.
 
콤마는 condtion과 condtion을 연결시켜서 condtion-list를 만들어줍니다.
콤마로 조건 연결이 가능했던 If문의 내용이 아래 사진처럼 나와있습니다.

if문에 condition이 들어갈 수 있기 때문에 콤마를 사용할 수 있습니다.

guard문에도 동일하게 작성되어 있습니다.
 

예외 - repeat while문

하지만 예외도 있습니다 ㅎ;

repeat-while문도 while 뒤에 condition이 들어가지만,

이 문법은 불가능합니다.
해당 이유는 공식문서에서 확인할 수 있었는데요.

이 condtion은 Bool 타입이거나 Bool로 연결되어야 한다는 조건이 있기 때문입니다.
 

Expression

expression도 condition 중 하나입니다. (바로 위에서 말함)
expression을 요약하면 '연산자를 하나라도 사용한 스위프트 코드 단위'라고 할 수 있으며,
보다 자세한 내용은 여기에서 확인할 수 있습니다.
 
논리연산자 &&를 사용한 코드는 expression이고,
이는 곧 condition이라고 할 수 있습니다.
즉, condtion이 들어갈 수 있는 곳이면 &&를 사용한 코드를 콤마로 연결해서 사용할 수 있다는 뜻이죠.
 

결론

콤마 앞뒤로는 condtion이 와야하고, && 앞 뒤로는 boolean expression이 와야 합니다.
여기서 중요한건
"expression은 condition이지만, condition은 expression이 아니다"라는 것인데요.
condtion이 expression이 아니라는 것은 optional binding을 생각하면 이해가 바로 되실거에요.
 
이제 다시 서론에서 본 스크린샷을 보겠습니다.

위와 같은 사용에서 where문 뒤에는 bool expression이 와야 합니다.
하지만 위처럼 콤마로 연결된 코드는 condition이기 때문에 컴파일 에러가 발생하는 것입니다.
(repeat-while처럼 bool 타입만 사용할 수 있다는 명확한 문서는 찾지는 못했습니다.
혹시 찾으신 분은 댓글로 공유해주시면 감사하겠습니다.)
 
이번 포스팅에서는 콤마와 &&의 차이점에 대해 알아보았는데요.
콤마와 &&는 비슷한 효과를 내지만 condtion과 expression이라는 차이가 있다는걸 알고 가셨으면 좋겠습니다.
 
감사합니다!
 
참고
https://soojin.ro/blog/swift-comma-vs-and-operator
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/statements/
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/expressions


아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감 댓글 부탁드립니다.
 
 

반응형