JavaScript에서 원시 타입과 참조 타입의 메모리 할당 방식
2024. 11. 15. 08:56ㆍ정보처리,전산/NODEJS
반응형
1. 원시 타입 (Primitive Types)
- 예시: Boolean, String, Number, null, undefined, Symbol
- 원시 타입의 데이터는 변경할 수 없는(immutable) 성질을 가지며, Call Stack에 값 자체로 저장된다.
- let isFinished = true라고 선언하면, isFinished는 Call Stack에 true라는 값으로 저장된다.
2. 참조 타입 (Reference Types)
- 예시: Object, Array
- 참조 타입의 데이터는 Call Stack에 직접 저장되지 않고, Heap 메모리의 주소가 저장된다. Call Stack에는 이 참조 주소가 담겨, 실제 값이 위치한 곳을 가리키게 된다.
- const enemies = ["Jack Welker", "Gus Fring", "Tuco", "Mike"]와 같은 배열이 있다면, enemies 변수에는 배열의 실제 값이 아닌 Heap 메모리의 참조 ID만 저장된다.
JavaScript는 동적 타입(dynamic typing)과 느슨한 타입(loosely typed) 언어라는 특징을 가진다. 이 특징은 변수를 선언할 때 특정 타입을 명시하지 않아도 된다는 점과, 동일한 변수가 여러 타입의 값을 가질 수 있다는 점에서 나타난다.
JavaScript의 동적 타입 예시
let foo = 42; // `foo`는 처음에 숫자(Number) 타입
foo = 'bar'; // 이제 `foo`는 문자열(String) 타입
foo = true; // 이제 `foo`는 불리언(Boolean) 타입
JavaScript에서는 변수 foo가 처음에 숫자였다가 문자열로, 다시 불리언으로 타입이 자유롭게 변경될 수 있다. 이를 통해 JavaScript는 변수의 타입을 실행 중에 동적으로 결정한다.
정적 타입 언어와의 차이점
정적 타입(static typing) 언어인 Java, C#, C++ 등은 변수를 선언할 때 타입을 명시해야 하며, 선언된 타입 외의 값으로는 재할당할 수 없다. , Java에서 int foo = 42;라고 선언하면, foo는 정수형으로 고정되며, 다른 타입의 값을 할당할 수 없다.
따라서 JavaScript의 동적 타입 시스템 덕분에 개발자가 타입을 명시하지 않아도 자유롭게 코딩할 수 있지만, 반대로 예상치 못한 타입 변화로 인한 오류가 발생할 수 있다.
반응형
'정보처리,전산 > NODEJS' 카테고리의 다른 글
비동기 작업 문제 해결 방법 Callback, Promise, Async/Await. (0) | 2024.11.15 |
---|---|
비동기 작업과 Event Loop (0) | 2024.11.15 |
전역 스코프와 지역 스코프 | Closuer (0) | 2024.11.15 |
Closure란? (0) | 2024.11.15 |
배열의 내용을 출력 (0) | 2024.11.15 |