오늘 뭐했냐/개발에 대한 주저리 124

23. 06. 20 자료구조 1. 배열(Array)

내가 배열이란 것을 듣자마자 드는 생각은 똑같은 것들이 연속된 것 이르는 말이다. 그래서 일반적으로 배열은 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료구조라고 하고 이걸 밀집배열이라고 한다. 이렇게 밀집배열이라고 따로 말하는 건 당연히 다른 경우도 있으니까 그렇다. 내가 지금 배우는 자바 스크립트에서는 배열 안에 문자열이나 숫자 뿐 아니라 객체나 같은 배열도 또 들어갈 수 있다. 그래서 앞에 말한 것과 맞지 않다. 즉, 자바스크립트는 배열의 요소를 위한 메모리 공간이 동일한 크기가 아니어도 되고 연속적으로 이어지지 않을 수도 있다. 이를 희소 배열이라고 한다. 이렇게가 찾아본 내용이고 내가 이해한 것은 개인적인 경험이지만 나만 이해하면 되니까 그거에 빗대어 말하면 전에 아동복 물류창고에서..

23. 06.19 이터러블과 이터레이터

이것도 자주 보는 단어인데 자세히 알지는 못하던 용어였다 그래서 이번에 찾아봤다. 이터러블(iterable) : 사전적 의미로는 반복될 수 있는 이라고 하고 Symbol.iterator 라는 프로퍼티를 가지고 이터레이터(iterator) 객체를 반환하는 객체라고 한다. 이터레이터(iterator) : 사전적 의미로는 반복자, next() 메서드를 가지고 순회할 수 있어야하며 이 때 메서드의 반환값은 이런 식으로 나와야한다. { value: value, done: boolean } 어렵다 어려워 그래서 만든 예제를 따라서 만들고 나름 해석을 해보고 건드려봤다 let range = { // 일반 객체 from: 1, to: 5 }; range[Symbol.iterator] = function () { // ..

23. 06. 18 ES는 뭘까

ES는 뭘까하고 찾아봤다 ECMA인터네셔널이라는 곳이 있는데 정보통신에 대한 표준을 제정하는 비영리 표준화 기구이고 거기서 낸 규격 중 하나에 ECMA-262 라는 게 있다. 이 ECMA-262 기술 규격에 의해 정의된 스크립트 언어의 기준이 ECMAScript인데 이게 ES이다 참고로 스크립트 언어란 독립된 시스템에서 작동하도록 특별히 설계된 프로그래밍 언어이다. ES에 맞춰서 만들어졌으면서 가장 많이 사용하는 언어가 내가 배우는 JavaScript이며, 이는 원래 웹환경에서만 사용이 가능했지만 이 웹을 벗어나도 사용할 수 있게 해주는게 Node.js이다 당연히 이렇게 하면 머리에 안들어오니까 간단히 ECMA인터네셔널 > ECMA-262 > ES > JavaScript > Node.js 정도로 이해하고..

23.06.17 인스턴스가 뭘까

공부를 하려고 처음 책을 샀을 때부터 인스턴스란 뭘까하면서 정의 내리지 못했다 항상 찾아보면 나오는 붕어빵 혹은 자동차 등등에 빗대어 외우는 것만이 전부였는데 고민을 하던 나는 이것을 게임에의 경험을 생각하며 이해했다 게임을 좋아하고 오래 했던 나에게 인스턴스는 너무나 익숙한 단어이다 인스턴스 던전 흔히 인던이라 부르는 게임에서 자주 등장하는 용어가 있으니까 그 때 인던을 난 뭐라고 생각했을까 하나씩 공간이 주어진 던전, 다 같이 들어가지 못하고 같은 파티끼리만 들어가서 클리어하고 나오는 곳, 각각의 공간 그래서 인스턴스 던전에서 던전을 뺀 인스턴스도 각각의 무엇인가로 생각하려고 한다 인던은 갑자기 허공에 있지 않다 특정 지역을 가서 그 지역에 있는 인던을 들어가는 경우가 많다 또한 들어가기 전에 지형이..

23.06.15 콜백함수

콜백함수는 매개변수로 전달된 함수라고만 알고 있었는데 오늘 강의를 들으면서 내가 이해하기 쉽게 해석해보면 내 일을 다른 애한테 넘기는것이다, 그래서 제어권이 그 다른 함수에게 넘어간 것이며 내가 넘긴 일이 콜백함수가 되는 것이다. 이 때 제어권이란 호출 시점과 인자의 순서도 넘어간다고 하는데 이것도 역시 나는 다른 사람에게 일을 맞겼으니까 그 사람이 언제 처리할지 그리고 뭘 어떻게 사용할지도 정하는 것이라고 받아들였다 그리고 this에 대한 것도 일반적으로는 전역이지만 자체적으로 this 바인딩을 설정해 놓은 경우도 있으며 this를 내가 바인딩 할 수도 있다고 했으니 내가 일을 넘겨서 신경을 안쓰면 걔가 마음대로 하는거고 내가 그거만 좀 이렇게 신경써 달라고 하면 bind()로 this를 바인딩하는 것..

this와 this바인딩

솔직히 this가 뭐냐고 물어보면 아직 모르겠다 상황에 따라 this가 달라져서 나는 어디서의 this냐고 명확하게 하고 답을 할 수 있을 것 같아 그러면 this는 상황마다 어떻게 다른지 보자 함수와 메서드의 차이에서 메서드는 객체의 프로퍼티인 함수라고 알고 있었는데 더 쉽게 알게 되었다 독립성의 차이라고 하는데 내가 이해한 것은 함수는 혼자 뛰쳐나갈 수 있고 메서드는 누가 불러줘야 나간다 이렇게 이해했다 따라서 함수의 this는 전역이고 메서드의 this는 매서드를 부른 객체이다 그럼 콜백함수는 이것도 전역이다 하지만 무조건은 아니다 대부분이다 즉시실행함수에서는 전역이다 아까 말한 것처럼 얘도 혼자 뛰쳐나가니까 가장 많이 쓰이는 것 같은 생성자 함수에서의 this는 생성자 함수가 생성할 인스턴스, 쉽..

실행 컨텍스트 (스코프, 호이스팅, 렉시컬 환경)

실행콘텍스트 : 실행할 코드에 제공할 환경 정보들을 모아놓은 객체 JS에선 스택을 사용한다 콜스택(call stack): 스택의 한 종류, 가장 위에 쌓여있는 콘텍스트와 관련된 코드를 실행하는 방법으로 코드의 환경 및 순서를 보장 // ---- 1번 var a = 1; function outer() { function inner() { console.log(a); //undefined var a = 3; } inner(); // ---- 2번 console.log(a); // 1 } outer(); // ---- 3번 console.log(a); // 1 코드실행 → 전역(in) → 전역(중단) + outer(in) → outer(중단) + inner(in) → inner(out) + outer(재개) ..

null과 undefined

둘 다 없음을 나타내는 값인데 뭐가 다를까 undefined : 일반적으로는 자바스크립트 엔진에서 값이 있어야 할 것 같은데 없는 경우, 자동으로 부여, 직접 지정할 수도 있는데 엔진이 그런건지 사용자가 그런건지 확인할 수 없기에 '없다'라는 것을 명시적으로 표현할 땐 사용을 하지 말자 변수에 값이 지정되지 않은 경우, 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때 .이나 []로 접근하려 할 때, 해당 데이터가 존재하지 않는 경우 return 문이 없거나 호출되지 않는 함수의 실행 결과 null : ‘없다’를 명시적으로 표현할 때 사용한다 console.log(typeof(null)) // object 이건 유명한 JS 자체 버그다 그리고 JS에서는 대소문자를 구분해 null, Null,..

깊은 복사와 얕은 복사

기본형의 경우 값을 복사한 다음 다른 값을 재할당할 경우에 그 식별자가 가리키는 주소값만 변경되어 문제가 없지만 참조형은 다르다 obj를 위한 메모리 공간이 따로 존재하고 만약 obj = obj2를 실행한다면 obj와 obj2는 같은 공간을 공유하게 된다 따라서 obj2의 속성값을 바꿀 경우 obj에 영향을 줄 수 있다 // user 객체를 생성 var user = { name: 'mjm', age: 25, }; // 이름을 변경하는 함수, 'changeAge'을 정의 // 입력값 : 변경대상 user 객체, 변경하고자 하는 이름 // 출력값 : 새로운 user 객체 // 특징 : 객체의 프로퍼티(속성)에 접근해서 age를 변경했네요! -> 가변 var changeAge = function (user, ..

데이터 타입과 메모리

이터 타입은 크게 두 가지로 나뉜다 기본형과 참조형, 이 둘의 구분 기준은? => 값의 저장 방식과 불면성 여부 -값의 저장 방식 기본형 : 값이 담긴 주소값을 바로 복제 예) let num = 10 인 경우 10이란 값이 담긴 메모리의 주소값을 num에 저장 참조형 : 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제 let arr = [ 1, 2 ,3] [1이 들어있는 주소값, 2가 들어있는 주소값, 3이 들어있는 주소값] 이 묶음을 가르키는 주소값이 arr에 저장된다 => arr은 주소값의 묶음을 가리키는 것이며 값 자체의 주소값을 가지진 않는다 => arr안에 1을 가져오기 위해선 arr이 가진 주소값으로 가서 1을 가리키는 주소값을 찾아야한다 -불변성 여부 기본형 : 불변성을 띔 참조..