개발을 하다보면,

if condition == '1':
  a = 'abc'
elif condition == '2':
  a = 'bcd'
elif condition == '3':
  a = 'cde'
else:
  a = 'def'

 

이런 전개를 자주 하는 버릇이 있다.

이때 If를 먼저 검사하고 아니면 Elif, 아니면 그다음 Elif, 다 아니면 Else 형태로 실행하게 되는데

이게 반복문 안에 있을 경우 항상 체크로직을 거치게 된다.

가독성은 논의해볼 수 있으나, 퍼포먼스를 좋게 하기 위해선, 미리 값을 할당해놓고 뽑아서 쓰는 게 좋다.

 

이런 경우엔 dict에 저장할 수 있다.

dict_master = {'1' : 'abc', '2' : 'bcd', '3' : 'cde'}

a = dict_master.get(condtion, 'def') # 키값이 없으면 'def'를 할당함

 

1000만번 기준으로 해보니

else 포함 4가지인 경우

if : 0.43928680000000003
dict lookup : 0.3785323

else 포함 6가지인 경우
if : 0.6370448
dict lookup : 0.379486

else 포함 8가지인 경우

if : 0.9782373000000001
dict lookup : 0.3811875

이런 결과가 나왔다.

[하기 이미지는 퍼온 것]

Performance 차이. 여기선 7개부터 차이가 커진다.

------------------------------------------------------------------------------

C# 베이스인 Uipath에서 하려면 TryGetValue로 쓰면 된다.

TryGetValue 쓰기

(Assign에서는 ref 함수가 지원이 안 돼서 invoke method로 설정해서 해야 한다. Tryparse 같은 함수도 비슷하다.)

 

이런 식의 패턴을 예상한다.

invoke method

if string.isNullOrWhiteSpace(sTest)

  sTest = "기본값"

end if

 

 

Try~Catch를 쓸 수도 있는데 If에 비해 퍼포먼스가 항상 안 좋다는 걸 생각하면,

위의 패턴이 최선으로 보인다.

https://rito15.github.io/posts/cs-if-vs-try-performance/

 

C# - If vs try-catch 성능

Note

rito15.github.io

 

+ Recent posts