[VB.NET] OrElse 연산자가 뭐지? 첨보네

2024. 4. 12. 13:17VB.NET/왕초보

VB.NET은 이전 VB에 비해서 정말 많은 기능이 추가됐는데 OrElse도 그중 하나이다. 이게 처음에는 있다는 사실 자체를 몰라서 못쓰지만, 알게 되면 아주 유용한 연산자이니 OrElse를 사용하는 이유를 이번에 제대로 알아보도록 하자.

 

연산자 하나를 설명하는 포스팅이라 내용이 간단하니 부담없이 확인해보도록 하자.

 

아래 두개의 If문을 확인해보자.

Dim val1, val2, val3 As Boolean
val1 = True : val2 = False : val3 = False

If val1 = True Or val2 = True Or val3 = True Then
   MsgBox("True") 
End If

If val1 = True OrElse val2 = True OrElse val3 = True Then
   MsgBox("True") 
End If

 

여기서 두개의 If문을 주목하자. 첫번째는 Or로 묶여있고, 두번째는 OrElse로 묶여있는 차이가 있다. 그렇다면 Or와 OrElse의 차이점이 뭐길래 Or를 대신해서 OrElse라는 연산자를 제공하는 것일까?

 

그 답은 바로 조건문을 어디까지 평가하는지에 달려있다.

반응형

다들 알다시피 Or 조건은 여러 조건중 하나만 True이면 나머지를 확인하지 않아도 결과가 True가 된다.

 

하지만, 위 첫번째 If문의 Or 연산자는 이미 val1 = True를 확인했음에도 불구하고 val2, val3의 값을 모두 평가한 후에 다음 구문으로 넘어가게 된다. 실행할 필요가 없는 구문까지 실행하게 되니 미미하지만 속도에도 영향을 미칠 것이며, 만에 하나 뒷 구문이 오류가 발생하는 경우라면 결과를 알고 있음에도 불구하고 오류를 반환하게 되는 것이다.

 

그래서 VB.NET에서는 이런 Or 연산자를 대체하기 위해 OrElse 연산자를 제공하게 된다. 그래서 OrElse 연산자는 위에 언급한 단점들을 없앤 새로운 연산자로 인정받게 된 것이다.

 

앞으로, VB.NET으로 코딩하며 If문을 사용해서 Or 연산자를 쓸 일이 있을 경우에는 OrElse를 사용하는 습관을 들이는게 좋겠다.

 

조금 억지스럽지만 아래와 같은 소스를 생각해보자.

Dim val1 As Boolean = True
Dim list1 As List(Of String) = Nothing

If val1 = True OrElse list1.Count > 0 Then
   MsgBox("true")
End If

 

여기서 list1은 Nothing이기 때문에 list1.Count를 호출하면 에러가 발생하게 된다. 그래서 위의 OrElse를 Or로 사용하면 If문에서 '개체 참조가 개체의 인스턴스로 설정되지 않았습니다.'라는 오류가 발생하게 되는 것이다.

 

하지만, OrElse를 사용하게 되면 첫번째 val1 = True가 이미 True이니 뒤의 list1.Count > 0 을 호출하지 않고 If문을 종료하게 되는 것이다.

 

이렇게 이번 포스팅에서는 Or문과 OrElse문의 차이점에 대해 알아보았다. 상황에 맞춰서 Or, OrElse를 적절하게 사용하면 되지만, 기왕이면 OrElse를 사용할 것을 강력하게 추천하는 바이다.

반응형