Study/JavaScript

JavaScript Deep Dive - 02장 - Javascript란?

pmh 2023. 7. 28. 02:27
  1. 자바스크립트의 탄생과 표준화: 브랜던 아이크(Brendan Eich)가 1995년 넷스케이프 브라우저에 처음 구현한 스크립트 언어로, ECMAScript 표준으로 정의되어 널리 사용됨.
  2. 자바스크립트의 성장과 역사: Ajax 기술의 등장으로 웹 애플리케이션 개발 환경이 확장되었으며 (비동기 통신), jQuery 라이브러리가 도입되어 DOM 조작이 용이해지며, V8 JavaScript 엔진의 등장으로 성능이 크게 향상됨.
  3. Node.js와 SPA 프레임워크(혹은 라이브러리): Node.js는 자바스크립트를 서버 사이드에서 사용할 수 있게 해주는 환경으로 대규모 웹 애플리케이션 개발에 기여함. SPA 프레임워크(혹은 라이브러리)는 단일 페이지 애플리케이션을 구축하는데 도움을 주는 기술.
  4. 자바스크립트와 ECMA스크립트: 자바스크립트는 넷스케이프에서 시작되었지만, 현재는 ECMA 국제 표준화 기구에서 ECMAScript로 표준화되어 발전하고 있음.
  5. 자바스크립트의 특징: 자바스크립트는 멀티 페러다임 언어로 명령형, 함수형, 프로토타입 기반, 객체지향을 지원한다. ES6(ES2015)에서 등장한 기능들은 대부분의 현대 브라우저에서 지원되나, 오래된 브라우저에서는 일부 기능이 제한적일 수 있습니다. (예를 들면 인터넷 익스플로러)

자바스크립트의 멀티 패러다임 프로그래밍 언어라는 점에 대해서 조금 찾아보았다...

Javascript는 다음을 지원하는 멀티 패러다임 프로그래밍 언어이다.

1. 명령형 프로그래밍

  • 변수와 상태 관리: 자바스크립트에서는 변수를 사용하여 데이터를 저장하고 상태를 관리할 수 있습니다.
  • 반복문과 조건문: 자바스크립트는 for, while, do-while과 같은 반복문과 if, else-if, switch와 같은 조건문을 제공하여 명령어의 순차적 실행을 가능하게 합니다.
  • 함수와 절차적 프로그래밍: 자바스크립트에서는 함수를 정의하여 코드 블록을 묶고, 프로시저(절차)를 정의하여 문제를 작은 단위로 분해할 수 있습니다.
  • 사이드 이펙트: 명령형 프로그래밍에서는 문장(명령어)이 실행될 때 사이드 이펙트가 발생할 수 있습니다. 이는 프로그램의 상태를 변경하거나 외부 환경에 영향을 줄 수 있습니다.
  • 뮤터블한 데이터 구조: 자바스크립트에서 배열(Array)과 객체(Object)는 뮤터블(mutable)하며, 그말인 즉슨 내용을 변경할 수 있다는 뜻입니다. 이로 인해 데이터를 쉽게 조작하고 변경할 수 있습니다.

2. 함수형 프로그래밍

  • 일급 함수: 자바스크립트에서 함수는 일급 객체로 취급됩니다. 즉, 함수를 변수에 할당하거나 다른 함수의 인자로 전달하거나 함수를 반환할 수 있습니다. 이로써 함수를 값처럼 사용할 수 있어서 유연하고 강력한 기능을 제공합니다.
  • 불변성(Immutability): 함수형 프로그래밍은 데이터를 불변성으로 다루는 것을 강조합니다. 자바스크립트에서도 원시 타입 (숫자, 문자열, 불리언 등)의 데이터는 불변성을 가지고 있습니다.
  • 순수 함수: 함수형 프로그래밍에서는 부작용(side effect)이 없는 순수 함수를 중요시합니다. 같은 입력에 대해 항상 같은 결과를 반환하며, 외부 환경에 영향을 미치지 않는 함수를 의미합니다.
  • 고차 함수: 함수를 다루는 함수를 고차 함수라고 합니다. 자바스크립트에서는 고차 함수를 구현하기 쉽고 간편하게 함수를 조작할 수 있습니다. 예를 들어, map(), filter(), reduce()와 같은 고차 함수들이 배열을 조작하는 데에 자주 사용됩니다.
  • 클로저(Closure): 함수 내부에서 선언된 변수는 외부 함수를 벗어나는 경우에도 접근 가능하며, 이러한 메커니즘을 클로저라고 합니다. 클로저를 이용하여 상태를 보존하고 데이터를 은닉하는 등의 활용이 가능합니다.

3. 프로토타입 기반 객체지향 프로그래밍

  • 프로토타입 체인: 자바스크립트에서는 객체를 생성할 때 해당 객체의 부모(프로토타입) 역할을 하는 다른 객체를 연결합니다. 이렇게 연결된 객체들이 하나의 체인을 이루며, 객체가 어떤 프로퍼티나 메서드에 접근할 때, 해당 객체에서 찾지 못하면 프로토타입 체인을 따라 부모 객체에서 찾습니다.
  • 프로토타입 객체: 모든 객체는 자신의 프로토타입을 가리키는 __proto__라는 내부 프로퍼티를 가지고 있습니다. 이를 통해 객체의 상위(부모) 객체에 접근할 수 있습니다. ES6부터는 Object.getPrototypeOf() 메서드를 통해 명시적으로 프로토타입에 접근할 수도 있습니다.
  • 객체 생성과 상속: 자바스크립트에서는 객체를 생성할 때 생성자 함수를 사용하거나 리터럴 표기법을 사용합니다. 생성자 함수를 사용할 경우 new 키워드를 통해 객체를 생성하며, 생성자 함수의 프로토타입이 새로 생성된 객체의 프로토타입으로 연결됩니다. 이를 통해 상속을 구현할 수 있습니다.
  • 객체의 동적 변경: 자바스크립트에서는 객체의 프로퍼티를 동적으로 추가, 삭제, 수정할 수 있습니다. 프로토타입 체인을 통해 모든 객체가 공유하는 메서드나 프로퍼티를 쉽게 추가하거나 오버라이딩할 수 있습니다.
  • 클래스 없는 객체지향: 프로토타입 기반의 객체지향 프로그래밍은 클래스를 정의하고 인스턴스를 생성하는 전통적인 클래스 기반 언어와는 다릅니다. 객체를 생성하고 상속을 위한 프로토타입 객체를 직접 정의하여 사용하는 방식으로 클래스 없이 객체지향을 구현합니다.

기본 문법을 잘 파악하고 모던한 Javascript를 잘 이해하며, 적절한 라이브러리 및 프레임워크를 사용하며, 테스트와 디버깅을 잘 다룰 줄 아는 사람이 되자.

Tistroy의 Markdown 에디터를 사용하여 작성을 했는데, 코드블록 부분의 폰트가 마음에 안든다...