본문 바로가기
Programming/JavaScript

자바스크립트 (JavaScript) 자료형 종류, 처리 방법 - 심코딩

by 심코딩 2023. 2. 14.

오늘은 자바스크립트(JavaScript) 의 이론 중 하나인 자료형에 대해서 자료형에는 어떠한 종류가 있으며, 이러한 자료형은 어떻게 저장을 하는지, 또 처리 방법에는 어떤 것들이 있는지 알아보도록 하겠습니다.

 

자료형(Data Type) 이란?

 

자바스크립트(JavaScript) 에서 자료형(Data Type) 이란 프로그래밍 언어로 조작을 할 수 있는 값의 유형들을 나타냅니다.  보통 프로그래밍 언어에서는 문자열(String), 숫자(Number), 불린(Boolean), 배열(Array), 객체(Object), 함수(Function), 널(Null), 미정의(Undefined) 와 같은 자료형들이 있습니다.

 

자료형(Data Type) 의 종류?

 

자료형에는 크게 세 가지 종류가 있습니다.

 

  • 기본 자료형: 기본적으로 문자열, 숫자, 불린등의 자료형 들입니다. 문자열은 우리가 흔히 말하는 텍스트, 숫자는 모든 숫자들, 불린은 참(true)와 거짓(false)를 나타냅니다.
  • 복합 자료형: 복합자료형은 객체, 배열, 함수등을 나타내는 자료형 입니다.
  • 특수 자료형 : 널(null), 미정의(undefiend)와 같이 값이 없거나 할당되지 않은 변수를 나타내는 자료형 입니다.

 

자료형을 저장하는 방법: 스택(Stack) & 힙(Heap)

 

각 자료형들을 저장하는 방법은 모두 다르다. 특수 자료형 같은 경우는 값이 없거나 정의가 안되어 있는 경우기 때문에 따로 저장하진 않습니다. 즉 기본 자료형과 복합 자료형만 저장을 하게 되는데, 이 둘은 저장 방법이 모두 다릅니다.

 

기본 자료형을 저장하는 곳을 스택(Stack) 이라고 합니다. 스택(Stack)에는 자료들을 차곡차곡 저장을 해둡니다. 이 스택(Stack)은 상대적으로 작은 크기의 데이터, 즉 기본 자료형들을 저장하기 용이 합니다.

 

복합 자료형 같은 경우는 객체, 배열, 함수등과 같이 데이터의 규모가 기본자료형보다는 크기 때문에 스택(Stack)에 저장을 할 수 없습니다. 따라서 복합 자료형은 힙(Heap) 이라고 하는 곳에 저장을 합니다.

 

힙(Heap)에 복합자료형이 주소로 저장이 된 다음, 그 힙(Heap)을 스택(Stack)에 저장을 해두는 겁니다.

아래 이미지를 봅시다.

먼저 스택(Stack)에는 이미 간단한 기본 자료형 두개가 들어있습니다 (10, "두번째 자료"). 여기서 복합 자료형 하나인 숫자 배열을 하나 넣고 싶습니다. 하지만 이 배열은 규모가 크기 때문에 스택(Stack)에 바로 넣지는 못하고 힙(Heap)을 거쳐야 하는 겁니다. 

 

힙(Heap) 에서 해당 배열을 "리스트" 라고 하는 주소를 준 다음, 이 "리스트" 라고 하는 주소를 스택 안에 넣어 두는 겁니다. 즉 주소는 복합 자료형이 존재하는 위치가 되는 거죠. 그 후 사용자가 해당 숫자 배열 [1,2,3,4] 를 가져오고 싶다면 스택(Stack)에서 "리스트" 라고 하는 주소만 불러오면 되는 거죠. 이 과정은 레퍼런스(Reference) 라고 합니다.

 

 

파괴적 처리 & 비파괴적 처리

 

자바스크립트는 1995년에 만들어진 굉장히 오래된 프로그램입니다. 과거에는 컴퓨터의 메모리가 지금과 비교했을 때는 굉장히 부족했기 때문에 프로그래밍 언어와 라이브러리들은 메모리를 최대한 절약할 수 있게끔 설계가 되어 있었습니다. 따라서 위에 말했듯 스택(Stack) 과 힙(Heap) 으로 저장장소가 구분이 되어있었는데요, 처리 방법 또한 이에 맞게 설계가 되어 있었습니다. 처리 방법은 두가지가 있습니다.

 

  • 파괴적 처리: 처리 후 원본 데이터 내용이 변경되는 처리
  • 비파괴적 처리: 처리 후 원본 데이터 내용이 변경되지 않는 처리.

 

힙(Heap) 안에 있는 크기가 큰 데이터 같은 것들의 원본과 결과를 모두 메모리에 저장하는 것들이 큰 문제를 만들 수 있었기 때문에 해당 자료들은 대부분 파괴적 처리를 통해 처리가 되었습니다. 따라서 메모리를 절약할 수 있었지만 잘못하면 원본데이터를 날릴 수 도 있었죠.

 

현재는 대부분이 비파괴적 처리를 사용은 하지만 아직도 많은 함수들과 메서드는 파괴적 처리를 사용 합니다. 예를 들어 보겠습니다.

 

<script>
	let c = [1,2,3]
	c.push(4)
	alert(c)
</script>

 

위 코드에서 처음의 c는 [1,2,3] 이었지만 push를 사용하고 나서의 c는 [1,2,3,4] 가 됩니다. 즉 원본의 데이터가 변경이 되는 파괴적 처리인 것이죠.

 

어떠한 메소드가 파괴적인지 ,비파괴적인지는 자주 쓰는 코드가 아니라면 한번 사용을 해보는 수 밖에는 없다고 합니다.

 


오늘은 자바스크립트에서 자료형의 종류, 자료형의 저장방법 그리고 해당 자료형의 처리 방법에 대해서 알아보았습니다.

 

댓글