본문 바로가기
IT/Java

if/else 동작 방식

by 성준하이 2023. 11. 8.
반응형

개발을 할때 중요한 요소 중 하나는 퍼포먼스이다.

동일한 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");
}

이렇게 각각 해줘야 두 로직이 모두 타게 되니 주의바란다.

반응형

댓글