자바스크립트는 웹 개발에서 필수적인 언어다
HTML, CSS와 함께 사용되며, 웹 사이트의 대부분이 자바스크립트를 사용하여 웹 페이지의 동작을 제어한다
React와 같은 라이브러리, Vue와 같은 프레임워크는 자바스크립트 코드를 래핑하고 확장하여 그 기능을 극대화한다
이러한 도구들은 근본적으로 자바스크립트를 기반으로 하며,
상태 관리와 이벤트 처리 역시 자바스크립트의 원리에 기초한다
이러한 라이브러리나 프레임워크는 자바스크립트의 기본 개념을 확장하여,
웹 애플리케이션을 더 효율적으로 개발할 수 있도록 돕는다
자바스크립트에서 Deep 하게 공부할 주제들은 다음과 같다
자바스크립트 주요 개념
- 변수 (Variables) - var, let, const
- 자바스크립트에서 변수를 선언하는 방법은 var, let, const이다
- var : 함수 스코프를 가지며, 호이스팅 됨
- let : 블록 스코프를 가지며, 재할당 가능
- const : 블록 스코프를 가지며, 재할당 불가
- 자바스크립트에서 변수를 선언하는 방법은 var, let, const이다
- 데이터 타입 (Data Types)
- undefined
- null
- boolean
- number
- string
- symbol
- bigint
- object
- 함수 (Functions)
- 함수는 재사용 가능한 코드 블록으로, 선언 방식에는 함수 선언문, 함수 표현식, 화살표 함수 등이 있다
- 함수 선언문 : 함수 이름과 함께 선언되며, 호이스팅되어 함수 호출이 선언문 앞에 있어도 실행된다
- 함수 표현식 : 변수에 함수를 할당하는 방식으로 선언되며, 호이스팅 되지 않으므로 함수 호출이 선언문 뒤에 있어야 한다
- 화살표 함수 : 간결한 문법으로 함수 표현식을 대체하며, this 바인딩이 다르다
- 함수는 재사용 가능한 코드 블록으로, 선언 방식에는 함수 선언문, 함수 표현식, 화살표 함수 등이 있다
- 객체 (Objects)
- 객체는 키-값 쌍으로 이루어진 데이터 구조로, 자바스크립트의 거의 모든 것이 객체다
- 배열 (Arrays)
- 여러 개의 값을 순서대로 저장할 수 있는 데이터 구조로, 다양한 메서드들이 있다
- push() : 배열의 끝에 새로운 요소 추가
- pop() : 배열의 마지막 요소를 제거하고 반환
- map() : 배열의 각 요소에 대해 주어진 함수를 호출한 결과로 새로운 배열을 만든다
- filter() : 주어진 함수의 조건을 만족하는 요소들로 새로운 배열을 만든다
- forEach() : 배열의 각 요소에 대해 주어진 함수를 호출하며 반환값이 없다
- reduce() : 배열의 각 요소를 주어진 함수에 따라 누적하여 단일 값을 반환한다
- 여러 개의 값을 순서대로 저장할 수 있는 데이터 구조로, 다양한 메서드들이 있다
- 프로토타입 (Prototype)
- 프로토타입은 객체의 상속을 구현하는 메커니즘으로, 자바스크립트는 프로토타입 체인을 통해 객체 간 상속을 구현한다
- 클로저 (Closures)
- 클로저는 함수와 함수가 선언된 어휘적 환경의 조합으로, 내부 함수가 외부 함수의 변수에 접근할 수 있게 한다
- 비동기 프로그래밍 (Asynchronous Programming)
- 자바스크립트는 비동기적으로 작업을 처리할 수 있으며, 주요 개념으로는 콜백, 프로미스, async/await 이 있다
- 콜백 (Callback)
function designWork(callback) { console.log('피그마로 디자인 작업을 한다'); setTimeout(() => { console.log('디자인 완료!'); callback(); // 디자인 완료 후 개발 시작 }, 2000); } function developWork() { console.log('개발 시작'); setTimeout(() => { console.log('개발 완료!'); }, 3000); } console.log('I am seolyu(a world-class designer and developer)'); designWork(developWork);
- 프로미스 (Promise)
function designWork() { return new Promise((resolve, reject) => { console.log('피그마로 디자인 작업을 한다'); setTimeout(() => { console.log('디자인 완료!'); resolve(); }, 2000); }); } function developWork() { return new Promise((resolve, reject) => { console.log('개발 시작'); setTimeout(() => { console.log('개발 완료!'); resolve(); }, 3000); }); } console.log('I am seolyu(a world-class designer and developer)'); designWork() .then(developWork) .then(() => { console.log('디자인과 개발 모두 완료!'); }) .catch(error => { console.error('에러', error); });
- async/await
function designWork() { return new Promise((resolve, reject) => { console.log('피그마로 디자인 작업을 한다'); setTimeout(() => { console.log('디자인 완료!'); resolve(); }, 2000); }); } function developWork() { return new Promise((resolve, reject) => { console.log('개발 시작'); setTimeout(() => { console.log('개발 완료!'); resolve(); }, 3000); }); } async function mainWork() { console.log('I am seolyu(a world-class designer and developer)'); await designWork(); await developWork(); console.log('디자인과 개발 모두 완료!'); } mainWork().catch(error => { console.error('에러', error); });
- 콜백 (Callback)
- 자바스크립트는 비동기적으로 작업을 처리할 수 있으며, 주요 개념으로는 콜백, 프로미스, async/await 이 있다
- 이벤트 루프 (Event Loop)
- 이벤트 루프는 자바스크립트의 동시성 모델을 설명하는 개념으로, 콜 스택과 태스크 큐를 관리하여 비동기 작업을 처리한다
- 호이스팅 (Hoisting)
- 호이스팅은 변수와 함수 선언이 그 범위의 최상단으로 끌어올려지는 자바스크립트의 기본 동작인데, 초기화는 호이스팅되지 않는다
- 스코프 (Scope)
- 스코프는 변수, 함수, 객체에 접근할 수 있는 범위를 의미하며, 주요 스코프로는 전역 스코프와 지역 스코프가 있다
- this
- this는 함수 호출 방식에 따라 달라지는 특별한 키워드로, 일반 함수, 메서드, 생성자 함수, 화살표 함수 등에서 다르게 동작한다
- 모듈 (Modules)
- 모듈은 코드를 재사용 가능한 블록으로 나누는 방법으로, 자바스크립트에서는 import, export 키워드를 사용하여 모듈을 정의하고 사용한다
- 자바스크립트 동작 방식
- 자바스크립트는 싱글 스레드 언어로, 한 번에 한 가지 작업만 수행할 수 있다
- 그러나 비동기 작업을 처리하기 위해 이벤트 루프와 콜백 큐를 사용한다
- 콜 스택 (Call Stack)
- 함수 호출이 쌓이는 곳으로, 자바스크립트 엔진이 함수 실행 순서를 관리한다
- 함수가 호출될 때마다 콜 스택의 맨 위에 추가되고, 함수가 반환되면 콜 스택에서 제거된다
- 태스크 큐 (Task Queue)
- 비동기 작업(ex. 타이머, 이벤트 핸들러, 비동기 API 호출 등)의 콜백 함수들이 대기하는 곳이다
- 콜 스택이 비워지면, 이벤트 루프가 태스크 큐에서 대기 중인 콜백 함수를 콜 스택으로 옮겨 실행한다
- 콜백 큐 (Callback Queue)
- 콜백 큐는 일반적으로 태스크 큐와 같은 의미로 사용
- 마이크로태스크 큐와 같은 특별한 대기열을 언급할 때 사용되기도 한다
- 마이크로태스크 큐 (Microtask Queue)
- 프로미스의 후속 처리(then, catch, finally)나 MutationObserver와 같은 작업들이 대기하는 곳이다
- 마이크로태스크는 태스크 큐보다 높은 우선순위를 가지며, 콜 스택이 비워지면 이벤트 루프는 태스크 큐보다 먼저 마이크로태스크 큐의 작업들을 처리한다
- 이벤트 루프 (Event Loop)
- 콜 스택과 태스크 큐를 모니터링하여 비동기 작업을 처리하는 메커니즘
- 콜 스택 (Call Stack)
- 위 동작 방식을 통해 비동기 작업을 효율적으로 처리하며, 웹 브라우저와 서버 환경에서 높은 응답성과 성능을 유지한다
- 자바스크립트 엔진 (JavaScript Engine)
- 자바스크립트 엔진은 자바스크립트 코드를 해석하고 실행하는 소프트웨어다
- 웹 브라우저와 서버에서 자바스크립트를 실행할 때마다 사용된다
- 대표적인 엔진으로는,
- 구글의 V8 엔진: 크롬과 Node.js에서 사용되며 고성능 최적화와 빠른 실행 속도가 장점이다
- 모질라의 SpiderMonkey: 파이어폭스 브라우저에서 사용된다
- 마이크로소프트의 Chakra: 이전에는 인터넷 익스플로러와 Edge에서 사용되었으며, 현재는 Edge가 Chromium 기반으로 바뀌면서 V8 엔진을 사용한다
- 인터프리터 (Interpreter)
- 자바스크립트는 인터프리터 언어로, 코드를 한 줄씩 실행한다
- 엔진이 자바스크립트 코드를 해석하고 실행하는 과정에서 인터프리터가 중요한 역할을 한다
- 실시간 실행 : 자바스크립트 코드를 작성한 즉시 실행할 수 있어 빠른 피드백을 제공한다
- 유연성 : 코드 실행 중에 오류가 발생하면, 해당 줄에서 실행을 멈추고 오류를 처리할 수 있다
- 동적 실행 : 코드를 컴파일하지 않고도 바로 실행할 수 있어 개발과 디버깅이 용이하다
- ECMAScript (ES)
- ECMAScript는 자바스크립트의 표준 사양을 정의한 것으로, 자바스크립트의 버전과 기능을 규정한다
- 최신 버전으로는 ES6(ECMAScript 2015) 이후의 버전들이 있으며, 새로운 기능들이 지속적으로 추가되고 있다
- ES5 (ECMAScript 2009) : JSON 지원, 스트릭트 모드, 배열 메서드(Array.forEach, Array.map 등) 도입
- ES6 (ECMAScript 2015) : 화살표 함수, 클래스, 모듈(import/export), let과 const, 템플릿 리터럴, 디스트럭처링 할당, 프로미스, symbol 타입, Set 과 Map 데이터 구조 도입
- ES7 (ECMAScript 2016) : 지수 연산자(**), Array.prototype.includes 메서드 추가
- ES8 (ECMAScript 2017) : async/await, 객체의 값을 병합하는 Object.entries 와 Object.values 도입
- ES9 ( ECMAScript 2018) : Rest/Spread 속성, 비동기 이터레이터
- ES10 (ECMAScript 2019) : flat(), flatMap(), optional catch binding, Object.fromEntries()
- ES11 (ECMAScript 2020) : BigInt 타입, Nullish Coalescing 연산자(??), Optional Chaining 연산자 (?.)
'게시판' 카테고리의 다른 글
WebSocket 웹 소켓📡 (0) | 2024.06.16 |
---|---|
자바스크립트 Scope (0) | 2024.06.16 |
프론트엔드 성능 최적화 (0) | 2024.06.06 |
Tensorflow 딥러닝 AI 공부하기 (0) | 2024.03.24 |
Flutter로 앱 만들기 공부 (0) | 2024.03.24 |