누코(nuuco)
오늘도 코딩
누코(nuuco)
전체 방문자
오늘
어제
  • 분류 전체보기
    • TIL
    • 에러 노트
    • 자료구조 & 알고리즘
    • 프로그래밍
    • 프로젝트
    • 한컷코딩
    • 글

공지사항

  • 🚚 (전)노션 ➡️ (현)티스토리로 블로그 이사 오는 중(⋯

최근 글

인기 글

최근 댓글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
누코(nuuco)
TIL

[TIL] #12. 원시자료형&참조 자료형 그리고 스코프

TIL

[TIL] #12. 원시자료형&참조 자료형 그리고 스코프

2022. 12. 6. 02:29

2022.5.12. (목)

1. 오늘의 소감

  • 원시자료형과 참조 자료형은 쉽다고 생각했다. 근데 또 막상 실제 메모리 영역의 동작 방식을 생각하면 머리가 복잡해진달까...? 가장 핵심이 되는 명제는 “변수에 원시자료형을 할당하면 ‘값'이 담기고, 참조자료형을 할당하면 ‘주소’가 담긴다”이다. 하지만 또 정확히 말하자면 원시자료형도 메모리 영역에 저장된 후 그 주소가 변수에 저장되는 것은 맞다.... 다만 변수에 재할당을 하면 또 새로운 데이터를 메모리에 저장하고 그 주소를 새로 연결시키니까, 기존 메모리 주소와는 상관이 없어지는 것일뿐.... 내가 말하고 있지만 그림으로 보지 않으면 헷갈릴 수 밖에 없는 파트였다.

2. 학습한 키워드

  • 원시 자료형 = 원시 타입, 참조 자료형 = 참조 타입, 값, 주소(reference), 원시 자료형 7가지 - number, string, symbole, bigint, undefined, boolean, (null), 참조 자료형 1가지 - object(배열, 객체, 함수수...), heap
  • 스코프, 전역 스코프, 지역 스코프, 전역 변수, 지역 변수, 변수의 접근 규칙, 블록 스코프, 함수 스코프, 화살표 함수는 블록 스코프, var, let, const, window 객체, strict 모드

3. 키워드를 바탕으로 학습 내용 설명해보기

  • 자바스크립트는 데이터를 저장하는 방식에 따라 크게 두 가지 자료형으로 나뉜다.
  • 원시 자료형(primitive type, 원시 타입) 과 참조 자료형(reference type, 참조 타입)이다.
  • 원시 자료형은 총 7가지 이다. number, string, symbole, bigint, undefined, boolean, (null)
  • 참조 자료형은 1가지 이다. object(배열, 객체, 함수 도 object 이다.)
  • 원시 자료형의 값은 변경 불가능하다. 변수에 다른 값을 재할당할 수 있을 뿐.
  • 변수에 원시 자료형을 할당하면 ‘값'이 담긴다.
  • 변수에 참조 자료형을 할당하면 ‘주소'가 담긴다.
  • 값이 담기느냐, 주소가 담기느냐에 따라 변수를 다른 변수에 복사했을 때 원본에 끼치는 영향이 달라진다.
  • 값이 담기는 경우(원시 타입 할당), 변수를 복사한 변수를 변형해도(재할당해도) 원본 변수의 값이 바뀌지 않는다.
  • 주소가 담기는 경우(참조 타입 할당), 변수를 복사한 변수를 변형하면 원본 변수의 값이 바뀐다.
  • 원시 타입은 동일한 크기의 메모리 하나에 하나의 값만 저장된다.
  • 참조 타입은 메모리에 주소값만 저장되고, 그 주소는 특수한 저장 공간인 heap에 연결되어있다. 해당 주소의 heap 에는 다른 값들의 주소가 줄줄이 연결되어 있는 형태이다.
  • 참조 타입에는 다량의 데이터를 저장할 수 있다. 저장공간이 유동적이기 때문이다. 따라서 동적인 크기의 데이터를 저장해야한다면 참조 타입이 유리하다.
  • 참조 타입끼리는 아무리 형태가 같아도 ‘주소가 다른 두 개의 객체'로 판단하기 때문에 동치 비교에서 false 가 나온다.
[] === []  //false
{} === {}  //false
  • 스코프란? 변수의 (접근 규칙에 따른) 유효 범위이다.
  • 변수의 접근 규칙 3가지
    • 안쪽 스코프에서 바깥 스코프의 변수에는 접근할 수 있으나, 반대는 불가하다.
    • 스코프는 중첩이 가능하다.
    • 지역 변수는 자신의 스코프 안에서, 전역 변수보다 높은 우선순위를 가진다.
  • 변수에 접근할 수 없는 경우 ReferenceError 가 난다.
  • 최상위 스코프를 전역 스코프, 그 외의 스코프를 지역 스코프라고 한다.
  • 전역 스코프에 있는 변수를 전역변수, 지역 스코프에 있는 변수를 지역 변수라고 한다.
  • 블록{} 으로 감싸진 영역을 블록 스코프라하고, 함수로 감싸진 영역을 함수 스코프라고 한다.
  • 블록 스코프에 함수 스코프가 속한다. 함수 스코프로 블록{}으로 감싸져 있으니까!
  • 화살표 함수는 블록 스코프로 취급된다.
  • var 는 함수 스코프이며 블록 스코프는 무시한다. 단, 화살표 함수의 블록은 무시하지 않는다.
  • var 는 재선언이 가능하며 오류를 발생시키지 않는다. 재할당도 가능하다.
  • let 은 블록 스코프이며 재할당은 가능하나, 재선언시 오류를 발생시킨다.
  • const는 블록 스코프이며 재선언과 재할당 모두 불가하다.
  • const 는 변하지 않는 상수 변수로 값을 재할당할 필요가 없는 경우에 사용한다.
  • const 의 활용은 안정적인 프로그램에 기여할 수 있다.
  • 변수 선언 시 주의할 점 4가지
    • window 객체 고려하기
    • 전역 변수 최소화하기
    • let, const 를 이용하기 (var 말고)
    • 선언 없는 변수 할당 금지
  • window 객체는 브라우저에만 존재하며, 브라우저 창을 의미하는 객체이다.
  • 그러난 브라우저 창과 관계없이 전역 영역을 담고있다.
  • 즉, 전역으로 선언된 변수나 함수는 window 객체에 속한다.
  • 전역 변수는 다른 함수나 로직에 의해 의도되지않은 변경이 일어날 수 있다. 이를 부수효과(side effect) 라고 한다. 부수 효과를 줄이는 게 버그없는 코드로 가는 지름길이다.
  • 따라서 전역 변수는 가능한 적게 써야한다.
  • var 변수 선언 키워드 보다는, let 이나 const 를 사용해야한다.
  • var은 변수 호이스팅이 일어나고(스코프 최상단에 변수가 선언된 것처럼 작동), 변수 재선언시 에러를 발생시키지 않기 때문에 실수를 예방할 수 없다.
  • 선언 키워드 없이 변수를 할당하면 var 로 선언한 전역 변수처럼 취급된다. var 키워드로 써지는 것도 안 좋고, 전역 변수가 되는 것도 안 좋다...
  • strict mode를 사용하면 이런 선언 없는 변수 할당 시 에러를 발생시켜준다.
  • strict mode 란 js를 더욱 엄격하게 작동되도록 하는 방법이다.
  • strict mode 사용하기 - js 파일 최상단에 따옴표까지 붙여서 ‘use strict’; 라고 써주기!
728x90
반응형

'TIL' 카테고리의 다른 글

[TIL] #14. 입력폼 만들기 & DOM과 JS 역사 & 컴퓨터 공학 기초 지식  (0) 2022.12.06
[TIL] #13. DOM 다루기  (0) 2022.12.06
[TIL] #11. 객체  (0) 2022.12.06
[TIL] #10. 배열  (0) 2022.12.05
[TIL] #9. CLI... nvm... node.js... npm...  (0) 2022.12.05
  • 1. 오늘의 소감
  • 2. 학습한 키워드
  • 3. 키워드를 바탕으로 학습 내용 설명해보기
'TIL' 카테고리의 다른 글
  • [TIL] #14. 입력폼 만들기 & DOM과 JS 역사 & 컴퓨터 공학 기초 지식
  • [TIL] #13. DOM 다루기
  • [TIL] #11. 객체
  • [TIL] #10. 배열
누코(nuuco)
누코(nuuco)
👩🏻‍💻 예비 프론트엔드 개발자 😎 글 쓰고, 그림 그리고, 코딩하는 것을 좋아합니다✨

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.