본문 바로가기

Slack 채널 정리

js 리팩토링 중 실수

- js 는 java 의 오버로딩이란게 없다. 가변함수 방식을 취하기 때문인데 이게 꽤 편하기는 하지만 공통으로 추출해놓은 함수에 인자를 추가할 경우에 이걸 호출해서 쓰는 놈들 중 실수로 이 부분 반영하지 않았을 경우 에러는 나지 않지만 엉뚱한 결과가 ... (java 처럼 IDE 에서 리팩토링 기능을 제공하지 않아 수작업으로 일일이 찾아서 수정하다보니 실수가 날 수 밖에 없음 ㅜㅠ)
- 이번에 처음 겪은 경우이고 아직 명확하게 원인 파악 못한 문제인데 callee에서 caller가 넘겨주지 않은 객체를 사용하면 ... is not defiend 에러를 DevTools 콘솔에 뱉어주는게 정상일텐데 이 예외 출력을 삼켜 버리는 경우가 계속 발생.
가령, 

funcition funA() { 
   var frm = document.form1;
   var sht = sheet1;
   funB(sht, frm);
}
funcition funB(sht, frm) { 
   ...
   funC(sht, frm);
}
function funC(shtObj) {
   frm.user.value = "1";  //(1)
   shtObj.SetCellValue = "Y";    //(2)
   ...
}

가령, 위와 같은 식의 코드에서 funC 에서 frm 할당되지 않았으니 에러 나야 정상일 듯 한데 에러 출력 안하고 입닦음. 에러는 표시되지 않으면서 (1)에서 실행이 끝나고 (2)이하 부분은 실행이 되지 않으니 마치 정상 처리된거처럼 보이는데 결과가 엉뚱해서 그 문제들 추적하느라 꽤 많은 시간 낭비해버렸다