JS Deep Dive | 2021.12.13

invidia·2021년 12월 13일
0

TIL

목록 보기
3/29

04 변수

정리

  • 변수: 메모리에 저장된 데이터의 주소를 참조하기 위한 식별자

  • 키워드: JS 엔진이 수행할 동작을 규정한 명령 (var, const, let 등)

  • JS는 변수 선언시 암묵적으로 undefined를 할당하므로 Garbage value가 들어가지 않음

  • JS엔진은 소스코드의 평가과정을 거쳐 모든 선언문을 다른 코드보다 먼저 실행한다.

    • 이를 변수 호이스팅 이라고 함.
    • 다른 변수가 실행되는 시점은 런타임
      • 변수의 값 할당은 런타임에 실행됨.
  • Ex1 )

console.log(num)// undefined 출력

var num;
  • Ex2 )
console.log(num)// undefined 출력

var num;
num = 3;

console.log(num)// 3 출력
  • Managed language와 Unmanaged language
Unmanaged languageManaged language
메모리 제어직접적인 메모리 제어 허용 X저수준 메모리 제어 기능 제공
메모리 관리 주체언어 차원에서 담당개발자
장점개발자 역량 생산성 확보개발자 역량 ↑
단점생산성 ↓개발자 역량에 의존
  • 네이밍 규칙
    • a-z, A-Z, _, $ 로 시작
    • a-z, A-Z, _, $, 0-9 사용
    • /[A-Za-z_$][A-Za-z_$0-9]*
    • ES5부터 유니코드도 허용

느낀점

  • Garbage Collector에 대해 복습해야 함

05. 표현식과 문

정리

  • 개념 이해 = 용어 이해 & 설명 가능함 을 의미

  • 값: 표현식(Expression)이 평가(Evalueate)되어 생성된 결과.

    • 10 + 20라는 표현식평가되어 30이 된다.
    • 표현식과 값은 동치(=)이다.
  • 리터럴: 이해가능한 문자 혹은 약속된 기호를 사용해 값을 생성하는 표기법(notation)

    • Ex) 정수, 숫자, 문자열 등
    • 런타임에 리터럴을 평가해 값을 생성.
    • 평가되어 값을 생성하므로 리터럴은 표현식이다.
  • 문: 프로그램의 최소 실행단위 (한 줄 느낌)

    • 토큰: 의미를 가진 최소 기본요소
    • var sum = 3 + 5;
      • 문: var sum = 3 + 5;
      • 토큰: var, sum, =, 3, 5 ,;
  • JS에서 세미클론(;)은 생략 가능하나 (자동삽입기능 ASI가 있음), 붙이는 것을 권장함.

표현식인 문표현식이 아닌 문
값의 할당 가능성OX

느낀점

  • 어느정도 알고 있는 내용이라 가볍게만 공부하려했는데, 용어의 중요성을 느껴 좀 더 자세히 공부해야겠음.

  • 프로그래밍 언어의 개념을 배우는 것이므로 국어 문법 배우는 것과도 공통점이 있다고 느낌

    • 문,토큰 등이 음운 어절 등과 비슷하다 느낌.

06. 데이터 타입

정리

  • 원시 타입: number, string, boolean, undefined, null, symbol
  • 객체 타입: 객체, 함수, 배열 등

숫자 타입

문자열 타입

undefined 타입

  • 값 할당 전의 가지는 초기값
    • 의도적으로 undefined를 할당하는 것은 취지에 어긋남
      • 그럴 때는 null을 사용

Symbol 타입

  • 나중에 배울 예정
  • Symbol함수를 통해 호출
  • 값이 외부에 노출 X
  • 다른 값과 중복X

데이터 타입의 필요성

  1. 데이터 타입에 따라 메모리 공간을 확보
  2. 참조시, 읽을 데이터 공간의 크기를 데이터 타입을 통해 인식
  3. 저장된 데이터의 해석 방법을 데이터 타입에 따라 결정

동적 타이핑

  • JS는 정적 타입 언어 (C,Java)와 달리 선언이 아닌 할당할 때 데이터 타입이 결정됨
    • 이를 동적 타이핑이라고 함
    • JS는 정적 타입 언어라고 불림
  • 정적 타입 언어
    • 안정성 ↑
    • 신뢰성
  • 변수 사용시 주의사항
    • 제한적 사용
    • 스코프를 좁게 만듦
    • 전역 변수 사용 자제
    • 변수보다는 상수 사용
    • 목적, 의미가 파악가능하도록 네이밍

느낀점

  • 다른 언어를 공부할 때는 왜 타입이 필요한 지 타이핑 방식에 따라 무엇을 주의해야 하는지 까지는 고려하지 못했었는데, 이 책을 통해 다양한 생각을 하게 되었다

07 연산자

정리

  • 연산자: 피연산자와의 조합으로 표현식을 만듦

    • 피연산자는 그 자체로도 표현식.
  • 산술 연산자 (Arithmetic operator): 수학적 계산을 통해 새 값 만듦

    • Ex) +,-,*,/,%, ++,--
  • 할당 연산자 (Assignment opeartor): 좌항에 우항 피연산자의 평가결과를 할당

    • Ex) =,+=,-=,/=,*=,%=
    • 할당 연산자표현식인 문이므로, 값으로 표현이 가능하다.
      • a = b = c = 10 이런식의 표현이 가능.
  • 비교 연산자 (Comparison opearator): 좌, 우항을 비교해 결과를 Boolean으로 반환

    • Ex) ==, !==, ===, !===
    • 동등 비교: ==은 암묵적 타입변환을 하여 타입을 일치시킨 후 값을 비교
    • 일치 비교: ===는 타입과 값이 모두 같은지를 비교
      • NaN === NaN //false를 리턴하므로 isNaN()을 통해 비교해야 한다.
    • JS는 문자열을 사전순으로 비교하므로 "10" < "2" // true와 같은 결과가 나온다.
    • 삼항 조건 연산자 (Ternary operator): 값으로 평가할 수 있는 표현식이다.
    • 논리 연산자 (Logical opeartor): !, || &&
      • ||, &&의 결과는 해당 결과를 만들어 낸 근거를 반환한다.
        • Ex) 3 && 6 // 6 , 1 || 7 // 1 , 0 || null //null
    • 기타 연산자들
      • 쉼표 연산자: ,
      • 그룹 연산자: ()
      • typeof 연산자: typeof var
      • 지수 연산자: a ** b = a^b;
        • (-5)^2 = (-5) ** 2 [괄호를 사용해야 함]
  • 부수효과가 있는 연산자들

    • =, ++, --, delete

느낀점

  • 표현식인 문과 표현식이 아닌 문 주의할 것.
  • 가볍게만 배우고 나중에 깊게 배울 것.

08. 제어문

정리

  • 블록문, 반복문, 조건문 등이 있다.
    • 자체 종결성이 있어 세미콜론은 붙이지 않는다.
  • 레이블 문: 식별자가 붙은 문
    • Ex) foo: {console.log(1);}
    • 흐름 복잡 & 가독성 하락으로 사용 권장 X
  • break를 통해 레이블문, 반복문, switch문을 탈출 가능하다.

느낀점

  • C++과 비슷하여 크게 알게된 것이 없었다.

0개의 댓글