ex> 정원이 30명인 놀이기구를 탄다고 가정을 하자. 놀이기구가 운행할 때 5분이 걸린다고 한다.
놀이기구를 막 태운 시점에서부터 5분이 지나 이미 놀이기구에 타 있는 사람들이 다 내리기 전까지 대기자는 탑승을 할 수 없다. 이것을 놀이기구 탑승/하차가 동기적으로 관리된다고 볼 수 있다.
(놀이기구가 시작/종료 될 때 까지 대기하는 것)
ex> 정원이 최대 30명인 맛집이 있다고 가정한다. 입장은 선착순이고 퇴장은 다 먹은 순대로 나올 수 있다. 다 먹은 사람이 나오면 나온 사람 수 만큼 다시 입장이 가능하다. 이것을 입/퇴장이 비동기적으로 처리된다고 볼 수 있다.
Blocking Model
코드의 실행이 끝나기 전까지 실행 제어권을 다른 곳에 넘기지 않아 다른 작업을 하지 못하고 대기하는 것.
Non-Blocking Model
코드의 실행이 끝나지 않아도 실행 제어권을 다른 곳에 넘겨 다음 코드가 실행될 수 있는 것.
자바스크립트는 Async + Non-Blocking Model을 채용해 현재 실행중인 코드의 실행이 끝나지 않아도 다음 코드를 호출함
결론적으로 자바스크립트는 각 명령들이 순서대로 실행될 수 있게 구현되어 있지만,
Non-Blocking Model에 의해 동기적 명령이 아닌 모든 함수는 비동기적으로 실행
자바스크립트의 데이터 타입은 크게 원시타입과 객체타입으로 분류
자바스크립트는 객체 기반의 프로그래밍 언어이고, 자바스크립트를 구성하는 거의 모든 것은 객체로 구성되어 있다. 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 하나의 프로퍼티는 Key와 Value로 구성.
객체 리터럴
리터럴(literal)은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법.
객체 리터럴은 객체를 생성하기 위한 표기법을 말 함.
객체를 생성하기 위해 Class를 먼저 선언하고 new 연산자와 함꼐 생성자를 호출할 필요 없이 일반적인 숫자, 문자열을 만드는 것과 유사하게 객체를 생성할 수 있다.
객체 리터럴은 중괄호{} 내에 0개 기상의 프로퍼티를 정의해서 선언.
프로퍼티란 객체의 상태를 나타내는 값(Data). Key와 Value로 구성 됨.
메서드란 프로퍼티를 참조하고 조작할 수 있는 동작(behavior)을 나타냄.
객체의 프로퍼티 값이 함수로 구성되어 있을 경우 메서드라고 부름.
에러 핸들링은 에러를 관리하는 방법이고 예상치 못한 상황에 대처하는 방식.
에러는 예상할 수 있는 에러와 예상치 못한 에러로 구분. 일반적인 어플리케이션을 설계할 때는 예상치 못한 에러 상황이 더욱 많을 것을 가정해야 함.
클래스는 정보를 묶는 것. 현실과 비슷한 개념(객체)을 나타내기 위한 도구.
클래스를 미리 정의해 두면 필요할 때마다 해당 클래스로 동일한 틀을 가진 객체를 만들 수 있다.