이 포스트는 “이거 말고 다른 방법있을것 같은데..”에서 멈추고 지나갔던 코드가
면접 질문에서 나오면서 와 이런 방법도 있네 하면서 큰 깨달음(?)을 얻은 내용입니다. 이런것도 모르는 뉴비쉨을 살..
개요
서버는 유저가 입력하는 값을 제외한 선택하는 값은 이용자의 값 모두 신뢰하지 않기 때문에 어떤 값을 보내던 나는 if이나 switch로 결과값을 리턴하여 사용하는데, 예시를 들면 사용자단에서 [A0] 을 보내면 [전체]라는 값을 가져오는식으로 구성하였다.
예시
Function 으로 만들어서 사용한 코드 (IF)
let test2 = (x) =>{
if (x == "A0") {
returnName = "전체";
} else if (x == "A1") {
returnName = "서울";
} else if (x == "A2") {
returnName = "부산";
} else if (x == "A3") {
returnName = "대구";
} else if (x == "A4") {
returnName = "인천";
} else {
returnName = "error";
}
return returnName;
}
이 코드의 문제점은 검사해야하는 값이 늘어날수록 코드의 길이도 쭈-욱 늘어나며 코드의 가독성 및 일케 코드를 짜면 안될것 같은디 하는 심리적 두려움이 생겼다. 하지만 딱히 뾰족한 방법이 생각나지 않아서 이대로 넘겨버렸는데, 면접에서 이 방법이 아닌 다른 방법을 생각해보라고 질문을 주셨다.
그러자 바로 다음 생각한 방법은 Switch 방법인데
let test3 = (x) => {
switch (x){
case "A0" :
returnName = "전체";
break;
case "A1" :
returnName = "서울";
break;
case "A2" :
returnName = "부산";
break;
case "A3" :
returnName = "대구";
break;
case "A4" :
returnName = "인천";
break;
default :
returnName = "error";
}
return returnName;
}
코드가 늘어나면 늘어났지 별로 크게 차이가 있어보이지는 않았다.
(구조적 차이는 있음. 조건수가 늘어나면 늘어날수록 switch가 성능면에서 유리함.)
Switch > 점프테이블을 만들어서 조건을 만족하는지 안하는지 확인하지 않음. 입력값을 확인하는 인스트럭션만 필요하지 조건을 확인하는 인스트럭션은 필요하지 않음.
If > 각각의 조건을 모두 확인하기 위해 조건 확인하는 인스트럭션이 필요하다.
인스트럭션(Instruction) : 컴퓨터에 일을 시키는 단위로서 컴퓨터가 알아들을수 있는 지시/명령
결과
그때 내 머리속에는 IF와 Swith뿐이였는데, 면접관분께서 힌트로 key:value라는 말을 해주셨다.
아..Object……
let test1 = (x) =>{
let user = {'A0' : '전체' , 'A1':'서울' , 'A2':'부산' , 'A3':'대구' , 'A4':'인천' };
return returnName = user[x];
}
찝찝한 코드는 해결..
면접은.. 미궁으로.. (결과 안나옴)
추가 - 속도비교
Return이 있는 값 (10회 평균)
If | Switch | Object |
---|---|---|
0.095ms | 0.075ms | 2.999ms |
Return이 없는 값 (10회 평균)
If | Switch | Objact |
---|---|---|
0.146ms | 0.115ms | 3.936ms |
가독성 좋고 추가하기 쉬운거 쓰자.