기본기가 부족하다면/자바스크립트(8)
-
원시값(Primitive Type)
원시값이라는 단어조차 낯설다. 공부를 하다보면 용어, 단어 배우기도 참 어려운 것같은 요즘이다. MDN 에서는 다음과 같이 설명하고 있다. JavaScript에서 원시 값(primitive, 또는 원시 자료형)이란 객체가 아니면서 메서드도 가지지 않는 데이터입니다. 원시 값에는 string, number (en-US), bigint (en-US), boolean, undefined, symbol, 그리고 null이 존재합니다. 원시값은 더 이상 단순화시킬 수 없기 때문에 원시적이라 하여 원시값으로 불린다고 한다. 원시값을 포스팅하는 가장 큰 이유는 메모리 할당과 관련이 있기 때문이다. 메모리 관리에 대해 아는 것이 원시값을 이해하는 것에 도움이 될 것이다. 이전 메모리 관리의 글의 4-1을 보면 라고 설..
2022.12.15 -
[예외처리] 던질게 받아라!
사전적 정의 : 일반 규칙이나 통례에서 벗어남 개발적 측면에서는 어떤 언어든 라이브러리나 프레임워크가 됐든 정해놓은 규칙에 어긋나게 사용하려고 하면 발생하는 것을 예외가 발생했다고 하고, 이 때 '그냥 에러가 발생하게 둘 수 없지~' 하면서 '예외가 발생하면 이렇게 행동할 것!' 이라고 규정해두는 것이 바로 예외처리이다. MDN에서는 아래와 같이 설명하고 있다. throw 문을 사용하면 예외를 던질 수 있고, 던진 예외는 try...catch 문으로 처리할 수 있습니다. Throw (던질 게 받아라~) throw 'Error2'; // String throw 42; // Number throw true; // Boolean throw { toString: function () { return '저는 객체..
2022.12.14 -
[예외처리] Promise, async & await
Promise의 예외처리 function promFuc() { return new Promise((res, rej) => { setTimeout(() => { rej("error"); }, 1000) }) } 위의 함수를 사용하여 예외처리 할 수 있는 방법을 알아보자. 1. catch promFuc() .catch(e => { console.log("1번"); }) .catch(e => { console.log("2번"); }) 이렇게 작성할 경우, 1초있다가 1번이 실행되고, 또 1초있다가 2번이 실행될 것 같지만, 실상은 그렇지 않다. (함정주의) 왜냐하면 첫 번째 catch는 함수의 promise 를 반환받게 되는데, 그 안에 예외가 발생했기 때문에 실행될 수 있다. 그럼 두 번째 catch도 동일..
2022.12.14 -
가비지 컬렉터
가비지 컬렉터은 자동 메모리 관리 방법이다. 자바스크립트를 느슨(?)하게 생각할 경우, '훌륭하다. 귀찮지 않아서 좋다. 알아서 해주니까 신경안써도 되겠구나' 라고 생각할 수 있으나 그런 방심을 금물...(시간이 비용인 세상이다) 이전 글에서 가비지 컬렉터가 무슨일을 하는지 알아보았다. 그러면 가비지 컬렉터는 언제, 어떤 방식으로 일을 할까? 언제라는 질문에 대한 답은 '없다' 이다. 자동으로 동작하기 때문에 강제로 멈추거나 실행을 시키는 것도 불가능하다.(..ㅠ) 자바스크립트 엔진 내에서 끊임없이 동작합니다. 가비지 컬렉터는 모든 객체를 모니터링하고, 도달할 수 없는 객체는 삭제합니다. 그럼 어떤 방식으로 일하는지 알아볼 필요가 있다. 1. Reference-counting ( 참조 숫자세기 ) 아무것..
2022.12.08 -
메모리 관리
MDN에 의하면 아래와 같이 설명하고 있다. 메모리 생존주기는 프로그래밍 언어와 관계없이 비슷합니다. 1. 필요할 때 할당합니다. 2. 할당된 메모리를 사용합니다. (읽기, 쓰기) 3. 더 이상 필요하지 않으면 해제합니다. 1번과 3번의 경우는 고수준의 언어에서는 암묵적으로 작동을 하기 때문) 정확하지는 않지만 어느정도는 맞는 말이다. 여기서 드는 의문점, 그렇다면 자바스크립트는 어떤 경우에 더 이상 메모리가 필요하지 않다고 생각하는걸까? 자바스크립트는 변수가 선언될 때, 자동으로 메로리를 할당한다. (메모리를 할당할 때는 변수, 함수로 나뉘고 메모리 공간도 다르지만, 이건 다른 글에서 다뤄보기로 한다.) 가령 let a = 1; 이라는 변수를 선언하고, console.log(a) 로 사용한다고 하면 1..
2022.12.08 -
실행 컨텍스트 (Execution Context)
실행 컨텍스트(Execution Context)는 scope, hoisting, this, function, closure 등의 원리를 담고 있기 때문에, 이 부분을 공부하지 않고 자바스크립트를 접근한다면 끊임없는 질문에 갇힐 수 있다. 개발을 처음 시작할 때부터 지금까지, 오래된 자바스크립트 코드들이 나를 괴롭히고 있다. 원인은 동기적인 실행을 기본으로 하는 자바스크립트에 비동기라는 기능을 중간에 끼워넣으면서 발생하는 수많은 문제들이다. 이럴 때 문제가 되는 부분을 해결가능한것은 실행 컨텍스트를 제대로 이해하고 코드에 접근하는 것이다. 자바스크립트는 크게 전역 코드, 함수 코드로 이루어져있다. (Eval 코드도 있지만 간결함을 위해 제외하겠다.) 전역 코드가 실행되면 전역 컨텍스트를 만들고, 함수 코드..
2022.12.08