데이터 타입
1. 원시타입(primitive type)
Number 숫자
- 배정밀도 64비트 부동소수점 형식을 따르며 모든 수를 실수로 처리한다.
- 숫자 타입은 추가적으로 세가지 특별한 값도 표현 할 수 있다.
- Infinity : 양의 무한대
- Infinity : 음의 무한대
- NaN : 산술 연산 불가 (not-a-number)
String 문자열
- 자바스크립트에서 문자열은 작은따옴표(''),큰따옴표(""),백틱(````)으로 감싼다.
boolean 불리언
- 논리적 참,거짓을 나타내는 값. true , false
undefined
- 자바스크립트 엔진이 변수를 초기화 할때 사용하는 값. 변수에 값이 없다는 것을 명시하고 싶을때는 null을 사용한다.
null
- null은 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재 intentional absence)할 때 사용.
Symbol
- 다른 값과 중복 되지 않는 유일무이한 값. ES6에서 추가되었다.
2. 객체 타입(object/reference type)
3. 데이터 타입의 필요성?
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할 지 결정하기 위해
4. 동적 타입 언어와 정적 타입 언어
정적 타입 언어
- 변수를 선언할 때 변수에 할당할 수 있는 데이터 타입을 사전에 선언 해야 함(명시적 타입 선언)
-컴파일 시점에서 타입 체크 -> 런타임 에러를 줄임
- C, C++, Java 등등
동적 타입 언어
- 어떠한 데이터 타입의 값이라도 자유롭게 할당, 변경 가능
- 값을 할당하는 시점에서 변수의 타입이 동적으로 결정 (동적 타이핑)
- 선언이 아닌 할당에 의해 타입 결정 (타입 추론)
- Javascript, Python 등등
5. 동적 타입 언어의 특징과 주의사항
- 복잡한 프로그램에서 변화하는 변수의 값을 추적하기 어려움 개발자의 의도와 상관 없이 타입이 자동으로 변환되기도 함 -> 유연성은 높지만 신뢰성은 떨어짐.
- 주의사항 👀
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용
- 변수의 스코프를 최대한 좁게 만듦
- 전역 변수의 사용 최소화
- 변수보다 상수 사용
- 변수 이름은 변수의 목적이나 의미 파악이 쉽게 네이밍
연산자
- 연산자 : 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리 등을 수행해 하나의 값을 만듦.
- 피연산자 : 연산의 대상으로 값으로 평가될 수 있는 표현식.
산술 연산자
- 피연산자 대상 수학적 계산으로 새로운 숫자 값을 만든다. 산술이 불가능한 경우 NaN을 반환
- ++, -- 와 같은 단항연산자는 피연산자의 값을 변경하는 부수효과가 있음.
- +연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다. 그 외에는 산술 연산자로 동작(암묵적 타입변환)
할당 연산자
- 우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다. 변수 값이 변하는 부수 효과가 있다.
비교 연산자
- 좌항과 우항의 피연산자를 비교한 다음 결과를 불리언 값으로 반환한다.
- 일치 비교 연산자에서 주의할 것 NaN은 자신과 일치하지 않는 유일한 값이다.
삼항 조건 연산자
- 조건식의 평가 결과에 따라 반환할 값을 결정한다. 부수 효과는 없다.
- 삼항연산자는 값으로 평가될 수 있는 표현식인 문이다. 반면 if else문은 표현식이 아닌 문이 아니기 때문에 값이 될 수 없다.
논리 연산자
- 우항과 좌항의 피연산자(부정 논리 연산자의 경우 우항의 피연산자)를 논리 연산한다.
- ! : 언제나 불리언 값을 반환
- || && : 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다.
📖 모던자바스크립트 딥다이브 6장 데이터 타입(60p), 7장 연산자 (75p)