분류 전체보기 108

[JavaScript/DeepDive]11.원시 값과 객체의 비교

원시 타입과 객체 타입은 크게 세 가지 측면에서 다르다. 원시 타입의 값, 즉 원시 값은 변경 불가능한 값이다. 이에 비해 객체(참조) 타입의 값, 즉 객체는 변경 가능한 값이다. 원시 값을 변수에 할당하면 변수(확보된 메모리 공간)에는 실제 값이 저장된다. 이에 비해 객체를 변수에 할당하면 변수(확보된 메모리 공간)에는 참조 값이 저장된다. 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달된다. 이를 값에 의한 전달(pass by value)이라 한다. 이에 비해 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달된다. 이를 참조에 의한 전달(pass by reference)이라 한다. [11.1] 원시 값 원시 타입의 값, 즉 원시 값은 변경 불가능..

[JavaScript/DeepDive]10.객체 리터럴

[10.1] 객체란? 자바스크립트를 구성하는 거의 "모든 것"이 객체다. 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체다. 원시 타입은 단 하나의 값만 나타내지만 객체 타입은 다양한 타입의 값(원시 값 또는 다른 객체)을 하나의 단위로 구성한 복합적인 자료구조다. 원시 타입의 값, 즉 원시 값은 변경 불가능한 값이지만 객체 타입의 값, 즉 객체는 변경 가능한 값이다. 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키와 값으로 구성된다. var person = { name: 'Lee', age: 20 }; 자바스크립트에서 사용할 수 있는 모든 값은 프로퍼티가 될 수 있다. 자바스크립트의 함수는 일급 객체이므로 값으로 취급할 수 있다. 따라서 함수도 프로퍼티 값으로 사..

[JavaScript/DeepDive]09.타입 변환과 단축 평가

[9.1]타입 변환이란? 자바스크립트의 모든 값은 타입이 있다. 개발자가 의도적으로 값의 타입을 변환하는 것을 명시적 타입 변환 또는 타입 캐스팅이라 한다. 개발자의 의도와는 타상관 없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 변환되기도 한다. 이를 암묵적 타입 변환 또는 타입 강제 변환이라 한다. var x = 10; var str = x + ' '; console.log(typeof str, str); //string 10 //x 변수의 값이 변경된 것은 아니다. console.log(typeof x, x); //number 10 암묵적 타입 변환은 기존 변수 값을 재할당하여 변경하는 것이 아니다. 자바스크립트 엔진은 표현식을 에러 없이 평가하기 위해 피연산자의 값을 암묵..

[JavaScript/DeepDive]08.제어문

제어문은 조건에 따라 코드 블록을 실행하거나 반복 실행할 때 사용한다. 제어문을 사용하면 코드의 실행 흐름을 인위적으로 제어할 수 있다. 제어문은 코드의 흐름을 이해하기 어렵게 만들어 가독성을 해치는 단점이 존재할 수 있다. [8.1] 블록문 블록문은 0개 이상의 문을 중괄호로 묶은 것으로, 코드 블록 또는 블록이라고 부르기도 한다. 자바스크립트는 블록문을 하나의 실행 단위로 취급한다. 블록문은 단독으로 사용할 수도 있으나 제어문이나 함수를 정의할 때 사용하는 것이 일반적이다. [8.2] 조건문 조건문은 주어진 조건식의 평가 결과에 따라 코드 블록의 실행을 결정한다. 조건식은 불리언 값으로 평가될 수 있는 표현식이다. 자바스크립트는 if ... else 문과 switch 문으로 두 가지 조건문을 제공한다..

[JavaScript/DeepDive]07.연산자

연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산등을 수행해 하나의 값을 만든다. 연산의 대상을 피연산자라 한다. 피연산자는 값으로 평가될 수 있는 표현식이어야 한다. 연산자는 값으로 평가된 피연산자를 연산해 새로운 값을 만든다. [7.1] 산술 연산자 산술 연산자는 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다. 산술 연산이 불가능할 경우, NaN을 반환한다. 이항 산술 연산자는 2개의 피연산자를 산술 연산하여 숫자 값을 만든다. + - * / % 모든 이항 연산자는 피연산자의 값을 변경하는 부수 효과가 없다. 산술 연산을 해도 피연산자의 값이 바뀌는 경우는 없고 언제나 새로운 값을 만들 뿐이다. 단항 산술 연산자는 1개의 피연산자를 산술 연산하여..

[JavaScript/DeepDive]06.데이터 타입

데이터 타입은 값의 종류를 말한다. 자바스크립트의 모든 값은 데이터 타입을 갖는다. 자바스크립트는 7개의 데이터 타입을 제공한다. 구분 데이터 타입 설명 원시타입 숫자 타입 숫자. 정수와 실수 구분 없이 하나의 숫자 타입만 존재 문자열 타입 문자열 불리언 타입 논리의 참(true)와 거짓(false) undefined 타입 var 키워드로 선언된 변수에 암묵적으로 할당되는 값 null 타입 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 심벌 타입 ES6에서 추가된 7번째 타입 객체 타입 객체, 함수, 배열 등 [6.1] 숫자 타입 자바스크립트는 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입이 별도로 존재하지 않는다. var integer = 10; var double = 10.12;..

[JavaScript/DeepDive]05.표현식과 문

[5.1] 값 값은 식이 평가되어 생성된 결과를 말한다. 메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있다. 변수에 할당되는 것은 값이다. ex) var sum=10+30 변수에는 10+20이 평가되어 생성된 숫자 값 30이 할당된다. 메모리 공간에 저장된 것은 할당 이전 평가된 값 30이다. [5.2] 리터럴 리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법이다. ex) 3 3은 단순한 아라비아 숫자가 아니라 숫자 리터럴이다. 숫자 리터럴을 코드에 기술하면 자바스크립트 엔진은 이를 평가해 숫자 값 3을 생성한다. 자바스크립트 엔진은 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성한다. [5.3] 표현식 표현식은 값으로 평가될 수 있는 문이다...

[JavaScript/DeepDive]04.변수

[4.1] 변수란 무엇인가? 왜 필요한가? 컴퓨터는 연산과 기억을 수행하는 부품이 나뉘어져 있다.컴퓨터는 CPU를 사용해 연산하고, 메모리를 사용해 데이터를 기억한다. 메모리 주소를 통해 값에 직접 접근하는 것은 치명적 오류를 발생시킬 가능성이 높다. 운영체제가 사용하는 값을 변경하면 시스템을 멈추게 하는 치명적인 오류가 발생가능. 자바스크립트는 개발자의 직접적인 메모리 제어를 허용하지 않는다. 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다. 즉, 변수는 값의 위치를 가리키는 상징적인 이름이다. 변수는 프로그램이 언어의 컴파일러 또는 인터프리터에 의해 값이 저장된 메모리 공간의 주소로 치환되어 실행한다. 따라서 개발자가 직접 메모리 주..