일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- IT개발캠프
- 자바스크립트
- typescript
- 해시
- 유데미
- BFS
- 스레드
- 개발자부트캠프
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- 타입스크립트
- 인사이드아웃
- 네트워크
- react
- react-query
- ip
- React.js
- javascript
- cs #네트워크
- 프로세스
- 웅진씽크빅
- 알고리즘
- 리액트
- 스나이퍼팩토리
- html
- 프로젝트캠프
- 메모리
- CS
- 프로그래머스
- App Runner
- Algorithm
- Today
- Total
Bin's Blog
기본형 데이터와 참조형 데이터 본문
들어가며
지난주, 난 D사의 면접을 다녀왔다. D사의 면접은 나에게 합불을 떠나서 큰 영감을 줬다. 이제까지 받아보지 못했던 질문들도 많았고, 꼬리 질문도 많았다. 내가 무엇이 부족한지 느낄 수 있는 면접이었다. 돌아보면 준비가 부족했던 것 같아서 많이 아쉬움이 남는다. 그래서 오늘은 제대로 대답하지 못했던 부분은 기본형 데이터와 참조형 데이터에 대해서 살펴보고자 한다.
먼저, 기본형 데이터와 참조형 데이터를 알아보기 전에 데이터 할당에 대해서 잠시 살펴보자.
데이터 할당
기본적으로 데이터 할당은 메모리 공간에서 이루어진다. a라는 변수가 있고 'abc'라는 문자열을 할당하고 싶다면 데이터를 저장하기 위한 별도의 메모리 공간을 확보해서 문자열 'abc'를 저장하고 그 주소를 변수영역에 저장하는 식으로 이루어진다.
여기서 왜 변수 영역에 값을 직접 대입하지 않고 굳이 번거롭게 한 단계를 더 거칠까? 이는 데이터 변환을 자유롭게 할 수 있게 함과 동시에 메모리를 더욱 효율적으로 관리하기 위한 고민의 결과이다.
효율적으로 문자열 데이터의 변환을 처리하려면 변수와 데이터를 별도의 공간에 나누어 저장하는 것이 최적이다.
여기서 만약에 abc가 아닌 문자열 'def'를 마지막에 추가하면 "abcdef"라는 문자열을 새로 만들어 별도의 공간에 저장하고, 그 주소를 변수 공간에 연결한다.
기존 문자열에 어떤 변환을 가하든 상관 없이 무조건 새로 만들어 별도의 공간에 저장한다.
기본형 데이터
기본형 데이터는 간단한 데이터를 저장하는 데 사용된다. 기본적으로 Number, String, Boolean, null, undefined, symbol이 있다.
데이터가 변수에 직접 저장이 된다. 변수에서 다른 변수로 데이터를 복사할 때 실제 값이 복사된다.
기본형 데이터는 변경될 수 없다. 흔히 불변성이라고 말한다. 불변성 데이터는 값을 직접 변경하는 것이 아니라 새로운 값을 할당함으로써 값을 변경한다.
참조형 데이터
참조형 데이터는 객체를 포함하며, 복잡한 데이터 구조를 표현하는데 사용된다. 객체, 배열, 함수, 그리고 날짜 등은 모두 참조형 데이터 타입에 속한다.
데이터가 객체이며, 변수에는 객체에 대한 참조만 저장된다. 변수에서 다른 변수로 객체를 복사할 때 참조가 복사되고 같은 객체를 가리키게 된다.
참조형 데이터의 내용은 변경될 수 있다. 같은 객체를 참조하는 여러 변수가 있을 경우, 한 변수를 통해 객체를 변경하면 다른 모든 변수에도 변경사항이 반영된다.
// 참조형 데이터의 프로퍼티 재할당
var obj1 = {
a: 1,
b: "bbb"
};
obj1.a = 2;
메모리에서는 참조형 데이터가 더 많은 공간을 차지하며, 접근 속도도 느리다.
참조형 데이터의 프로퍼티에 다시 참조형 데이터를 할당하는 경우를 일컬어 중첩 객체라고 한다.
// 중첩된 참조형 데이터의 프로퍼티 할당
var obj = {
x: 3,
arr: [ 3, 4, 5]
};
마무리하며
오늘은 기본형 데이터 참조형 데이터에 대해서 알아봤다. 이렇게 다시 정리해 보니 "내가 기본적인 것들을 많이 놓치고 있었다"라는 생각이 들어서 많이 아쉽다. 항상 기본이 중요하다.
다음에는 얕은 복사, 깊은 복사에 대해서 다뤄보려고 한다.
'JavaScript' 카테고리의 다른 글
생각하는 자바스크립트 1편 - 프로그래밍이란? (0) | 2023.11.07 |
---|---|
얕은 복사와 깊은 복사 (0) | 2023.10.30 |
JS Framework & Library 트렌드 (0) | 2023.10.14 |
Garbage collection (0) | 2023.09.18 |
this Keyword (0) | 2023.08.30 |