230120 코어 자바 스크립트 / 코딩테스트 / 강준규 멘토님

신동윤·2023년 1월 21일
0

데이터 타입

모든 data는 bite 단위의 식별자인 메모리 주소값을 통해서 서로 구분이 된다.

값을 바로 변수에 대입하지 않는 이유(무조건 새로 만드는 이유)
1. 자유로운 데이터 변환 (ex. 이미 입력한 문자열이 길어진다면?)
2. 메모리의 효율적 관리 (ex. 똑같은 데이터를 여러번 저장해야 한다면?)

가비지컬렉팅(garbage colletong:GC) 변수가 바뀜으로서 더이상 사용되지 않는 곳을 처리

기본형 데이터와 참조형 데이터의 변수 할당과정 차이 : 객체의 변수(프로퍼티) 영역의 별도 존재 여부

불변성 : 데이터영역의 값(메모리)이 바뀌는지, 변수의 값(주소) 이야기가 아님

기본형 데이터가 불변인 이유 : 값이 바뀌면 데이터가 새로 생성되어 '변수영역' 값(주소)이 바뀐다.

참조형 데이터가 가변형인 이유 : 변수영역이 아닌 '데이터영역'(그림에서 변수영역을 제외한 밑쪽으로 생각하면 편함)이 바뀜 (객체의 참조영역)

변수복사 비교= obj1를 복제한 obj2/ obj2.c의 값을 바꿔도 obj1 === obj2 //true
obj2.c를 바꾸고 싶었는데 obj1도 바뀜 ->> 가변임을 유의해야함, 불변하도록 만들어야함

불변하도록 변경 ->> 복사할곳의 value에 접근할 때 객체의 프로퍼티로 접근하는것이 아니라, 객체 자체의 값을 바꿔서 할당해줘보자. obj1를 위한 공간이 아닌 obj2를 위한 공간을 설정해줄것 같은 값이라도 아예 다른곳에서 값을 설정한다고 생각하자. 공간이 분리되었다고.

얕은복사는 obj를 복사하는게 아니라, obj[prop]를 for구문의 반복을 통해 가져오는것. 기능도 똑같이 들어가고 하드코딩이 아니라 가볍다. 바로 아래 단계의 값만 복사. 1depth는 생성되지만 2depth는 여전히 참조가 된다. (중첩된 객체(객체안에 객체)의 경우 참조형 데이터가 저장된 프로퍼티를 복사할 때 주소값만 복사.)

깊은복사는 1depth만큼 진행되는 얕은 복사를 프로퍼티 안에서 한번더 1depth만큼 진행해준다. 재귀형

실행 컨테스트

실행 컨텍스트는 '실행할 코드에 제공할 환경 정보'들을 모아놓은 객체입니다.
자바스크립트는 어떤 실행 컨텍스트가 활성화되는 시점에
선언된 변수를 위로 끌어올리고(hoisting) 외부 환경 정보를 구성하고 this값을 설정한다.
콜 스택(call stack)
1. 실행 컨텍스트를 콜 스택에 쌓는다. 2. 가장 위에 쌓여있는 컨텍스트와 관련된 코드를 실행하는 방법으로 코드의 환경 및 순서를 보장 3. 전역공간(스크립트가 실행되는 순간 자동부여), eval() 함수, 함수

실행컨텍스트에 담기는 정보

  1. VariableEnvironment(VE)
    -현재 컨텍스트 내의 식별자 정보
    -외부 환경 정보
    -선언 시점 LexicalEnvironment의 snapshot
  2. LexicalEnvironment(LE)
    -VariableEnvironment와 동일하나 변경사항이 실시간으로 반영
  3. ThisBinding
    -this 식별자가 바라봐야할 객체

VE,LE의 구성요소 environmentRecord(=record), outerEnvironmentReference(=outer)

environmentRecord(=record)
-현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장(수집)
-수집 대상 정보 : 함수에 지정된 매개변수 식별자, 함수 자체, var로 선언된 변수 식별자 등
-컨텍스트 내부를 처음부터 끝까지 순서대로 훑어가며 수집

호이스팅(hoisting)
변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮기는

console.log(num); // 호이스팅한 var 선언으로 인해 undefined 출력
var num; // 선언
num = 6; // 초기화

변수정보 수집을 모두 마쳤더라도 아직 실행 컨텍스트가 관여할 코드는 실행 전의 상태임(JS 엔진은 코드 실행 전 이미 모든 변수정보를 알고 있는 것)
매개변수 식별자, var로 선언된 변수 식별자는 변수명이 올라감
함수선언문은 함수 자체가 올라감, 함수표현식은 변수명만 올라감

outerEnvironmentReference(=outer)
스코프 : 식별자에 대한 유효범위
스코프 체인 : 함수가 중첩 상태일 때 하위함수에서 상위함수의 스코프와 전역스코프까지 참조할 수 있다. 이것을 스코프 체인을 통해 탐색한다.
스코프 체인이 가능토록 하는것(외부 환경의 참조정보)

코딩테스트

//120892

function solution(cipher, code) {
    let screte = '';
    
    for (let i = 0; i < cipher.length; i++) {
        
        if (cipher.length() % (code * i) == 0) {
            screte += String(cipher[i]);
        } 
        
    } return screte;

}

이렇게 찌르면 이렇게 나오는 코딩방식을 지금 하고있다. (지금은 좋음)
장점 :
이렇게 해도 아직 몰라도 충분히 코딩을 해볼 수 있다.

기본이랑 다 다져놓고 하려하면 너무 하염없다.
코딩을 하면서 모르는부분을 찾아가면서 하는것이 낫다. 이런사람들이 잘함
문법만 기계적으로 외워도 일단은 할 수 있다(할 수 있다는게 중요)
해보다가 어떻게 되는지를 알게되고 그걸 알아가는게 기계적으로 코딩하는 단계가 지금

이론과 내부구현은 왜 배워야하는가?
차후적으로 배워야한다면 물론 좋겠지만,

알아서 검색해서 찾아보면서 하라고는 하지만, 우리는 검색해도 잘 이해못함
가이드라인 정도, 기본정도를 챙겨가기를 바랐다.
찾아나가는 방법을 알려주려했음 스스로 찾아가는 싸이클
맞아.. 매니저님들은 같이 찾아볼까요 라고 하셨음.

설날을 내리 놀지말고 복습을 꼭하자.

나중에는 타입스크립트를 사용하게될것이다.
컴파일시 에러가 발생하는게 훨씬 좋을 수도 있다.

0개의 댓글