Javascript 7

[JS] Maximum call stack size exceeded 에러

들어가며자바스크립트를 통해 코드를 자다 보면 종종 'RangeError: Maximum call stack size exceeded'라는 에러 메시지를 볼 수 있는데요.이번 시간에는 이 에러의 원인과 해결 방법에 대해 알아보도록 하겠습니다. 원인과 해결방법이 에러는 설명 그대로 최대 콜 스택 크기를 초과할 때 발생합니다. 자바스크립트 엔진은 함수를 호출할 때마다 '콜 스택'이라는 곳에 해당 함수 호출을 추가하고, 실행을 완료하면 제거하는데요. 이렇게 하나하나 쌓이는 걸 스택 프레임이라고 합니다. 이 스택 프레임이 너무 많이 쌓여 콜스택이 감당할 수 있는 최대 크기를 넘어서게 되면 문제가 발생합니다. 이 크기는 사용하는 엔진과 환경에 따라 달라질 수 있습니다. 주로 다음과 같은 경우에 발생합니다. 1. 함..

Javascript 2024.11.07

JavaScript에서 Queue 구현하기: 배열 vs 연결 리스트 vs 두 개의 스택

들어가며큐(Queue)는 중요한 자료구조 중 하나로, FIFO(First-In-First-Out) 특성을 가지는데요. 첫 번째로 들어간 요소가 가장 먼저 나옵니다. 이번 포스트에서는 자바스크립트를 사용하여 큐를 구현하는 세 가지 방법에 대해 알아보겠습니다. 1. 배열을 이용한 구현자바스크립트에서 가장 간단하게 큐를 구현하는 방법은 배열(Array)을 사용하는 것입니다.push 메서드로 새 요소를 추가하고, shift 메서드로 첫 번째 요소를 제거합니다. enqueue는 O(1)에 수행됩니다.dequeue는 O(n)에 수행됩니다. 배열에서 첫 번째 요소를 제거하면 모든 요소가 한 칸씩 앞으로 이동해야 하기 때문입니다. 아래는 구현 코드입니다.class Queue { constructor() { th..

Javascript 2023.10.23

JavaScript에서 얕은 복사와 깊은 복사 이해하기

들어가며 JavaScript를 사용하다 보면 객체나 배열과 같은 참조형 데이터를 다루게 되는데요. 참조형 데이터를 복사할 필요가 있을 때, 얕은 복사와 깊은 복사라는 개념이 중요하게 작용합니다. 이번 포스트에서는 JavaScript에서 얕은 복사와 깊은 복사에 대해 알아보겠습니다. 얕은 복사 (Shallow Copy) 얕은 복사는 이름처럼 복사하는 깊이가 얕은데요. 객체를 한 단계까지만 복사할 수 있습니다. 객체를 복사할 때 원시 값의 경우 값을 그대로 복사하지만, 객체의 경우 참조 값, 즉 객체가 저장되어 있는 메모리 주소를 복사하는데요. 그렇기 때문에 얕은 복사를 통해 만들어진 객체를 수정하면 원본 객체에 영향을 미칠 수 있으므로 주의해야 합니다. 몇 가지 예시를 들어볼게요. 1. 배열의 slice ..

Javascript 2023.10.16

JavaScript의 데이터 타입에 대해 알아보자!

이번 시간에는 자바스크립트의 데이터 타입에 대해 알아보도록 하겠습니다. 데이터 타입이란 데이터 타입이란 프로그래밍에서 변수 또는 객체가 가질 수 있는 값의 종류를 말합니다. 예를 들어, Number 타입은 숫자 값을, String 타입은 텍스트 문자열 값을 가질 수 있습니다. 데이터 타입의 필요성 데이터 타입은 다음과 같은 이유로 필요합니다. 1. 값을 저장하고 참조할 때 필요한 메모리 크기를 정해야 합니다. 2. 메모리에서 읽어 들인 2진수 값을 어떻게 해석해야 할지 알아야 합니다. 3. 연산자는 종종 피연산자의 데이터 타입에 따라 다르게 동작합니다. 예를 들어, "+" 연산자는 Number 타입에 대해서는 덧셈을 수행하지만, String 타입에 대해서는 두 문자열을 연결합니다. 데이터 타입의 종류 자..

Javascript 2023.10.09

JavaScript에서 변수란 무엇일까?

들어가며 이번 시간에는 가장 기본이 되는 개념 중 하나인 변수에 대해 간단히 알아보도록 하겠습니다. 변수란 무엇인가 변수는 하나의 값을 저장하는 메모리 공간을 가리키는 이름입니다. 변수는 식별자이기도 한데요. 식별자란 무언가(변수, 함수, 클래스 등)를 식별하기 위한 이름입니다. 우리가 어떤 값을 쓰고자 한다면 먼저 변수를 선언하고 값을 할당해주어야 합니다. 변수 선언이란 변수를 생성하는 것을 말합니다. 값을 저장할 수 있는 크기만큼의 메모리 공간을 확보하고, 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있도록 준비하는 건데요. 이렇게 확보된 공간은 해제되기 전까지 누구도 사용할 수 없도록 보호되어 안전합니다. 자바스크립트 엔진은 변수 선언을 다음과 같은 2단계에 걸쳐 수행합니다. 선언 단계: ..

Javascript 2023.09.25

JavaScript에 대해 알아보자!

들어가며 "웹 개발" 하면 빼놓을 수 없는 자바스크립트! 그럭저럭 사용하고는 있지만 아직 잘 모르겠다고 느끼시진 않나요? 이번 시간에는 알듯 말듯 잘 모르겠는 자바스크립트에게 한 발짝 다가가 보도록 하겠습니다. 자바스크립트란? 자바스크립트는 웹 브라우저에서 동작하는 유일한 프로그래밍 언어입니다. 웹 페이지에 동적인 요소들을 추가하고, 사용자와 상호작용 할 수 있도록 도와줍니다. 예를 들어 다음과 같은 일들을 할 수 있습니다. 버튼을 클릭하면 팝업창이 나타납니다. 어떤 항목을 선택하면 관련 정보가 화면에 표시됩니다. 스크롤 위치나 브라우저 크기 변화 등 사용자의 화면 조작에 따라 다른 내용이 표시됩니다. 폼 데이터를 검증하여 올바르지 않은 입력 시 경고 메시지를 보여줍니다. 이런 자바스크립트 없이 HTML..

Javascript 2023.09.16

JavaScript의 sort는 어떤 정렬 알고리즘을 사용할까?

정렬을 할 때 Array.prototype.sort()를 사용하곤 하는데요. 시간복잡도가 평균 O(n log n)이라는 내용을 보고 문득 이런 궁금증이 생겼습니다. 'sort 메서드는 과연 어떤 정렬 알고리즘을 사용할까?' 지금부터 같이 알아보시죠! 먼저 다음 내용을 알아두셔야 합니다. 자바스크립트 엔진에 따라 sort 메서드 내부적으로 사용되는 정렬 알고리즘이 다르다. 각 엔진 별로 어떤 정렬 알고리즘을 사용하는지 간단하게 알아보겠습니다. 1. V8 (Chrome, Edge, Node.js) 버전 7.0 이전에는 Insertion Sort와 Quick Sort를 사용했습니다. The basis is a Quicksort with an Insertion Sort fall-back for shorter a..

Javascript 2023.09.06