JavaScript

JavaScript에서 Number의 큰 수 처리 한계, BigInt로 해결

백준 홀수일까 짝수일까(5988번) 라는 문제를 푸는데… 계속 ‘틀렸습니다’가 뜨는것이다. 이는 간단히 홀짝만 판단하면 되는 문제였다.분명히 올바르게 짠 코드 같은데, 대체 뭐가 문제였을까? 먼저 문제를 간단히 설명하자면 다음과 같다. 문제 설명요약N개의 정수가 주어질 때, 각각 홀수인지 짝수인지를 출력하는 프로그램을 작성하는 것이다. 입력첫 번째 줄: 숫자의 개수 N(1 두 번째 줄부터 N+1번째 줄: 정수 K (1 2 1024 593출력N개의 줄에 걸쳐 한 줄씩 정수 K가 홀수라면 'odd'를, 짝수라면 'even'을 출력.even odd 내가 처음에 작성한 코드아래는 처음 작성한 코드다. 문제 조건에 맞춰 홀짝 여부를 판단했다.let input = require("fs").readFileSync("..

JavaScript 2024.11.28

for문 내에 변수를 선언해도 괜찮을까?

도입JavaScript에서 변수를 선언할 때 종종 마주치는 고민이 있다.'for문 내부에 변수를 선언해도 될까? 아니면 for문 밖에서 선언하는 것이 더 좋을까?' 이런 고민이 생긴 이유는 let과 const는 var과 달리 재선언이 불가능하기 때문이다.또한 'for문 내부에서 변수를 선언하면 반복이 될 때마다 선언되니 메모리적으로 비효율적이지 않을까? 혹시 문제가 발생하지 않을까?'라는 생각도 들었다(아래 코드의 2번 방식). 하지만 실제로 사용해보면 아무런 문제가 발생하지 않는다. 그래서 그냥 넘어갔던 문제인데, 이러한 고민이 들 때마다 찝찝한 마음이 들어서 이번 기회에 확실히 정리하고자 한다. // 1. for 문 밖에서 변수를 미리 선언하고 재할당하는 방식let ny, nx;for (let i =..

JavaScript 2024.11.24

데이터 타입은 왜 필요한가? 동적 타입 언어의 특징도 알아보자

데이터 타입의 필요성1. 데이터 타입에 의한 메모리 공간의 확보와 참조값은 메모리에 저장하고 참조할 수 있어야 한다. 메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기(메모리 셀의 개수(byte 수))를 알고 결정해야 한다. js엔진은 데이터 타입(값의 종류)에 따라 정해진 크기의 메모리 공간을 확보한다 확보되는 메모리 공간의 크기는 js 엔진 제조사에 의해 다를 수 있다. ECMAScript에는 숫자 타입은 배정밀도 64bit(8byte) 부동소수점 형식을 사용하다고 명시되어 있다.var score = 100;위 예제에서 js 엔진은 리터럴 100을 숫자 타입의 값으로 해석하고 이를 저장하기 위해 8byte의 메모리 공간을 확보한 뒤 2진수로 저장한다.💡 심벌 테이블컴파일러 또는 인터프리..

JavaScript 2024.08.02

JavaScript 원시 타입 종류 7가지

데이터 타입데이터 타입은 값의 종류를 말한다. javascript에서 원시 타입은 7개이며, 그 외에는 모두 객체 타입이다. javascript는 객체 기반 언어이므로 거의 모든 것이 객체로 이루어져 있다. 이번 장에서는 원시 타입에 대해 다루고, 객체 타입은 추후 다루고자 한다. js 엔진은 타입을 구별해서 값을 취급한다. 따라서 값이 같더라도 타입에 따라 해석하는 방식이 다르다.ex) 0100 0001 - 숫자로 해석하면 65, 문자로 해석하면 ‘A’ 원시 타입 1 - 숫자 타입(number)C나 java의 경우, 정수와 실수를 구분해서 int, long, float 등 다양한 숫자 타입을 제공한다. 하지만 javascript에서 숫자는 실수 타입만 존재한다. 정수로 표기해도 사실은 실수다.// 숫자..

JavaScript 2024.08.02

변수는 왜 필요한가?, 어떻게 선언되고 할당되는지도 알아보자 (feat. 메모리)

메모리변수에 대해 알기 전, 먼저 메모리에 대해 간단히 짚고 넘어가겠다.컴퓨터는 CPU를 사용해 연산하고, 메모리를 사용해 데이터를 기억한다. 메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체다. 메모리 셀 하나는 1Byte이며, 컴퓨터는 메모리 셀 단위로 데이터를 저장하거나 읽어들인다. 각 셀은 고유의 메모리 주소를 갖는다.컴퓨터는 모든 데이터를 2진수로 처리한다(위 그림은 편의상 10진수로 표기했다). 숫자 값 10, 20은 임의의 메모리 주소에 저장되고 CPU는 이 값을 읽어 들여 연산을 수행한다. 연산 결과인 30도 메모리의 임의의 주소에 저장된다. 자, 이제 연산이 끝났고 나는 연산 결과인 숫자 30을 이용해 어떠한 작업을 하고 싶다.하지만, 연산 결과가 메모리에 저장되었지만 재사용을 할 수..

JavaScript 2024.07.31

스코프 체인 - 함수에서 어떤 값에 접근이 가능/불가능한가 따져보기

스코프 (체인)은 함수에서 어떤 값에 접근이 가능/불가능 한가 따져볼 때 사용되는 개념이다.이때 판별하는 범위는 블록 단위인데, 블록은 중괄호로 감싸여진 범위다. const x = "x";function c() { const y = "y"; console.log("c"); function b() { const z = "z"; console.log("b"); c(); }}function a() { const x = "x"; console.log("a"); b(); // b를 선언 안했다는 ERROR}a(); c();위 코드를 실행하면 함수 a 안에 있는 b를 호출할 때 b를 선언하지 않았다는 에러가 발생한다.b가 a의 스코..

JavaScript 2023.02.03

호출 스택 분석하는 법

호출과 선언 명확히 구분할 줄 알아야 하고, 아래 코드를 실행 하기 전에 어떤 결과가 나오는 지 알 수 있어야 한다.const x = "x";function c() { // 선언 const y = "y"; console.log("c"); // 호출 // debugger; // 호출 스택 보는 법}function a() { // 선언 const x = "x"; console.log("a"); // 호출 function b() { // 선언 const z = "z"; console.log("b"); // 호출 c(); // 호출 } b(); // 호출}a(); // 호출 - a, b, cc(); // 호출 - c호출 스택은 호출할 때만 쓰이는 스택이다.함수를 호출할 때마다 스택이 밑에서부터 쌓이..

JavaScript 2023.02.02

함수 호출한 것을 보면, 그 자리에 return한 값을 대체해보자.

함수 선언 방법 중에는 다음과 같이 화살표 함수 방식이 있다.중괄호를 생략하면 return이 포함되어 있다.주의해야 할 점은, 객체를 return할 때는 꼭 소괄호로 감싸줘야 한다. js 엔진은 중괄호를 return이 아닌 함수의 몸체로 보기 때문이다.// 아래 세 개는 같은 표현const add = (a,b) => { return a + b };const add = (a,b) => a+b;const add = (a,b) => (a+b);// 객체를 리턴할 땐 꼭 소괄호로 감싸줘야 함const add = (a,b) => ({a + b}) 함수를 호출할 때, 매개변수에 함수를 넣는다면 주의해야 할 점이 있다. 함수이름 뒤에 () 를 붙으면 함수 호출이 된다는 것이다.const add = (a,b) =>..

JavaScript 2023.01.31