[TIL]21.05.11

박주홍·2021년 5월 11일
0

Today I Learned

목록 보기
14/104

Today I Learned

  • const, 불변성
  • TypeError: Cannot read property 'prototype' of undefined 브라우저에서는 node.js기반의 익스프레스 모듈을 인식하지 못한다?
  • Boiler-plate
  • The MovieDB API
  • git 프로젝트에서 .gitignore에 파일이름을 넣어주면 중요한 정보를 프로젝트에서 볼 수 없도록 할 수 있다.


  • **const, 불변성**

    원시 데이터 타입은 Boolean, Number, String, Null, undefined, Symbol가 있는 데, 만약 원시타입으로 값을 변수에 할당하게 된다면 메모리상의 과정은 대략적으로 이러하다.

    let a = 'name';
    // 'name'의 데이터주소를 a라는 변수에 할당해줌
    console.log(a); 
    // => a는 'name'이란 원시타입의 메모리 주소를 가지고, 그 주소를 참조해 값을
    // console에 출력함

    만약 이렇듯 원시 타입 데이터를 참조하는 변수가 값을 변경하고 싶다면 '새로운 데이터 주소'를 참조한 데이터를 할당받아야한다.

    이러한 특성을 살려 'const'란 키워드를 다음과 같이 사용할 수 있다.

    const a = 'name';
    a = 'newName';	// Error! 

    const로 선언된 변수, 함수, 객체, 배열등등은 새로운 데이터 주소를 할당할 수 없다, 대신 같은 메모리주소에서 값을 변경하는 것은 가능하다.

    원시 타입 데이터는 항상 값을 변경할때, 새로운 데이터주소를 가지므로 값만 변경을 하기 위해선 C,C++에 있는 포인터 문법을 사용하는 수 밖에 없을 것이다.(JS에 있는지 잘 모르겠지만..)

    반면에 참조 타입 데이터인 배열, 객체, 함수는 Heap이란 데이터 영역에 저장되면서 새로운 데이터 주소를 받지않고도 새로운 값, 데이터주소를 Heap에서 동적으로 할당할 수 있다. 하여 참조 타입 데이터가 const를 활용하는 방법은 다음과 같다.

    const obj = {
      name: 'Chaerin',
      city: 'seoul'
    }
    
    // ERROR!
    obj = {				// ERROR!
      	name: 'Juhong',		// 다른 데이터 주소를 가진 객체를 할당했기
     				// 때문
      	city: 'jeju'
    }	
    
    // Dot natation을 사용해서 기존 데이터주소에서 값만 변경하는 코드
    // (Braket notation도 물론 사용가능, 사용시 '' 문자열표기법 주의)
    obj.name = 'Juhong';
    obj['city'] = 'jeju';

    참고
    https://sustainable-dev.tistory.com/156




    회고

    요즘 개인 프로젝트로 리액트랑 노드 사용해서 영화 추천 사이트를 만들면서 공부 중인데,

    TypeError: Cannot read property 'prototype' of undefined

    가 떠서 정말 하루종일 삽질중이다. 처음으로 StackOverFlow에도 질문을 해봤다.

    안된다고 불평하지 말고, 삽질도 체계적으로 하려고 노력하는 하루였다.
    내일은 꼭 무엇이 문제인지 알고 에러를 잡았으면 좋겠다.

    profile
    고통없는 성장은 없다고 할 수 있겠다....

    0개의 댓글