개발을 할때 중요한 요소 중 하나는 퍼포먼스이다.
동일한 input 과 동일한 output이 나오는 로직이지만 개발 방식에 따라 결과가 빠르거나 늦을수도 있다.
비지니스 로직을 개발하며 많이 사용하는것 중 하나가 바로 if / else if / else 인데 이에 대해서 적어보려고 한다.
if else 순서 조회
아래와 같은 코드가 있다고 해보자.
if (transactionA()) { a=1; }else if (transactionB()) { a=2; }else { a=3; } |
로직 설명은 패스하고
만약
TransactionA -> 100 sec.
TransactionB -> 50 sec.
TransactionC -> 10 sec.
가 각각 걸린다고 하면 else까지 오기에는 150초 이상이 걸리게 된다.
아래 코드를 다시 보면
if (printif()) { System.out.println("if1"); }else if (printelse()) { System.out.println("else1"); } // 결과 // if1 // printif |
와 같다.
첫번째 if 에서 걸러진다면 다음 else if 는 타지 않는다는 뜻이다.
그리하여 맨 위 로직은 TransactionA 랑 TransactionB 가 false 라면 150초 이상이 걸리는것이다.
만약 로직의 분포가 TransactionC == True 인게 많다면 순서를 바꿔서 코딩해줄 필요가 있다.
if else 관계 조회
위에서의 TransactionA 랑 TransactionB는 비슷한 로직의 관계라고 가정을 하고 개발이 된 코드 예시이다.
하지만 이번에 다룰 것은 아래와 같다.
if (a==1) { System.out.println("if1"); }else if (b==10) { System.out.println("else1"); } |
물론 의미상 syntax상 틀린것은 아니지만 semantic 상으로는 좀 이상하다.
a==1 이랑 비교를 했다면 a==2 .... a==10 그렇지 않으면 else로 구분해야하는데 전혀 다른것이 그렇지 않다면이 잡힐수 있다.
원래 비지니스 로직이 그렇다면 어쩔수 없지만 실수로 범하는 경우도 제법 있다.
b==10 도 비교를 해야하는 필수 로직이라면 a==1 과 별개로 구현이 되야 하므로
if (a==1) { System.out.println("if1"); } if (b==10) { System.out.println("else1"); } |
이렇게 각각 해줘야 두 로직이 모두 타게 되니 주의바란다.
'IT > Java' 카테고리의 다른 글
@EventListener 란? (ApplicationEventPublisher, publishEvent) (52) | 2023.11.12 |
---|---|
equals 함수 (equalsIgnoreCase) (42) | 2023.11.09 |
[error] Method has too many Body parameters (multiple RequestBody) (37) | 2023.11.07 |
Openfeign 에서 fallback 동작 안할때 (56) | 2023.11.06 |
@Transactional 사용시 주의 사항3 (Proxy 관련 // private 금지, 트랜잭션 분리) (38) | 2023.11.04 |
댓글