TIL#3

Yea Myeong Kim·2021년 11월 24일
0

2021/11/24

primitive type (원시 타입, 기본형) / reference type (참조 타입, 참조형)

  1. primitive type

    • number, string, boolean과 같은 고정된 저장 공간을 차지하는 데이터
    • let a = 'abc' → 변수 선언과 할당을 한 문장으로 표현.
    • a라는 이름을 가진 주소를 검색해서 그곳에 문자열 'abc'를 할당하면 될 것 같지만, → 실제로는 해당 위치에 'abc'를 직접 저장하지는 않는다.
    • 데이터를 저장하기 위한 별도의 메모리 공간을 다시 확보 → 'abc' 저장, 그 주소를 변수 영역에 저장한다.

    이유 : 데이터 변환을 자유롭게 할 수 있게 함과 동시에, 메모리를 더욱 효율적으로 관리하기 위함.

    미리 확보한 공간 내에서만 데이터 변환을 할 수 있다면, 변환한 데이터를 다시 저장하기 위해서 '확보된 공간을 변환된 데이터 크기에 맞게 늘리는 작업'이 선행되야 하는데, 만약 중간에 있는 데이터였다면, 해당 공간보다 뒤에 저장된 데이터들을 전부 뒤로 옮기고, 이동시킨 주소를 각 식별자에 다시 연결하는 번거로운 작업을 해야함 → 연산이 많아짐(비효율)

    결론 : 효율적으로 문자열 데이터의 변환을 처리하려면, 변수와 데이터를 별도의 공간에 나누어 저장하는 것이 최적.

    심플하게, 원시 자료형의 보관함인 변수에는 하나의 원시 자료형만 담을 수 있습니다. 라고 기억하자.

  2. reference type

    • 대표적으로 array, object, function.
    • 여러 데이터가 담긴 곳(heap, 동적으로 변함)의 주소가 변수에 저장되어 있음.

scope (스코프)

  • 변수 접근 규칙에 따른 유효 범위. 중괄호(block scope) 혹은 함수(function scope)에 의해 나뉘어짐.
    • 바깥쪽 스코프에서 선언한 변수는 안쪽에서 사용 가능.
    • 안쪽 스코프에서 선언한 변수는 바깥쪽 스코프에서 사용할 수 없다.
    • 화살표 함수 → 함수 스코프가 아닌 블록 스코프
  • 중첩이 가능하다.
    • 가장 바깥쪽 스코프는 Global scope(전역 스코프)라고 부름. 여기서 선언한 변수 → 전역 변수
    • 전역 스코프가 아닌 것들 → Local scope(지역 스코프).
    • 지역 변수는 전역 변수보다 높은 우선순위를 가진다.
  • 블록 스코프 안에서 선언된 변수는 블록 범위를 벗어나는 즉시 사용 불가(ReferenceError)
  • 'use strict' → 선언 없는 변수 할당 같은 경우도 에러로 판단하게 함. (엄격모드)

var, let, const 간단비교

varletconst
유효 범위함수 스코프블록, 함수 스코프블록, 함수 스코프
값 재할당가능가능불가능
재선언가능불가능불가능

closure (클로저)

  • MDN def : 함수와 함수가 선언된 어휘적(lexical) 환경의 조합을 말한다. 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다.

  • 클로저의 핵심은 스코프를 이용해서, 변수의 접근 범위를 닫는(closure; 폐쇄) 데에 있음.

  • 심플한 클로저 함수의 정의 : "외부함수의 변수에 접근할 수 있는 내부함수"

    • 특징1 : 함수를 리턴하는 함수, 이 형태가 클로저의 형태를 만듬.
    • 특징2 : 내부 함수는 외부 함수에 선언된 변수에 접근 가능.
    • 일반적인 함수는, 함수 실행이 끝나고 나면 함수 내부의 변수를 사용할 수 없다. 이와 다르게, 클로저는 외부 함수의 실행이 끝나더라도, 외부 함수 내 변수가 메모리 상에 저장됨.
  • 함수 내부에 선언된 변수를 외부 스코프에서 값을 바꿀 수 없음 → 정보의 접근 제한, 캡슐화

  • 클로저를 통해 불필요한 전역 변수 사용을 줄이고, 스코프를 이용해 값을 보다 안전하게 다룰 수 있다.

0개의 댓글

관련 채용 정보