
왜 고민했을까?
UI 라이브러리를 만들다가 고민에 빠진 점이 있다.// 1번 - switch case switch (status) { case 'success': return COLORS.SUCCESS; case 'error': return COLORS.ERROR; case 'warning': return COLORS.WARNING; case 'info': return COLORS.INFO; default: return COLORS.primary; } // 2번 - object-literal const getAlertColor = (status) => { const ALERT_STATUS = { 'success': COLORS.SUCCESS, 'error': COLORS.ERROR, 'warning': COLORS.WARNING, 'info': COLORS.INFO } return ALERT_STATUS[status] ?? COLORS.primary }
- UI 라이브러리를 팀원들과 같이 작성하며 두 개의 코딩 스타일이 등장하여 어떤 방법이 더 효율적이고 가독성이 있는지 궁금해졌다.
let color = ''
if (emotion === 'happy') color = 'yellow'
else if (emotion === 'sad') color = 'blue'
else if (emotion === 'angry') color = 'red'
else color = 'white'
원하는 조건이 나올 때까지 순차적으로 모든 경우의 수를 하나씩 비교한다. 따라서 O(n)의 시간복잡도를 가지게 되어 case들이 늘어날수록 성능에 악영향을 미친다. 개인적으로 3개 case 이상의 경우 가독성 측면에서도 switch-case문과 비교해서 떨어진다는 생각이 든다.
let color = '';
switch (emotion) {
case 'happy':
color = 'yellow';
break;
case 'sad':
color = 'blue';
break;
case 'angry':
color = 'red';
break;
default:
color = 'white';
}
if문과 다르게 jumping-table을 사용하여 원하는 case로 평가가 진행된다. 다만, case의 개수만큼 jump-table을 차지하므로 메모리를 차지한다는 단점이 존재한다.
if-else, switch-case, object-literal(Map) 3가지 방법 중 한 가지로 통일해서 사용하는 것보다 상황에 맞게 유연하게 사용하는 것이 좋을 것 같다.
3개 이하의 case들을 비교할 때는 if-else문이 가장 좋다. (하지만 고려해야 할 사항들이 존재)
if-else 문은 사용하지 않는 것이 좋다.object-literal 보다는 switch-case가 좋다.object-literal을 선호한다.Switch case, if else or a lookup map
개인적으로 여러 블로그와 글들을 찾아봤지만 논쟁거리가 많았고 가장 옳다고 생각되는 글을 가져왔다.
틀린 정보가 있다면 말해주세요! :)