if문, Switch문 차이

Dorito·2022년 9월 17일
0

기초공사

목록 보기
3/6

https://velog.io/@dorito/2022.8.20-토요일-공부기록 글에서 분리한 내용입니다.

if문, Switch문 차이

https://vivadifferences.com/difference-between-switch-case-and-else-if-ladder/
https://thinkpro.tistory.com/132
https://hee96-story.tistory.com/94

if문은 조건이 만족하면 실행/만족하지 않으면 무시 (실행을 할 것이냐 말것이냐?) = Branch statement이다.
레지스터 2개 값 혹은 레지스터와 값 비교 후 특정 메모리 번지로 이동할지 결정한다.
따져야 하는 조건이 많을 수록 연산량이 늘어난다. if문을 작성할 때, 자주 사용하는 기능 순서대로 조건문을 작성하는 것이 성능 향상에 도움이 된다.

장점: 점프 테이블을 만드는 오버헤드가 없다.
단점: if 혹은 else if를 만날 때마다 조건을 만족하는지 안하는지를 확인하기 위한 인스트럭션이 계속해서 필요됨.
즉, 따져야 할 조건의 수가 적을 경우 if-else를 쓰는 것이 유리함.

Switch 문은 Jump Statement이다. 따져야하는 조건이 많을 때와 사용자가 여러 기능을 유사한 빈도로 사용할 때 유리하다.
장점: switch문 시작시에 입력받은 값을 확인하는 인스트럭션만 필요. 조건을 확인하는 인스트럭션이 필요 없음.
단점: jump table 생성에 오버헤드 발생 가능성이 있다. (case의 개수가 4개 이하이면 jump table을 생성하지 않고, 그 이상일 때 생성한다.) 즉, 따져야 할 조건의 수가 많아져도 인스트럭션이 추가로 요구되는 것이 아니기 때문에,따져야 할 조건이 많은 경우 switch문을 쓰는 것이 유리하다. 또한 중간에 순차가 증가가아닌 경우에는 더 많은 메모리를 사용한다.

구글링하다가 찾았는데 신기한 얘기가 적혀있어서 적어봄.

만약 case문에서 조건 간 간격이 크다면(case 500, case 1, case 1000 이런 식으로)
컴파일러가 binary search를 사용한다고 한다.
조건이 n개인 경우 if문같은 경우에는 최악의 경우 O(n)이 나온다고.
Switch문에서는 O(1) ~ 점프테이블 (조건 4개 이상)
O(log n) ~ Binary search 사용하는 경우
정도의 성능이 나온다고 함!

어셈블리어..는 잘모르겠어서 대충 넘겨서 읽어가지고 내가 문서를 잘 못 읽은 것일수도 있으니 원문 가서 읽어보시길 추천

요약: 조건이 많다면 switch문이 유리하다.
그렇지만!! 요즘은 컴파일러 성능이 디게 좋아져서 성능 신경 쓸 것 없고 가독성, 의미 위주로 가면 된다.

  • 또 궁금해서 찾아본 것: switch문에서 break, default 기능
    break 는 조건 블럭을 나누는 단위 같은걸로 이해함! 없으면 쭉 조건 아래로 실행함
    default 레이블은 값 n에 해당하는 레이블(case)이 없다면 여기서 부터 실행하
    세요!라는 뜻

0개의 댓글