라벨이 primitive인 게시물 표시

[JavaScript] 원시 타입 (primitive type)

원시 타입(primitive type) 1. Boolean 2. null 3. undefined 4. Number 5. String 6. Symbol (ECMAScript 6) 7. bigint 위 7가지는 Javascript에서의 원시 값이다. Javascript에서 원시 값은 변경 불가능한 값(immutable value)이다. 변수에 새로운 값을 다시 할당할 수 있지만, 이미 생성한 원시 값은 객체, 배열, 함수와 달리 변형할 수 없다. 즉, 새로운 메모리 값을 새롭게 할당할 수 있지만 기존 메모리 값을 수정할 수 없다는 의미이다. 원시 타입 이외의 모든 값은 객체(Object) 타입이며 객체 타입은 변경 가능한 값(mutable value)이다.  변경 가능하다는것은 참조하고있는 메모리의 값을 변경 할 수 있다는 의미이다. 위 내용을 이해하려면 복제와 참조에대한 이해가 필요하다. 복제 는 원본데이터를 복제해서 복제된 데이터를 수정하는것이기때문에 원본데이터는 변경되지 않으며 참조 는 원본데이터를 공유해서 그러니까 저장된 메모리 공간을 공유해서 서로 원본데이터를 수정할 수 있기 때문에 수정시 참조하는 모든 데이터들에서 수정이 발생된다. 즉 수정이 발생하면 원본데이터의 값이 변경된다. 가져오는 값이 원시타입이면 복제하여 사용하기때문에 원본데이터를 변경하지않고 가져오는 값이 원시타입이 아닌 객체인경우 참조를 하기때문에 원본데이터도 변경된다. 하지만 객체에 새로운 객체를 할당하면 더 이상 참조하지않고 새롭게 할당된 객체 데이터가 그 변수의 값이 된다.

복제와 참조

복제 와 참조 원시데이터타입은 복제, 객체는 참조 1. 변수에 담겨있는 값이 객체인 경우 같은 객체를 바라보게되므로 참조를하게된다. 즉 객체가 저장되어있는 메모리 주소인 객체에 대한 참조 값이 저장된다. 2. 변수에 담겨있는 값이 원시데이터타입인 경우 복제시 같은 데이터를 참조하지않고 같은 값의 데이터를 각각 소유한다 . 객체를 다른 변수에 할당하면 객체에 대한 참조 값이 하나 더 만들어진다. 하지만 객체도 참조하지않고 복제할 수 있는 방법이 있다. 1번. 빈 객체를 생성하고  프로퍼티값을 설정해준다. 설정해줄때는 기존에 복제하고자하는 객체를 for in문으로 순회하면서 프로퍼티 키와 값을 저장해주면 값은 똑같으면서 독립적인 객체가 생성된다. 2번. Object.assign() 을 사용하면 반복문 없이도 간단하게 객체를 복사할 수 있다. // ### 복제1 ### // var a = 1 ; var b = a ; b = 2 ; console . log (a) ; // 1 // ### 참조 ### // var a = { id : 1 }; var b = a ; b . id = 2 ; console . log (a . id) ; // 2 // ### 복제2 ### // var a = { id : 1 }; var b = a ; b = { id : 2 }; console . log (a . id) ; // 1 -#복제1#의 경우 숫자를 값으로 할당하고 있는데 숫자(Number)는 원시데이터타입으로 값을 참조하지않고 복제를 하게된다. 그러므로 b에 할당된 a의값이 변경되더라도 별개의 데이터이기때문에 오리지널 a의 데이터를 변경시키지 않는다. -#참조#를 보면 값을 원시데이터타입이아닌 객체로 할당받은경우 복제가아닌 참조를 하게되는데 이 경우 참조하고있는 a의 값을 2로 변경하였기 때문에 a.id값도 2가 출력된다. -#복제2#의 경우 a는 객체를 할당받아 변수