스크립트 언어중 변수를 작성했을때 타입이 저장되는데 나뉘어지는데 크게 2가지가 있다.
1. Primitive types(원시 값)
직접적으로 값을 가지고 있는 타입이며 변경이 가능하다.
2. Object types(참조 값)
간접적으로 데이터를 가지고 있는 타입 변경이 불가능하다.
C언어 , java 와는 다르게 따로 선언을 하지 않는다
const count = 10; // count는 10이다. (정수)
const size = 10.25; // size는 10.25다. (소수점)
정수 , 소수점도 const
으로 변수를 작성해도 type은 자동적으로 Number 값이 창출된다.
const junseong = 'junseong'; // ''안에 단어를 string type으로 간주
const hijun = 'Hello' + junseong; // ''안에 단어와 위에 선언한 junseong의 변수를 합친 값이 나옴
const HiJun = `hi ${junseong}!`; //template string 또는 template literals 라고 불린다.
console.log(`value:${HiJun}, type:${typeof HiJun}`); // template string을 사용
console.log('value:' + ${HiJun} + 'type:' + ${typeof HiJun}); // template string을 사용 X
template string 이란 템플릿 문자열이라 하며 '' 대신하여 backtick이란 ` 부호를 사용한다. 위에 코드를 보면 템플릿 문자열을 사용하면 그 안에 들어있는 문자열 혹은 스페이싱이 그대로 출력되어 간결하고 가독성이 좋다.
참 과 거짓으로 나뉘어진다.
const ture = ture;
const false = 3 < 1; // 1은 3보다 크지 않기 때문에 거짓 false
텅 비어있어 값이 없는 상태 null
선언은 되었지만 아무것도 정해지지 않는 상태인 undefined
결은 비슷하지만 다른 유형이다.
let noting = null;
let x; // let x = undefined; 라고도 작성이 가능하다.
Map이나 다른 자료구조에서 고유의 식별자가 필요하거나 동시 다발적으로 일어나는 곳에서 우선순위를 정하기 위해서 필요한 타입이다.
const symbol1 = Symbol('id');
const symbol2 = Symbol('id');
console.log(symbol1 === symbol2); // symbol1 과 symbol2가 같은지 확인해보는 방법
// 거짓인 이유는 동일한 스트링을 사용했어도 각자 고유한 심볼로 만들어지기 때문에 거짓으로 나온다
// 동일한 symbol을 만드려면
const Asymbol1 = Symbol.for('id');
const Asymbol2 = Symbol.for('id'); //주어진 스트링에 맞는 심볼을 만들어줘라
console.log(Asymbol1 === Asymbol2); // ture
console.log(`value: ${symbol1.description} , type: ${typeof symbol1}`);
//심볼은 이렇게출력하면 오류가 나기 때문에 밸류에 .description을 사용하여 스트링으로 변환하고 출력해야함
const alex = {name : 'alex' , age: '18'};
alex.age = 21;
alex.name = 'sonny'; //이런식으로 속성값이 변경이 가능하다.
위와 같이 alex라는 변수는 고정으로 지정하여 변경이 불가능 하지만 변수 안 name,age의 요소를 바꿀 수 있다.
자바스크립트는 선언할 때 어떤타입인지 선언하지않고 프로그림이 동작할때 할당된 값에 따라서 변경될수 있다.
dynamically typed language
라 부른다.
그 이외 따로 타입을 지정해야하는 java
, c언어
는 stacically typed language
라 부른다.
다이나믹 타이핑의 예를 들면
let text = 'hello' // text 라는 변수는 hello 다
console.log(text.charAt(0));
//text라는 변수 문자열중 첫번째 인덱스 를 표시한다. 그러므로 text = hello 첫번째 알파벳 H가 나온다
console.log(`value: ${text}, type: ${typeof text}`);
// hellow 라는 값이고 타입은 스트링이다.
text = 1; //근데 여기서 text는 1이다.
console.log(`value: ${text}, type: ${typeof text}`);
// 순차적이기 때문에 위 선언대로 text라는 변수는 1로 변했기 때문에 값은 1이고 타입은 넘버가 된다
text = '7' + 5; //근데 여기서 text는 '7'이라는 스트링과 숫자인 5 가 더해진다
console.log(`value: ${text}, type: ${typeof text}`);
// 7이라는 스트링과 5라는 넘버가 붙어져 75라는 값이 나오지만 타입은 넘버가 아닌 스트링으로 변환된다
text = '8' / '2'
// 근데 여기서 text는 스트링인 8 과 2로 나눈다 하지만 넘버가 아닌 문자는 나눌수가없다
console.log(`value: ${text}, type: ${typeof text}`);
// 하지만 자바스크립트는 자동으로 변환되기 때문에 스트링이아닌 넘버로 인식되어 나눠진다
console.log(text.charAt(0));
// 위에선 값이 나오지만 아래에서 나오지않는 이유는 위에 text라는 변수가 바뀌었기 떄문에
// 스트링이 더이상 아니여서 오류가 난다. 그렇기에 타입스크립트를 사용하는 이유가 된다.
스크립트 언어의 다양한 타입이 있다는 걸 알았고 마구잡이로 사용하는게 아닌 적재적소 판단을 하여 사용해야 좋은 코더가 될 수 있다는 생각을 한다. 아직은 많이 부족하겠지만 앞으로 더욱 증진하는 마음으로 글을 마무리 해본다.