데이터 타입

khundi·2024년 3월 9일
0
post-thumbnail

해당 글은 책을 보고 중요하다고 생각한 부분을 그대로 옮기기도 하지만 저만의 언어로 풀어 작성한 글입니다. 틀린 내용이 있을 수 있고, 저만의 언어로 풀다보니 누락되거나 내용이 다르게 전달될 수 있습니다.

학습 회고

  • 기본형 타입참조형 타입이 어떻게 다르게 동작하는지 이유를 이해하고 이를 활용할 수 있게 되었습니다.

1. 데이터 타입의 종류

일반적으로 기본형은 할당이나 연산시 복제되고 참조형은 참조된다고 알려져 있습니다. 엄밀히 말하면 둘 모두 복제를 합니다. 다만 기본형은 값이 담긴 주솟값을 바로 복제하는 반면 참조형은 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제합니다.

2. 데이터 타입에 관한 배경지식

과거에는 데이터를 최대한 효율적으로 사용해야 했지만 현대에 들어서 메모리가 여유가 생겨 숫자의 경우 64비트, 즉 8바이트를 확보합니다. 덕분에 개발자가 형변환을 걱정해야 할 상황이 덜 발생하게 되었습니다.

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

변수와 상수를 구분하는 성질은 ‘변경 가능성’입니다. 값을 재할당할 수 있으면 변수, 재할당할 수 없으면 상수입니다. 여기서 변경 가능성의 대상은 변수 영역 메모리입니다. 반면 불변성 여부를 구분할 때의 변경 가능성의 대상은 데이터 영역 메모리입니다.

직접 문제를 만들고 같이 풀어보기

불변성

{
	var a = 'abc';
	a = a + 'def';
}
// 이 경우 'abc'가 'abcdef'로 바뀐다.(O, X)

정답은 X, abc는 기본형(원시형) 데이터이므로 불변값입니다. abc라는 문자열에 def를 더하여 abcdef로 값이 바뀌는 것이 아니라 새로운 값으로 abcdef가 만들어집니다.

데이터 영역

var a = 5;
var b = 5;
// 여기서 a와 b는 서로 다른 5를 바라보고 있다.(O, X)

정답은 X, 변수 a를 선언하고 값인 5를 할당할 때 데이터 영역에서 5를 찾고, 데이터가 없기 때문에 데이터 공간을 하나 만들어 5를 저장합니다. 그리고 5를 저장한 주소값을 변수 a에 할당합니다. 그리고 b를 선언할 시점에 5를 할당하려고 할 때 다시 데이터 영역에서 5를 찾습니다. 그리고 이미 만들어져있는 5의 데이터 주소를 재활용합니다. 그래서 같은 5를 바라보고 있다고 할 수 있습니다.

const와 객체

const obj = {
	a: 1
}

obj.a = 1;
// const 키워드로 선언하였기 때문에 에러가 난다.(O, X)

정답은 X, obj의 주소값은 여전히 같고 obj.a의 주소값이 변하였으므로 위의 경우는 타입에러가 나지 않습니다. obj의 주소값이 변하는 경우 타입에러가 발생합니다.

가비지 컬렉터의 수거 대상의 기준

빈칸에 들어갈 단어는 무엇일까요?

_가 0인 메모리 주소는 가비지 컬렉터의 수거 대상이 됩니다. _는 어떤 데이터에 대해 자신의 주소를 참조하는 변수의 개수를 말합니다.

정답은 참조 카운트(Reference Count), 자신을 참조하고 있는 메모리의 개수를 말하고 런타임 중간에 참조를 끊어 참조 카운트가 0인 메모리는 가비지 컬렉터가 자동으로 수거합니다.

profile
안녕하세요. 웹 프론트엔드 개발자 전성훈입니다.

0개의 댓글