2015년 1월 28일 수요일

[JavaScript] 자바스크립트 String(문자열) 자료형

자바스크립트 String 데이터 타입

16bit 유니코드 문자들로 이루어지는 String(문자열) 데이터 타입 이다. 이 또한 다른 프로그래밍 언어에서도 볼 수 있는 흔한 타입이다. 자바스크립트(ECMA 스크립트)에서 String 타입은 쌍따옴표(")와 단따옴표(') 로 문자열을 감쌈으로써 선언이 가능하다. 단 문자열을 감싸는 따옴표가 같은 따옴표여야 한다.


var stringVar1 = "StringTest1";
var stringVar2 = 'StringTest2';
var stringVar3 = "StringTest2';//에러가 나게된다.


String 데이터 타입의 메모리 관리


사실 String(문자열) 타입은 따로 특별히 다룰게 없는데, String 데이터 타입의 메모리 매니지먼트는 알아두는게 좋다. Number, Boolean 등 다른 Primitive Data Type(원시 자료형)들이 변수 값의 수정시 추가적인 메모리 할당을 하지 않는 것에 반해, String 자료형은 변수값이 변경될 때마다 새로운 메모리를 할당해줘야한다. 물론 이건 자바스크립트 엔진이 할 일이니 코딩시 개발자들이 따로 특별한 코드를 부가해야하는 것은 아니다. 이런 일들이 벌어지게되는 이유는 바로 String(문자열) 데이터 타입이 이름에서도 잘 알 수 있듯 "문자들의 열"로 이루어져있기 때문이다. 16bit 유니코드 문자들의 열로 이루어진 ECMAScript 의 String 자료형은 문자 1개당 2바이트의 메모리를 소모하게 되다. 그렇다면 한번 생각해보자.

ABCDEFGH 라는 스트링을 저장해야한다고 할 때

[A][B][C][D][E][F][G][H]
처럼 16 바이트의 연속되는 메모리를 할당하는게 좋을까?

아니면

[A][ ][ ][ ][ ][ ]
[ ][B][C][D][ ][ ]
[ ][ ][F][G][ ][E]
[ ][ ][ ][H][ ][ ]
처럼 각기 떨어져있는 메모리들을 할당하는게 좋을까?

물론 당연히 전자의 경우가 훨씬 효과적일 것이다. 전자의 경우에는 메모리가 서로 연속되있어, RAM에 엑세스할시에 후자에 비해 훨씬 빠른속도로 전체 엑세스가 가능하다. 하지만 후자의 경우에는 각기 떨어져있는 메모리에 엑세스하느라 전자에 비해서는 느리게 읽게될것이다. 물론 이는 매우 미세한 차이지만, 메모리 관리의 효율성 관점으로 보았을 때, 후자의 경우대로 관리해서는 절대로 안될 것이다.

어쨋든 이게 String 값이 변경될 때 새로운 메모리를 할당해야된다는 것과 무슨 관련이 있나면,
스트링 변수에 주어진 메모리 바로 옆에 새로운 값이 할당되는것과 같은 아래의 경우와 같은 일이 발생할 수도 있다는건데

[A][B][C][D][E][F][G][H][0][N][E][W][V][A][L][U][E]

만약 이 경우에 새로운 메모리블록을 할당하지 않고 ABCDEFGH라는 스트링 값에 IJK를 추가해야 한다면, 아마 [0][N][E][W]가 저장된 메모리와 그 뒤의 메모리들이 순차적으로 뒤로 밀려나거나(매우 비효율적인 방법), [0][N][E][W]라는 메모리를 그냥 무시하고 [I][J][K][0]로 그냥 덮어 씌울 수도 있겠다. 하지만 이 경우에는 결국 NEWVALUE라는 값이 저장된 변수를 훼손하게 된다. 이런 이유 때문에 스트링값의 변경이 있을시에 새로운 메모리 블락을 할당해주고, 그 전 블락을 풀어주게 되는건데, 코드로 보자.


var stringVar1 = "ABCDEFGH";//[A][B][C][D][E][F][G][H]
var stringVar2 = 'NEWVALUE';//[A][B][C][D][E][F][G][H][0][N][E][W][V][A][L][U][E]
var stringVar1 = stringVar1 + "IJK";


위의 코드가 실행되면 메모리 할당은 아래와같이 바뀌게 된다

[ ][ ][ ][ ][ ][ ][ ][ ][ ][N][E][W][V][A][L][U][E]
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
[A][B][C][D][E][F][G][H][I][J][K][ ][ ][ ][ ][ ][ ]

이 모든게 개발자들이 보는 모니터 뒤에서 일어나는 일이기는 하지만, 이 때문에 자바스크립트 엔진 String 데이터 타입 관리에 따라서, String Concatenation(문자열 연결) 작업에 걸리는 시간이 좌지우지 되고, 나아가선 자바스크립트 엔진의 성능차이가 발생하는 원인이 되기도 한다.

String(문자열) 타입의 자동 타입 변환


타 자료형의 String 타입으로의 변환은 toString() 함수나, String() 함수로 손 쉽게 가능하다.
그리고 코드 작성시 보게되는 텍스트를 그대로 스트링타입으로 변환하니, 변환 불가능한 값이 없다고 말할 수 있다


var boolTrue = true;
var stringVar1 = boolTrue.toString(); //"true"

//toString()함수는 파라미터로 radix를 넣어서 2, 8, 10, 16진수로 변환 할 수도 있다.
var var1 = 33;
var stringVar1 = var1.toString(2); //"100001"
var stringVar2 = var1.toString(8); //"41"
var stringVar3 = var1.toString(16); //"21"

//단 null 이나 undefined 값은 toString() 함수로 변환하기가 불가능하다. 
//그렇기 때문에 필요한 경우에는 될 수 있으면 String() 함수를 이용해주자

var stringVar4 = String(null); //"null"
var stringVar5 = String(undefined); //"undefined"
var stringVar6 = String(2); //"2"

//또 따옴표를 이용할 수도 있다
var stringVar7 = '\"' + var1 + '\"'; //"33"

2015년 1월 27일 화요일

[JavaScript] 자바스크립트 Boolean 자료형

자바스크립트의 Boolean 데이터 타입

어떤 프로그래밍 언어에도 존재하는 자료형, 값이 true 또는 false, 총 2개밖에 존재하지 않는 자료형, 바로 Boolean 자료형이다. Boolean 자료형은 아래와 같이 선언된다.


var trueVariable = true;
var falseVariable = false;

//대소문자를 가리니, True 나 False 를 어싸인할시에는 에러가 뜬다

var trueVariable0 = True;
var falseVariable0 = False;

Number 자료형이 Number() 함수, parseInt() 함수를 사용해서 자료형을 변환할 수 있는 것처럼 Boolean 자료형도 Boolean 함수를 이용해서 다른 자료형을 Boolean 자료형으로 변환이 가능하다.


var booleanVar1 = Boolean("String");
var booleanVar2 = Boolean(null);
var booleanVar3 = Boolean(undefined);
var booleanVar4 = Boolean(4);
var booleanVar5 = Boolean(true);

자바스크립트 Boolean() 함수 자료형 변환 표


자료형
변환시 Boolean 값
truefalse
Booleantruefalse
String공을 제외한 모든 스트링 값스트링이 "" 처럼 공일때
Number0 보다 큰 모든 수들0 or NaN
Objectnull 을 제외한 모든 object 들null
Undefined해당 사항 없음undefined
Null해당 사항 없음null

[JavaScript] 자바스크립트 Number 자료형

자바스크립트의 Number 데이터 타입

ECMAScript 에서 Number 자료형은 정수형(Integer Value)이든 소수형(Floating Point Value)이든 상관없이 IEEE-754 형식을 이용해서 저장한다. IEEE-754가 뭔지 잠시 짚고 넘어가자면

IEEE-754는 전기 전자 기술자 협회(IEEE)에서 개발한 컴퓨터에서 부동소수점를 표현하는 가장 널리 쓰이는 표준이다. ±0 등의 수와 무한, NaN 등의 기호를 표시하는 법과 이러한 수에 대한 연산을 정의하고 있다.

간단히 말하자면 0 과 1, 즉 이진법으로 이루어진 컴퓨터 연산체계에서 0 과 1 이상의 수들을 표현하는 표준 방식이라고 할 수 있다. IEEE-754 체계에서는 가장 첫번째 비트가 +,-인지를, 즉 그 수가 음수인지 양수인지를 나타내는데, 이러한 이유로 ECMAScript 에서는 0과 -0이 둘다 존재할 수 있다. 물론 0 == -0이라는 조건은 true(참)이다.

정수형


IEEE 32bits Single Precision 형식
IEEE 32bits Single Precision 형식

ECMAScript 는 굉장한 유연성과 높은 자유도를 가졌는데, 이러한 이유로 다양한 정수형 수들(8진수, 16진수)을 표현하기위한 다양한 문법들이 존재한다.
참고로 정수형 수들을 저장할 때는 32bits single precision 형식으로 저장된다는걸 기억하자. 즉 어떤 정수 값이든간에, 32비트 형식으로 저장된다는 것 이다. 위의 그림에 나와있는 방식으로 저장된다 생각하면 된다.


var integerNumber = 35; //integer 값을 선언할 때

//8진수를 표현할 때는 첫번째 자리의 숫자가 무조건 0 이여야 한다.
var octalNumber1 = 07; //8진수 07, 10진수로 환산하면 7
var octalNumber2 = 017; //8진수 017, 10진수로 환산하면 15
var octalNumber3 = 019; //3번째 자리의 수가 8진수에 없는 숫자인 9라 일반 10진수로 받들여지게 된다.
//하지만 8진수의 사용은, strict 모드에서 에러를 발생시키고, 몇몇 브라우져에서는 제대로 실행되지 않으므로 사용을 자제하자.

//16진수를 표현할 때에는 숫자 앞에 무조건 0x 를 붙인다.
var hexaNumber1 = 0x7; //16진수 07, 10진수로 환산하면 7
var hexaNumber2 = 0xA7; //16진수 A7, 10진수로 환산하면 167
var hexaNumber3 = 0xB35; //16진수 B35, 10진수로 환산하면 2869


하지만 결국 16진수나 8진수로 선언된 변수들도 연산시에는 다 10진수로 변환되니, 별다른 특별한 이유가 없으면 10진수를 사용하도록 하자.

소수형


IEEE 64bits Double Precision 형식
IEEE 64bits Double Precision 형식

ECAMScript에서의 소수형은 정수형과는 달리 64bits double precision 형식으로 저장된다. 바로 위의 그림과 같은 형식이다. 소수형 수들은 아래와 같이 선언되는데


var floatingNumber1 = 0.3; 
var floatingNumber2 = 1.47;
var floatingNumber3 = .7;//안 좋은 예제 1
var floatingNumber3 = 3.;//안 좋은 예제 2, 결국 3으로 자동 변환되 저장됨
var floatingNumber3 = 4.0;//안 좋은 예제 3, 4가 정수형으로 인식되서 32bit 형식으로 저장됨
var floatingNumber3 = 4.572e3;// = 4572, 많이 작거나 큰 숫자의 경우에는 e-notation을 이용 10의 몇 승으로 표현할 수 있다.
var floatingNumber3 = 4.572e-3;// = 0.04572
//ECMASCript 는 소수점아래로 0이 5개보다 많을 시에 무조건 e-notation을 이용한 표기법으로 수를 표현한다.
var testFloat = 0.0000006533;
console.log(testFloat); //6.533e-7


위와 같이 다양한 방식으로 선언되고 어싸인될 수 있는데, 몇가지 피해야할 방식들이 있다. ECMAScript에서 정수형은 32bits로 소수형은 64bits 로 표현되는 만큼, 소수형을 표현하는데는 정수형의 2배에 달하는 메모리를 사용해야 한다. 이러한 이유로 ECMAScript는 제대로된 형식이 아닌 소수형 수들은 무조건 integer로 인식 32bits 형식으로 저장하게 된다.

우선 안 좋은 예제 1은 작동은 하나, 최대한 피해야할 방법이다. 몇몇 Javascript 엔진에 따라서는 에러가 뜰 수도, 또는 0이나 1로 변환되서 저장될 수도 있다.
안 좋은 예제 2 같은 경우는 제대로 완성되지 않은 숫자라, 3으로 자동 변환되서 저장된다.
안 좋은 예제 3 같은 경우에는 숫자 4.0가 정수형으로 변환되서 32bit 형식으로 저장된다.

소수형을 이용한 연산을 할 때 조심해야할건, 무슨 일이 있어도 var1 + var2 = 0.6 같은 소수형 비교는 하면 안된다는건데, 이 이유는 IEEE-754의 정확성에 있다.

IEEE-754 방식은 그냥 일반 수를 표현할 때는 소수점 아래로 17번째 자릿수까지 완벽하게 정확하지만, 사칙연산시에 그 결과값의 정확성이 매우 떨어지기 때문이다.


var var1= 0.2; //Double Precision시에 0.20000000298023224라는 값으로 저장된다.

var var2= 0.4; //Double Precision시에 0.4000000059604645라는 값으로 저장된다.

console.log(var1 + var2 == 0.6); //false값이 프린트된다

var var3= 0.6; //Double Precision시에 0.6000000238418579라는 값으로 저장된다.

console.log(var1 + var2 == var3); //false값이 프린트된다


위와 같은 경우
var1 + var2 는 0.6000000089406967라는 결과를 도출하게되고, 0.6이라는 값(메모리내에는 0.6000000238418579라는 값으로 저장) 과 일치하나는 조건에서 false(거짓)값을 가지게 된다.
그러니 소수형 수의 연산값을 이용한 조건문은 절대로 쓰지 않도록 하자.

표현할 수 있는 수의 범위와 무한(Infinity) 값

ECMAScript에서 Number 자료형을 표현할 때 사용하는 비트수에 제한이 있다보니, 표현할 수 있는 수가 무한하지가 않다. 
최대로 표현가능한 수와 최소수는 아래와 같이 확인이 가능하다.


console.log(Number.MAX_VALUE); //양수의 최대값 
console.log(Number.MIN_VALUE); //양수의 최소값


만약 이에서 더 커지거나 작아지면 IEEE-754로 표현하는 한계를 넘으면 그 수는 Infinity 로 표현된다


console.log(Number.MAX_VALUE + Number.MAX_VALUE); //Infinity
console.log(- Number.MAX_VALUE - Number.MAX_VALUE); //-Infinity


그리고 Infinity 값은 Infinity를 제외한 다른 수와의 어떤 연산에서도 Infinity 값을 결과로 도출한다.
참고로 Infinity 값은 아래와 같이 불러올 수 있다.


console.log(Number.NEGATIVE_INFINITY + Number.POSITIVE_INFINITY); //NaN
console.log(Number.NEGATIVE_INFINITY + Number.MAX_VALUE); //-Infinity
console.log(Number.POSITIVE_INFINITY - Number.MAX_VALUE); //Infinity


NaN 값 이란?


간단하다. Not a Number 의 약자로 연산의 결과가 수가 아닐때 사용된다.
-Infinity + Infinity, 3/0 와 같이 결과가 숫자로 도출될 수 없을 떄 사용된다.


console.log(Number.NEGATIVE_INFINITY + Number.POSITIVE_INFINITY); //NaN
console.log(NaN + 3);//NaN이 포함된 연산은 언제나 결과가 NaN이다.

console.log(NaN == NaN); //false
//NaN값은 본인을 포함한 어떠한 값과도 Equal하지 않는다. 이러한 이유로 ECMAScript 에는 isNaN이라는 function이 있다

console.log(isNaN(NaN)); //true


이 isNaN() function 은 주어진 파라미터를 Number 자료형으로 변환 시도를 해서, 성공적으로 변환이 되면 false 를 아니라면 true 값을 리턴하는 함수이다.
그러니 ECMAScript 의 자동변환으로 Number 자료형으로 변환될 수 있는 경우에는 false 값이 리턴된다.


console.log(isNaN(NaN)); //true 
console.log(isNaN(1)); //false 
console.log(isNaN("1")); //false 
console.log(isNaN("test")); //true
console.log(isNaN(true)); //false


타 자료형을 Number 자료형으로 변환시 

자바스크립트(ECMAScript)는 Number(), parseInt(), parseFloat() 함수등을 이용해 타 자료형을 Number 자료형으로 변환 할 수가 있다. 변환 값은 아래 표를 참고하자

Number() 함수를 사용해 타 자료형을 변환시



var num1 = Number("String");
var num2 = Number(true);
var num3 = Number(null);
var num4 = Number(undefined);
var num5 = Number(NaN);
var num6 = Number(new Object());


자료형
변환시 Number 값
01NaN숫자
Booleanfalsetrue해당 사항 없음해당 사항 없음
Undefined해당 사항 없음해당 사항 없음undefined해당 사항 없음
Nullnull해당 사항 없음해당 사항 없음해당 사항 없음
Number01NaN모든 숫자들
String"0" or """1","01""TEST", "0Tx34",등 다른 조건에 부합하지 않을 때따옴표 사이에 숫자밖에 없을 때 자동으로 수로 변환(16진수도 10진수로)
Object해당 사항 없음해당 사항 없음모든 object 타입해당 사항 없음


String 자료형의 Number 자료형으로의 변환에 대해 짧게 설명하자면, 

"0", "11", "055" 와 같이 스트링의 따옴표 사이에 숫자 밖에 없다면, 무조건 동일한 Number 값으로 변형된다. 숫자의 맨 앞에오는 0은 생략되고, 만약 따옴표안에 "0xAB"와 같이 16진수 수가 있다면 자동으로 10진수로 변환된다. 

Empty String, 빈 스트링 값 같은 경우에는 무조건 0으로 변환되고, 이를 제외한 모든 상횡에서는 다 NaN값으로 변환된다.

parseInt() 함수를 사용해 타 자료형을 변환시

parseInt() 함수는 Number 함수와 String 자료형 변환을 제외하고는 모두 똑같은 변환값을 가진다. 하지만 String 값의 경우에 캐릭터가 들어간 모든 String을 NaN 값 으로 변환하는 Number와 달리 첫자리가 숫자라면, 이어지는 숫자들까지 모두 Number 자료형(정수)으로 변환한다. 또한, 파라미터에 radix 를 설정해줄 경우에, 주어진 스트링을 2진수, 8진수, 16진수, 10진수로 인식하는것을 설정할 수도 있다

var num1 = parseInt("String");
var num1 = parseInt(true);
var num2 = parseInt(null);
var num3 = parseInt(undefined);
var num4 = parseInt(NaN);
var num5 = parseInt(new Object());
var num6 = parseInt("1110",2); //1110을 2진수로 인식, 10진수 14로 변환한다
var num7 = parseInt("17",8); //17을 8진수로 인식, 10진수 15로 변환한다
var num8 = parseInt("A3",16); //A3을 16진수로 인식, 10진수 163으로 변환한다
var num9 = parseInt("333",10); //10진수로 인식한다


자료형
변환시 Number 값
01NaN기타
Booleanfalsetrue해당 사항 없음해당 사항 없음
Undefined해당 사항 없음해당 사항 없음undefined해당 사항 없음
Nullnull해당 사항 없음해당 사항 없음해당 사항 없음
Number01NaN모든 숫자들,(소수일때 정수자리만 변환)
String"0" or """1","01""TEST", "Tx34",등 다른 조건에 부합하지 않을 때앞자리들이 숫자일 때는 앞자리들을 수로 변환("43TX8" -> 43)
만약 16진수라면 10진수로 변환("0xApp" -> 10)
Object해당 사항 없음해당 사항 없음모든 object 타입해당 사항 없음



parseFloat() 함수를 이용해 타 자료형을 변환시

parseFloat() 함수는 parseInt() 함수와 모든게 같으나, 32bits 정수형으로 변환하는 parseInt()함수와 달리 String 자료형 변환에서 소수형 수를 발견할 때 64bits 소수형으로 변환한다. 만약 정수형수라면 32bits 정수형으로 변환

var num1 = parseInt("String");
var num1 = parseFloat("0.44TQG"); //0.44
var num2 = parseInt("32BB"); //32(O), 32.0(X)

2015년 1월 26일 월요일

[JavaScript] 자바스크립트 Undefined 와 Null의 차이

Undefined Type


자바스크립트의 Undefined 타입은 값이 1개밖에 없다. 바로 'Undefined' 단 하나이다.
이 Undefined 라는 값은 변수가 정의되지 않았다는것을 의미하는데, 가장 쉽게 이 값을 얻는 방법은 var 키워드를 이용해 변수를 선언하고 초기화 하지(값이 어싸인되지 않았을 때) 않는 것 이다.


var testVar;
console.log(testVar);//undefined 가 프린트 될 것이다.
console.log(typeof testVar);//undefined 가 프린트 될 것이다.


ECMAScript 는 Primitive Data Type(원시 자료형) 5개, Composite/Reference Data Type(객체) 1개, 총 6개의 자료형을 가지고 있는데 undefined 는 Primitive Data Type 중 하나 이며, 저 5개의 Primitive Data Type(원시 자료형)에 포함되지 않는 값을 나올 때 있을 때 자동으로 undefined 값이 된다.
물론 변수에 undefined 값을 어싸인해주는 것도 가능하다


var undefinedVar = undefined;
console.log(undefinedVar);//undefined 가 프린트 될 것이다.
console.log(typeof undefinedVar);//undefined 가 프린트 될 것이다.


하지만 ECMAScript에 undefined 라는 자료형이 추가된 것은 단순히 변수 값들의 비교 작업을 수월히 하기 위해서이니, 위와 같이 변수 값에 undefined를 어싸인해주는 것은 자제하도록 하자.
그리고 또 하나 알아둬야 할 것은, 자바스크립트에서 변수생성은 변수 선언(Variable Declaration)에 의해 이루어지니 선언된적 않은 변수들은 절대로 undefined 값을 가지지 않는다.


var undefinedVar;//세미콜론(;)으로 선언을 완료했다.
console.log(undefinedVar);//undefined 가 프린트 될 것이다.
console.log(undeclaredVar);//Uncaught ReferenceError: undeclaredVar is not defined 에러를 보게될것이다


Null Type


Null 타입은 Undefined 타입과 같이 값이 null 1개 밖에 없다. Null 타입과 Undefined 타입의 차이점은 undefined 타입이 Primitive Data Type(원시 자료형)에 사용되는 자료형이고, null 타입은 Complex Data Type(복합 자료형), 즉 Ojbect(오브젝트)에 사용되는 자료형이라는건데... 즉 이론적으로 Null 타입은 Empty Object를 가리키는 포인터인데, 이 때문에 null 값을 가진 변수나 null 값에 typeof 연산자를 사용하게 되면, object 라는 결과가 나온다.


var t = null;
console.log(typeof t);//object 가 프린트 될 것이다
console.log(typeof null);//object 가 프린트 될 것이다


참고로 undefined 값은 null 값의 하위 타입이라 == 연산자를 이용해 비교하게되면, true 값이 나온다.



console.log(undefined==null);//true 값이 나온다.



그렇다면 이 null이라는 자료형을 어디에 써먹어야 하는가, 간단하다.
추후에 필요한 object 타입의 변수를 미리 생성해 놓아야할 때


var t = null;
if(t==null){
t = loadbook();
}


또는 Empty Object 가 필요한 작업에


var book = null;
book = loadBook()
if(book==null){
alert("책을 로드하는데 실패했습니다.");
}


요렇게들 사용하면 된다.

2015년 1월 24일 토요일

[Eclipse] 이클립스에서 Node.js 개발 환경 세팅하기

Node.js 로고
Node.js 로고
자바스크립트(JavaScript) 개발을 하다 보면 제대로 된 디버거가 없어서 alert 나 console 을 사용해서 웹브라우져의 개발자 도구 콘솔에 프린트 하거나 팝업을 띄우기 마련인데, 이런 방식은 쉴틈없이 새로고침을 해줘야 해서 귀찮기 마련이다. 그러니 이클립스Node.js 를 이용해서 이클립스에 자바스크립트 콘솔을 세팅해보도록 하자.

우선 Eclipse 를 켜서 하고 메뉴에서 Help->Install New Software를 클릭하면 아래와 같은 창을 보게 될 것이다.

이클립스 부가 소프트웨어 설치 스크린
이클립스 부가 소프트웨어 설치 스크린

노란색으로 강조해 놓은 옵션 박스에서, 본인의 이클립스 버젼을 선택한 후에, 아래의 이클립스 확장들을 설치해 준다.
  • JavaScript Development Tools 
  • Eclipse Web Developer Tools 

그리고 이곳[http://nodejs.org/]에서 Node.js 인스톨러를 다운 받아 설치해준다.
설치 후에 시스템 속성에 들어가 환경변수 설정에서 시스템 변수를 등록 해주자.

Node.js 윈도우 환경 변수 등록

나 같은 경우는 위와 같이 등록해줬다. node.js 설치시 기본값으로 설치했다면 변수 값을 나와 같이 하면 된다. 그리고 본인의 변수 이름을 잘 기억하도록 하자.

그리고 다시 Eclipse 로 돌아가서 메뉴에서

Run -> External Tools -> External Tools Configuration
외부 도구 설정으로 들어가자


Eclipse 외부 도구 설정

위의 이미지에 1 Javascript라 적힌건 무시하자, 내가 이미 설정해 놓은게 있어서 저렇게 나오는거니까.

그리고나서 저걸 클릭하면 요런 창을 보게 되는데



노란색으로 칠해놓은 새로만들기 버튼을 누르면




이런 창을 보게 된다. 여기서 Location, Working Directory, Arguments를 저렇게 적어주자.

만약 환경변수 설정시에 변수 이름을 node 로 하지 않았다면 Arguments의

/c "node ${resource_loc}" /c "환경변수이름 ${resource_loc}"

이렇게 적어주면 된다.

그리고나서 자바스크립트 프로젝트를 생성하고  console.log 를 이용 스크립트 작성 후 아래와 같이 External Tool을 클릭해서 방금 우리가 만든 설정을 이용하면





이렇게 이클립스 콘솔에 프린트 된다.