Published on

[ 모던 자바스크립트 Deep Dive ] 스터디 1회

Authors
  • avatar
    Name
    박준형
    Twitter

표현식과 문

값이란 평가되어 생성된결과를 말한다.

평가란 식을 해석하여 값을 생성하거나 참조하는것을 의미한다.

모든 값은 데이터타입을 가지고 메모리에 저장된 값은 데이터타입에 따라 다르게 해석될 수 있다. 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 위해 식별자라고 부르고있다.

값은 다양한 방법으로 생성할수있는데 가장 기본적인 방법은 리터럴을 사용하는 방법이다.

표현식

표현식은 값으로 평가될 수 있는 문이다. 표현식이 평가되면 새로운 값을 생성하거나 기존값을 참조한다.

자바스크립트에서는 표현식이라는 용어가 자주 사용된다.

문은 프로그램을 구성하는 기본 단위이자 최소 실행단위다. 문은 선언문, 할당문, 조건문, 반복문 등으로 구분이 가능하다.

undefined

var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화된다.

변수선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질때까지 빈상태로 내버려두지않고 자바스크립트엔진이 undefined로 초기화한다.

자바스크립트 엔진이 변수를 초기화하는데 사용하는 undefined를 개발자가 의도적으로 변수에 할당한다면 undefined의 본래 취지와 어긋날뿐더러 혼란을 줄 수 있기때문에 권장하지는 않지만 나는 가끔 사용한다.

선언과 정의

undefined를 직역하면 정의되지 않은값이다.

일반적으로 정의라는 개념은 어떤 대상을 명확하게 규정하는 것을 의미한다. 자바스크립트의 undefined에서 말한느 정의란 변수에 값을 할당하여 변수의 실체를 명확히 하는것을 말한다.

단순히 컴파일러에게 식별자의 존재만 알리는것이 선언이고, 실제로 컴파일러가 변수를 생성하고 식별자와 메모리 주소가 연결되면 정의로 구분한다. js는 변수를 선언하면 암묵적으로 정의가 이루어지기 때문에 선언과 정의의 구분이 모호하다.

Ecma에서는 변수는 선언한다라고 표현하고 함수는 정의한다고 표현한다.

null

null은 변수에 값이 없다는 것을 의도적으로 명시할때 사용하고 null을 할당하는것은 변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미다. 이는 참조를 명시적으로 제거하는 것을 의미하며, 자바스크립트 엔진은 누구도 참조하지않는 메모리 공간에 대해 가비지 컬렉션을 수행할 것이다.

값은 메모리에 저장하고 참조할 수 있어야한다. 메모리에 값을 저장하려면 먼저 확보해야할 메모리의 공간의 크기를 결정한다.

값은 데이터 타입을 갖는다고했는데 변수는 데이터 타입을가지는지 궁금해진다. C, Java같은 정적타입언어는 변수를 선언할때 변수에 할당 할 수 있는 값의 종류 데이터 타입을 사전에 선언해야한다. 이를 명시적 타입 선언이라고한다.

동적타이핑

정적 타입 언어는 변수의 타입을 변경할 수 없다. 변수에 선언한 타입에 맞는 값만 할당이 가능한데 컴파일 시점에 타입체크를 수행한다. 타입체크가 통과하지 못했다면 에러를 발생하고 실행자체를 막는다.

자바스크립트는 정적타입언어와 다르게 변수를 선언할때 타입을 선언하지 않는 동적타입언어다.

정적타입언어는 선언에 의해 타입이 결정되지만 동적타입언어인 자바스크립트는 할당에 의해 타입이 결정된다. 그리고 재할당을 통해 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 동적타이핑이라고한다

연산자

동등비교 연산자, 일치비교 연산자

동등연산자는 좌항과 우항의 피연산자를 비교할때 암묵적 타입 변환을 통해 타입을 일치 시킨 후 같은 값인지 비교한다.

일치연산자는 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우에 true를 반환하는 연산자이다. NAN 은 일치연산자가 통과되지않는 유일한 값이다.

객체

자바스크립트는 객체기반 프로그래밍 언어이며 구성하는 거의 모든것이 객체다. 모든 값은 프로터티가 될수 있고, 자바스크립트의 함수는 일급객체이므로 값으로 취급이 가능하여 프로퍼티로써 사용이 가능하다.

객체는 프로퍼티의 집합이며, 프로퍼티는 key value의 쌍으로 구성된다.

  • key : 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
  • value : 자바스크립트에서 사용할 수 있는 모든 값

자바스크립트에서 사용할 수 있는 모든 값은 프로퍼티의 값으로 사용할 수 있다고 했다. 함수는 일급객체고 값으로 취급이 가능하기때문에 프로퍼티의 값으로 사용할수있다고 했다. 프로퍼티 값이 함수 일 경우 메서드라고 부른다.