안녕하세요. 픽스 태크 블로그에 오신 것을 환영합니다!
개발을 하면서 생기는 이야기들을 정리하여, 더욱더 발전하는 픽스가 됩시다.
프로그래밍의 3요소는 변수, 자료형, 할당입니다. (알고리즘, 로직, 설계 등이 아닙니다)
그중 변수는 프로그래밍의 가장 중요한 요소로 모든 프로그래밍 언어에서 공통적인 특성을 갖습니다.
변수는 ‘사용자가 원하는 정보를 저장’하는 것을 말합니다. 조금더 명확히 구분하여 설명한다면 저장하는 물리적인 공간(일반적으로 메모리)과 그 공간에 사용자가 값을 저장하고 꺼내쓸 수 있는 변수이름으로 나눌 수 있습니다.
보통 개발에 사용할 때 위 두가지 개념을 통칭하여 변수라고 합니다. 대개 문제가 없지만 좋은 개발자라면 내부적으로 구분하여 이해할 필요가 있습니다.
C언어를 배운 사람이라면 변수를 배우면서 메모리할당과 포인터를 배우기에 위 개념을 자연스럽게 배우지만 고급언어를 배운사람은 이 개념을 값에 의한 전달 (passed by value) 와 참조에 의한 전달(passed by reference) 에 대한 차이를 배울 때 처음 접하게 됩니다. 이때 이 내용을 명확히 이해하지 못하면 디버깅하기 어려운 심각한 버그를 만들어낼 수 있습니다.
자바스크립트에서는 원시타입( Primitive values : Null, Undefined, Boolean, Number, Bigint, String, Symbol) 은 ‘=’ 연산자로 할 당될 때 값에 의한 전달(passed by value)로 복사되고 , 그 외의 객체 (Object)는 참조에 의한 전달(passed by reference)로 참조됩니다.
아래는 테스트 코드입니다.
// 원시변수 (int) 예제
var a = 1;
console.log( typeof(a) );
console.log( a );
console.log( change(a) );
console.log( a );
function change(num) {
num++;
return num;
}
// 객체변수(object) 예제
var b = {
num: 1,
}
console.log( typeof(b) );
console.log(b);
console.log( changeObj(b) );
console.log(b);
function changeObj(obj) {
obj.num++;
return obj;
}
// 객체변수(array) 예제
var c = [1];
console.log( typeof(c) );
console.log(c);
console.log( changeArray(c) );
console.log(c);
function changeArray(arr) {
arr[0]++;
return arr;
}
JavaScript
복사
결과는
jason@redemption test % node index.js
number
1
2
1
object
{ num: 1 }
{ num: 2 }
{ num: 2 }
object
[ 1 ]
[ 2 ]
[ 2 ]
Shell
복사