원시 자료형과 참조 자료형

moono·2023년 1월 2일
0

JavaScript

목록 보기
10/23

Today's JavaScript

원시 자료형과 참조 자료형



  • 변수 : 변할 수 있는 값, 데이터를 의미
  • 식별자 : 변수명 , 데이터(변수)를 식별하는 이름
  • 변수의 선언 : 메모리에 자리를 잡는 것 // let = a;
  • 값의 할당 : 메모리에 값을 채우는 것 // a = 1;



원시 자료형 (Primitive type data)

객체가 아니면서 메소드도 가지지 않는 어떠한 값
number , string , boolean , (null) , undefined , bigInt , symbol

  • 이름표가 붙여진 stack 이라는 사물함에 하나의 정보(data) 값 을 저장
  • 데이터 보관함 한 칸에 하나의 데이터 = 하나 의 의미를 가지는 데이터
  • 값을 복사할 경우에 데이터 값이 복사되기 때문에 복사 값 변경해도 원본에는 영향이 없다.
  • 값 자체 의 변경은 불가능(immutable) 하지만 변수에 다른 데이터를 재할당할 수 있다.
  • 값에 의한 호출 (Call by balue)

Number

정수 및 부동 소수점 숫자

BigInt

숫자 데이터 타입으로 표현할 수 있는 범위를 넘어선 숫자를 표현할때 사용하는 데이터 타입 ⇒ 정수 리터럴 끝에 n을 붙여 표현할 수 있음

const bigNum = 123123123123123123123123n;
console.log(typeof bigNum) 

String

따옴표로 감싼 문자 또는 문자열

  • 'string' (작은따옴표로 감싼 문자열)
  • "string" (큰따옴표로 감싼 문자열)
  • string (벡틱으로 감싼 문자열)

Boolean

true 또는 false 를 값으로 가지는 논리 타입

null

값이 없음(존재하지 않음)

undefined

값이 아직 지정되지 않음

Symbol

객체의 고유한 식별자를 만들기 위해 사용



참조 자료형 (Reference type data)

배열 [], 객체 {}, 함수 function(){}

정보의 크기가 천차만별이니까
메모리에 공간 은 내가 알아서 부여 하고, 변수 는 그 공간의 주소만 참조 하도록 하자!
⇒ 원시 데이터의 집합, 주소만 가지기 때문에 동적으로 크기가 변하는 데이터 보관 가능

  • 변수에 저장할 때 heap 이라는 빈 공간에 값 대신 주소 를 저장
    (값을 찾을 때 사물함 안에 주소를 보고 heap에서 찾아서 반환)
  • heap : 동적으로 크기가 변하는 데이터 보관함
  • 변수가 가리키고(refer) 있는 데이터에 참조 한다.
    -> 변수의 주소를 참조 하여 실제 변수가 있는 장소에 도착해야 어떤 데이터가 있는지 읽을 수 있기 때문
  • 주소를 복사하기 때문에 복사한 데이터의 원소를 변경하면,
    같은 주소를 가지고 있는 원본 데이터도 변경됨.
  • 참조에 의한 호출 (Call by reference)

배열

데이터 타입 집합, index를 사용해 순차적으로 접근할 수 있는 데이터 타입

객체

여러 종류의 데이터 타입의 집합
각각의 요소는 키 와 값으로 구성되고 이러한 요소(키와 값의 한 쌍)를 프로퍼티 라고 부름
객체의 키는 항상 문자 또는 심벌 데이터 타입이어야 함



=== (strict equality) 동치연산자는 주소값이 같은지 확인한다.

참조 자료형을 읽을 때, 미리 주소값과 메모리값을 잡아둔다고 생각하자!

[] === [] // false

컴퓨터가 위 코드를 읽으면서, 이미 두 개의 heap 저장 공간의 주소를 확보한다.
값은 같을지라도 주소가 다르니 해당 값은 false 가 나옴

let arr = [];
let arr1 = [];
console.log(arr === arr1) // false
// 값이 같아도 주소가 다름

arr = [0, 1, 2, 3]
arr1 = arr
console.log(arr === arr1) // true
// arr1 에 arr 과 같은 주소와 값을 복사해서 두개는 같은게 됨
arr1[0] = 100;
console.log(arr[0]); // 100
// arr은 arr1과 같은 주소를 가지기 때문에 arr1을 변경해도 arr도 같이 변경

0개의 댓글