개발일기

원시타입과 객체타입 본문

Javascript

원시타입과 객체타입

황대성 2024. 3. 6. 02:58

원시타입과 객체타입

1. 원시타입이란 ?

  • 원시타입은 변경이 불가능한 값이다. 
  • 원시 값을 변수에 할당하면 변수에는 실제 값이 저장된다.
var score = 80;
var copy = score;

console.log(score); //80
console.log(copy); //80

score = 100;

console.log(score); //100
console.log(copy); //80

 

값에 의한 전달

변수에 원시 값을 갖는 변수를 할당하면 할당받는 변수(copy)에는 할당되는 변수(score)의 원시 값이 복사되어 전달된다.

이를 값에 의한 전달 이라 한다.

 

var score = 80;
var copy = score;

console.log(score,copy); //80 80
console.log(score === copy) // true

 

score 변수와 copy 변수는 숫자 값 80을 갖는다는 점에어는 동일하지만, score 변수와 copy변수의 값 80은 다른 메모리 공간에 저장된 별개의 값이다.

2. 원시타입의 종류

  • 문자열(string)
  • 숫자(number)
  • 불리언(boolean)
  • null
  • undefined
  • 심벌(Symbol)

 

3. 객체타입이란 ?

  • 객체(참조) 타입의 값, 즉 객체는 변경 가능한 값이다.
var person = { 
    name: 'Lee'
};
//프로퍼티 값 갱신
person.name = 'Kim';
//프로퍼티 동적 생성
person.address = 'Seoul'

console.log(person) // {name: 'Kim', address: 'Seoul'}

 

원시 값은 변경 불가능한 값이므로 원시 값을 갖는 변수의 값을 변경하려면 재할당 외에는 방법이 없다. 하지만 객체는 변경 가능한 값이다. 따라서 객체를 할당한 변수는 재할당 없이 객체를 직접 변경할 수 있다. 즉, 재할당 없이 프로퍼티를 동적으로 추가할 수도 있고 프로퍼티 값을 갱신할 수도 있으며 프로퍼티 자체를 삭제할 수도 있다.

 

var person = { 
    name: 'Lee'
};
//얕은 복사
var copy = person;
//copy와 person은 동일한 객체를 참조한다.
console.log(copy === person) // true
//copy를 통해 객체를 변경
copy.name = 'Kim'
//person을 통해 객체를 변경
person.address = 'Seoul'

console.log(person) // {name: 'Kim', address: 'Seoul}
console.log(copy) // {name: 'Kim', address: 'Seoul}

 

참조에 의한 전달

위처럼 원본 person을 사본 copy에 할당하면 원본 person의 참조 값을복사해서 copy에 저장한다. 이때 원본 person과 사본 copy는 저장된 메모리 주소는 다르지만 동일한 참조 값을 갖는다. 이것은 두 개의 식별자가 하나의 객체를 공유한다는 것을 의미한다.

 

var person1 = { 
    name: 'Lee'
};

var person2 = {
    name: 'Lee'
}

console.log(person1 === person2) //false
console.log(person1.name === person2.name) //true

 

person1 변수와 person2 변수가 가리키는 객체는 비록 내용은 같지만 다른 메모리에 저장된 별개의 객체이다. person1변수와 person2 변수의 참조 값은 전혀 다른 값이다. 하지만 프로퍼티 값을 참조하는 person1.name과 person2.name은 값으로 평가될 수 있는 표현식이다. 두 표현식 모두 원시 값 ' Lee'로 평가된다.