본문 바로가기
Fiori/UI5

[JavaScript] 원시값과 참조값

by clode 2023. 3. 6.
728x90
반응형

ECMAScript의 변수는 원시 값과 참조 값 두 가지 타입의 데이터를 저장할 수 있다. 변수에 값을 할당하면 자바스크립트 엔진은 해당 값이 원시 데이턴인지 참조인지 판단한다.

  • 원시 값은 단순한 데이터이다. Undefined와 Null, Boolean, 숫자, 문자열같은 데이터들을 말한다. 이들 변수는 ‘값으로’ 접근한다고 하는데 변수에 저장된 실제 값을 조작하기 때문에 이렇게 말한다.
  • 참조 값은 여러 값으로 구성되는 메모리에 저장된 객체이다. 자바스크립트는 메모리 위치에 직접 접근하는 것을 허용하지 않으므로 객체의 메모리 공간을 직접 조작하는 일은 불가능하다. 객체를 조작할 때는 사실 객체 자체가 아니라 해당 객체에 대한 ‘참조’를 조작하는 것이다. 이런 이유로 객체를 가리키는 값은 ‘참조로 접근한다’고 말한다.

원시값

<script>
      var iNum1 = 5;
      var iNum2 = iNum1;
      iNum1 = 10;
      document.write(iNum1);
      document.write("<br/>");
      document.write(iNum2);
      document.write("<br/>");
</script>

이경우 단순한 값, 데이터라서 iNum1의 값이 변해도 iNum2 값은 변하지 않는다.

참조값

<script>
      var oCar1 = {name: "SM6"};                      //{} 오브젝트
      var oCar2 = oCar1;
      oCar1.name = "Santafe";
      document.write(oCar1.name);
      document.write("<br/>");
      document.write(oCar2.name);
</script>

오브젝트, 객체의 리터럴은 {}이다. 이렇게 객체방식으로 데이터를 생성하면 객체는 같은 참조주소를 바라보고 있으므로 iNum1값이 변하면 iNum2값도 변한다.

      var oCar3 = {};     
      var oCar3.name = oCar1.name;

이 경우 oCar3은 oCar1, 2와 다른 오브젝트 주소를 갖는다. 그래서 이때 oCar3.name은 oCar1.name의 값을 참조값으로 복사하는게 아닌 단순한 값만을 복사하는게 된다.

728x90
반응형

'Fiori > UI5' 카테고리의 다른 글

[JavaScript] 배열 Array 2  (0) 2023.03.06
[JavaScript] 배열 Array  (0) 2023.03.06
[JavaScript] 함수와 매개변수  (2) 2023.03.06
[JavaScript] 제어문  (0) 2023.03.06
[JavaScript] 연산자  (0) 2023.03.06

댓글