📌 이 글은 THE SOPT 30기 서버파트 1차 세미나에서 학습한 내용을 다룹니다.
객체 기반 스크립트 프로그래밍 언어
var | let | const | |
---|---|---|---|
재선언 | O | X | X |
재할당 | O | O | X |
var variable1 = 'var variable';
var variable1 = 'new var variable';
console.log('var : ', variable1);
let variable2 = 'let variable';
let variable2 = 'new let variable';
// Cannot redeclare block-scoped variable 'variable2'.
console.log('let: ', variable2);
const variable3 = 'const variable';
const variable3 = 'new const variable';
// Cannot redeclare block-scoped variable 'variable3'.
console.log('const: ', variable3);
var variable1 = 'var variable';
variable1 = 'new variable';
console.log('var: ', variable1);
let variable2 = 'let variable';
variable2 = 'new variable';
console.log('let: ', variable2);
const variable3 = 'const variable';
variable3 = 'new variable';
// TypeError: Assignment to constant variable.
console.log('const: ', variable3);
if
, while
, for
, function
if (true) {
var x = 'var';
}
console.log(`var: ${x}`); // var: var
if (true) {
let y = 'let';
}
console.log(`let: ${y}`);
// ReferenceError: y is not defined
var
는 Function Scope를 가지기 때문에, block과 관계없이 접근
let
, const
는 Block Scope를 가지기 때문에, block 안에서 선언된 값은 block 밖에서 접근 불가
function foo() {
if (true) {
var variable = 'hello';
console.log('if block - ', variable); // if block - hello
}
console.log('function block - ', variable); // function block - hello
}
console.log('global - ', variable);
// ReferenceError: variable is not defined
Function Scope를 가지는 var
는 해당하는 Function을 벗어나면 접근 불가
Boolean
true
와 false
두 가지 값을 가짐Null
Undefined
Number
String
Symbol
Object
Array
Array
도 객체타입arr = [item1, item2, item3]
Function
왜 TypeScript를 쓰는거지? 🤔
정적 타입 검사를 위해!
TS는 JS에서 타입 문법 등을 추가한 상위 집합
코드 작성 단계에서 타입을 체크해 오류 발견
JS와 100% 호환!
변수가 어떤 Type을 가지는 지 몰라서 생기는 오류가 없다!
const variable: T = 초기값;
let variable: T = 초기값;
let isDone: boolean = true;
const str: string = 'hello';
let num: number = 2;
const sum: number = 'sum number';
// Type 'string' is not assignable to type 'number'.
const variable: T[] = 초기값;
let variable: Array<T> = 초기값;
let array: number[] = [1, 2, 3];
const strArr: Array<string> = ['hello', 'world'];
const objArr: Array<object> = [{ item: 'value' }, { itme: 'value2' }];
Object
는 자바스크립트의 모든 생성자를 extend
즉, 자바스크립트의 모든 타입이 할당될 수 있다.
object
는 원시 타입을 제외한 나머지를 모두 받을 수 있다.
const f1 = (obj: object): void => {
console.log(obj);
};
const b1 = (obj: Object): void => {
console.log(obj);
};
f1('hi');
// Argument of type 'string' is not assignable to parameter of type 'object'.
b1('hi');
반환 타입 표기
void
타입function f2(a: number, b: number): number {
return a + b;
}
const b2 = (a: number, b: number): number => {
return a + b;
};
const noReturn = (): void => {
console.log('hihi');
};
null
, undefined
는 이름 그대로가 타입
해당 타입은 null
/ undefined
자신 이외의 값 할당 안됨
let a: null = null;
let x: null = 2;
// Type '2' is not assignable to type 'null'
let b: undefined = undefined;
let y: undefined = null;
// Type 'null' is not assignable to type 'undefined'.
"날 믿어, 난 내가 뭘 하고 있는지 알아"
개발자가 직접 타입을 단언
// angle-bracket
let myName: any = '공혁준';
let myNameLength: number = (<string>myName).length;
// as
let yourName: any = '공혁준';
let yourNameLength: number = (yourName as string).length;
어떤 타입이라도 any에 할당 가능
즉, 타입 검사를 하지 않는다!
개발자가 알기 어려운 타입을 받을 때 사용
혹은, 일부 타입만 알 때 사용
const unknown: any = {
name: '공혁준',
age: 25,
organization: 'SOPT',
completion: [30],
};
타입 체크를 위해 여러가지 프로퍼티를 갖는 새로운 타입 정의
변수, 함수, 클래스 모두 사용 가능
interface Sopt {
name: string;
age: number;
organization: string;
completion: number[]; // or Array<number>
}
const sopt: Sopt = {
name: '공혁준',
age: 25,
organization: 'SOPT',
completion: [30]
};
인터페이스 내부에서 필수적이지 않은 프로퍼티
있을 수도 있고, 없을 수도 있다!
프로퍼티 명 뒤에 '?'를 붙여서 표시!
선택적 프로퍼티가 아닌 프로퍼티를 지정하지 않을 경우 오류 발생!
interface Closet {
name: string;
shirt: number;
pants: number;
sunglass?: number;
hat?: number;
}
const ohmygirl: Array<Closet> = [
{
name: '효정',
shirt: 5,
pants: 2,
},
{
name: '아린',
shirt: 2,
pants: 8,
hat: 2, // 선택적!
},
];
Chrome V8 JavaScript 엔진으로 빌드 된 JavaScript 런타임
Node.js는 쉽게 말해
브라우저 밖에서 JavaScript를 실행할 수 있게 만들어주는 환경
특징
Blocking은 I/O가 끝날 때까지 작업이 중단, 대기
Non-Blocking은 I/O가 진행되는 동안 멈추지 않고 다음 작업
Process
Thread
Node.js 는 Single Thread
이벤트가 발생할 때, 미리 저장해둔 작업을 수행하는 것
function greet() {
return 'hello';
}
function timer() {
return setTimeout(() => {
return 'End';
}, 3000);
}
greet();
timer();
greet()
이 콜 스택으로 push 되었다가 pop 되면서 "Hello" 출력timer()
가 콜 스택으로 pushsetTimeout()
push 후 바로 백그라운드로 poptimer()
popsetTimeout()
에 의해 콜백함수 백그라운드 실행setTimeout
에서 설정한 함수가 백그라운드로 추가
javascript 의 변수 선언 키워드랑 scope에 대해 공부하셨군요 ^^
var, let, const에 대한 비교 설명이 있는데, hoisting에 대해서도 알아보는건 어떨까요?
https://developer.mozilla.org/ko/docs/Glossary/Hoisting