이클립스에서 제시하는 Node 소스코드의 경고 표시의 원인과 해결방법

Eclipse를 사용하여 Node 프로그램을 개발하다 보면 아래의 스크린샷과 같이 소스코드와 라인넘버 옆에 노란색 느낌표가 표시되는 경우가 있습니다. 이는 Eclipse가 판단하기에 안전하지 않거나 에러의 가능성이 있는 소스코드인 경우입니다.

몇가지 사례를 통하여 어떤 경우 경고가 표시되고 어떻게 수정할 수 있을지 살펴보도록 하겠습니다.

 

비교 연산자에 대한 경고

비교 연산자에 대해서 경고가 표시되는 경우 경고 아이콘에 마우스를 올려보면 다음과 같이 표시됩니다.

 

Javascript에의 비교 연산자는 크기 비교의 경우를 제외하고 “===”, “==”, “!==”, “!=” 의 네 가지가 있습니다.

“==”, “!=”의 경우 값의 내용만을 비교하고 데이터 타입은 비교하지 않습니다. 즉 if (“0” == 0) { … }과 같은 비교식이 참으로 처리되는 경우가 있다는 의미 입니다. 하지만 “===”, “!==”의 경우는 데이터 타입까지 완벽하기 일치해야 참으로 인정됩니다.

이클립스는 자바스크립트 구문을 비교하여 데이터타입까지 일치해야 함에도 불구하고 “==”나 “!=”가 사용된 연산자에 대해서 경고를 표시합니다.

 

위와 같이 사용된 부분이 있다면 아래와 같이 “===” 표시를 세개로 처리해야 합니다. 문자열의 길이는 숫자값으로만 비교해야 하기 때문에 다른 타입까지 처리 가능한 연산자에 대해서 경고가 표시되기 때문입니다.

 

Express 모듈에  serve-static 모듈을 확장한 경우.

serve-static 모듈은 임의의 디렉토리를 웹 상에 노출해주는 기능을 하는 Express의 미들웨어 입니다. 이 모듈을 사용할 때 다음과 같이 require 구문을 사용하는 경우가 있습니다.

var static = require(‘serve-static’);

에러의 내용도 다음과 같이 괄호가 잘못 사용되었다는 내용입니다. (엥?)

‘)’ expected

사실 Javascript 입장으로만 보면 아무런 문제가 없는 구문입니다. 하지만 Eclipse 자체가 본디 Java 언어에 최적화 된 프로그램이다 보니 static 키워드가 java의 예약어이므로 변수와 같이 사용되는 경우 경고를 표시합니다. (실은 아래와 같이 아예 대놓고 에러로 표시합니다.)

 

그러므로 해당 모듈을 사용할 경우는 다음과 같이 “static”이라는 단일 키워드를 사용하는 경우는 피해야 합니다. 이클립스를 사용할 때만 발견되는 어처구니 없는 경우이니 무시해도 상관 없습니다만 작업중인 소스코드에서 노란색 경고 표시가 수십개가 보인다면 찜찜한 것은 사실입니다.

 

 

향상된 for 문으로 Object의 속성을 스캔하는 경우

다음과 같이 for 문을 사용하면 이클립스는 경고를 표시합니다.

 

경고의 내용은 다음과 같습니다.

The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype

경고가 표시되는 이유는 위의 반복문에서 attrname이라는 값이 data에 정의되지 않았을지도 모른다는 염려때문입니다. data를 기반으로 스캔한 것임에도 불구하고 attrname이 data에 정의되지 않은 경우를 걱정한다는 것이 어처구니 없는 일이기는 하지만 이 경고표시가 나타나지 않도록 하기 위해서는 아래와 같이 if문으로 attrname이라는 key가 data안에 포함되어 있는지 여부를 검사하는 if문을 한번 더 사용해야만 합니다. (개인적으로 이 부분은 정말 어이 없었습니다.)

 

 

함수 정의에서 경고를 발생하는 경우.

다음과 같이 프로퍼티의 확장으로 함수를 정의하면 이클립스에서 경고를 표시하는 경우가 있습니다.

 

경고의 내용은 다음과 같습니다.

Missing semicolon

사실 이 부분은 이클립스가 맞습니다. 명백한 구문 오류 입니다. 프로퍼티의 확장으로 함수를 정의하는 경우 일종의 대입문이기 때문에 마지막에 세미콜론이 표시되는 것이 맞습니다. 즉 다음과 같이 수정되어야 합니다.

댓글 남기기