[F-Lab 모각코 챌린지-19일차]

Big One·2023년 5월 29일
0

F-Lab

목록 보기
43/69

데이터 타입

데이터 타입의 종류

기본형 - string, number, boolean, null, undefined, Symbol(ES6), ...
참조형 - object, array, function, date, regexp, Map, WeakMap, Set, WeakSet, ...

배경지식

메모리와 데이터

비트 - 0 또는 1만 표현할 수 있는 하나의 메모리 조각이다.
바이트 - 8깨의 비트로 구성되어 1바이트가 된다.

숫자의 경우 부동소수형인지 정수형인지 구분하지 않고 64비트(8바이트)의 메모리 공간을 확보한다.

각 비트는 고유한 식별자를 갖는다. -> 식별자로 비트의 위치를 확인한다.
바이트 역시 시작하는 비트의 식별자로 위치를 파악한다.
모든 데이터는 바이트 단위의 식별자, 정확하게는 메모리 주솟값 을 통해 서로 구분하고 연결한다.

식별자와 변수

변수 - 변할 수 있는 무언가 여기서 '무언가'는 데이터를 말한다. (변경 가능한 데이터가 담길 수 있는 공간 또는 그릇)
식별자 - 어떤 데이터를 식별하는데 사용하는 이름이다. 즉, 변수명이다.

기본형 데이터와 참조형 데이터

불변값

변수와 상수를 구분하는 성질은 '변경 가능성'이다. 한 번 데이터 할당이 이뤄진 변수에 재할당 여부가 관건이다.
기본형 데이터인 숫자, 문자열, boolean, 등 모두 불변값이다.

가변값

참조형 데이터는 가변값이다? -> X!!!!
기본형 데이터와의 차이는 '객체의 변수(프로퍼티)영역'이 별도로 존재한다.
변수에는 다른값을 얼마든지 대입할 수 있다. 객체의 변수의 값을 변경할 수 있기 때문에 가변값이라고들 한다.

const obj = {
	a: 1,
    arr: [3, 4, 5],
};

const obj2 = obj;	// 복사를 한다.

consol.log(obj === obj2) // true

obj2.arr = 7;

obj.arr === obj2.arr // true
console.log(obj.arr) // 7
console.log(obj2.arr) //7

이런식으로 객체의 프로퍼티 값을 변경할 수 있어 가변값이라고 한다.
여기서 문제는 객체의 복사본이든 원본이든 프로퍼티를 변경하면 둘 다 변경된다는 것이다.
데이터 자체를 변경하고자하면 기본형과 마찬가지로 기존 데이터는 변하지 않는다.
아래코드를 통해 확인하자

const user = {
	name: 'BigOne',
    gender: 'male',
}

const changeName = function (user, newName) {
	const newUser = user;
    newUser.name = newName;
    return newUser;
}
const user2 = changeName(user, 'silverCenter');

console.log(user === user2)	// true
console.log(user.name, user2.name) // silverCenter silverCenter

객체의 가변성에 따른 문제점이다. 불변값으로 만들어 해결하면 된다.

const user = {
	name: 'BigOne',
    gender: 'male',
}

const changeName = function (user, newName) {
	return {
    	name: newName,
        user.gender,
    }
}

const user2 = changeName(user, 'silverCenter');

console.log(user2 === user)	// false
console.log(user2.name, user.name) // silverCenter, BigOne

changeName 함수가 새로운 객체를 반환하게 하면 불변성을 지키게된다.

참조형 데이터가 '가변값'이라고 설명할 때의 '가변' 이란 참조형 데이터 자체를 변경하는 경우가 아니라 객체 내부의 프로퍼티를 변경할 경우에만 성립한다.

profile
이번생은 개발자

0개의 댓글