728x90
반응형
728x90
반응형

데이터 타입

데이터 타입이란 데이터의 형태를 의미합니다. 여러 개의 데이터 타입이 존재합니다.

원시 데이터 타입(primitive type) : 숫자, 문자열, 불리언, null, undefined

레퍼 객체

var str = 'coding';

console.log(str.length);        // 6 . Object Access Operator 객체 접근 연산자

console.log(str.charAt(0));     // "C"

문자열은 분명히 프로퍼티와 메소드가 있습니다. 그렇다면 객체인데 왜 문자열이 객체가 아니라고 하는 것 일까요? 그것은 내부적으로 문자열이 원시 데이터 타입이고 문자열과 관련된 어떤 작업을 하려고 할 때 자바스크립트는 임시로 문자열 객체를 만들고 사용이 끝나면 제거하기 때문입니다. 이러한 처리는 내부적으로 일어납니다. 그렇기 때문에 몰라도 되지만 원시 데이터 타입과 객체는 좀 다른 동작 방법을 가지고 있기 때문에 이들을 분별하는 것이 필요하게 됩니다..

 

var str = 'coding';

str.prop = 'everybody';

console.log(str.prop);      // undefined

str.prop를 하는 순간에 자바스크립트 내부적으로 String 객체가 만들어집니다. prop 프로퍼티는 이 객체에 저장되고 이 객체는 곧 제거 됩니다. 그렇기 때문에 prop라는 속성이 저장된 객체는 존재하지 않게 됩니다. 이러한 특징은 일반적인 객체의 동작 방법과는 다릅니다. 하지만 문자열과 관련해서 필요한 기능성을 객체지향적으로 제공해야 하는 필요 또한 있기 때문에 원시 데이터 형을 객체처럼 다룰 수 있도록 하기 위한 객체를 레퍼 객체(wrapper object)라고 합니다.

 

참조

컴퓨터의 가장 중요한 특징은 복제입니다. 현실에서 사물이 있으면 복제하기 위해서 시간과 자원이 필요합니다. 전자화된 시스템에서 데이터를 복제하는 것은 비용이 들지 않습니다.

참조(reference)는 전자화된 시스템의 중요한 개념입니다. 참조는 윈도우의 바로가기를 만들면 파일이 가리키는 방향이 같습니다. 이 기능이 참조입니다.

참조는 저장 장치의 용량을 절약할 수 있고, 원본 파일을 사용하고 있는 모든 복제본이 동일한 내용을 유지할 수 있게 됩니다.

var a = {'id':1};               var a = {'id':1};

var b = a;                     var b = a;

b.id = 2;                       b = {‘id’: 2};

console.log(a.id);  // 2     console.log(a.id);  // 1

 

a = 1;

a = {'id':1};

전자는 데이터형이 숫자이고 후자는 객체입니다. 숫자는 원시 데이터형(Primitive Data Types)입니다. 자바스크립트에서 원시 데이터형을 제외한 모든 데이터 타입은 객체입니다. 객체는 다른 말로 참조 데이터 형(참조 자료형)이라고 부릅니다. 기본 데이터형은 위와 같이 복제 되지만 참조 데이터형은 참조 됩니다. 모든 객체는 참조 데이터형입니다.

변수에 담겨있는 데이터가 원시형이면 그 안에는 실제 데이터가 들어있고, 객체이면 변수 안에는 데이터에 대한 참조 방법이 들어있다고 할 수 있습니다.

 

함수와 참조

 
var a = 1;               var a = {'id':1};                 var a = {'id':1};
function func(b){        function func(b){                 function func(b){
    b = 2;                   b = {'id':2};                     b.id = 2;
}                        }                                 }
func(a);                 func(a);                          func(a);
console.log(a); /* 1*/   console.log(a.id);  /* 1*/        console.log(a.id);  /* 2*/
 

문자열, 숫자, 불리언은 객체처럼 사용할 수 있지만 실제는 원시 데이터

사용할 수 있는 이유는 wrapper 객체로 감싸져 있기 때문


출처 : 생활코딩 강의

728x90
반응형
728x90
반응형

+ Recent posts