Today I Learned
JS를 본격적으로 익혀두기 전에 JS를 대충 써보기만했지 어떤 특징인지, 어떤 장단점이 있는지 제대로 몰랐던거 같아서 이참에 정리를 한번 하고 가려한다.
JavaScript
JavaScript는 웹 페이지에 상호작용성과 동적 기능을 추가하는 데 필수적안 언어다.
HTML과 CSS와 함께 웹 개발의 세 가지 핵심 기술 중 하나로 웹사이트가 동적으로 렌더링되고 사용자 행동과 상호작용할 수 있게 한다.
JavaScript?
- 1995년 Netscape에 의해 처음 소개된 경량의 인터프리터 프로그래밍 언어
- 주로 웹 페이지에 상호작용성을 추가하기 위해 설계
- 현재는 클라이언트 측 웹 개발뿐만 아니라 서버 개발(Node.js), 모바일 앱 개발, 게임 개발 등 다양한 분야에서 사용되고 있음
특징
- 동적 타이핑(Dynamic Typing): 변수나 상수에 값이 할당될 때만 데이터 타입이 결정
- 싱글 스레드 기반: JavaScript는 호출 스택이 하나밖에 없어 한 번에 하나의 함수만 처리할 수 있다.
- 인터프리터 언어: 클라이언트의 웹 브라우저에 의해 해석되고 실행
- 이벤트 중심(Event-driven): 사용자 상호작용이나 시스템 이벤트에 반응하는 프로그래밍 방식을 지원.
- 프로토타입 기반: JavaScript는 클래스 기반이 아닌 프로토타입 기반의 객체지향 언어
- 함수형 프로그래밍 지원: 함수를 변수에 할당하거나, 다른 함수의 인자로 전달하거나, 함수에서 함수를 반환하는 등의 유연한 작업이 가능
장점
개발 측면
- 간단한 문법
- 크로스 브라우저 호환성: Chrome, Firefox, Safari, Internet Explorer 등 모든 주요 브라우저와 호환
- 풍부한 인터페이스: 애니메이션, 그래픽, 상호작용 요소 등을 생성할 수 있다.
- 디버깅 용이성: 코드를 디버깅하고 오류를 빠르게 찾을 수 있는 도구를 제공
웹 개발 측면
- 상호작용적 웹 페이지: 사용자 입력에 반응하는 상호작용적 웹 페이지를 만들 수 있음
- 개발 속도: HTML 파일 내에서 작성할 수 있어 개발 속도가 빠름
- 운영체제 제한 없음: 웹 브라우저에서 동작하는 스크립트 언어로 운영체제의 제한을 받지 않음
- HTML/CSS와의 통합: HTML과 CSS와 함께 웹사이트를 디자인하는 세 가지 핵심 언어 중 하나
- 비동기 프로그래밍: 콜백, 프로미스, async/await를 통한 비동기 프로그래밍을 지원하여 효율적인 I/O 작업이 가능
- 풍부한 생태계: React, Angular, Vue.js 등의 프레임워크와 다양한 라이브러리를 통해 복잡한 웹 애플리케이션을 쉽게 구축할 수 있음
단점
기술적 제한
- 보안 문제: JavaScript는 클라이언트 측 스크립팅 언어이므로 코드가 사용자의 컴퓨터에서 실행됩니다. 이는 적절히 구현되지 않으면 보안 문제로 이어질 수 있음
- 브라우저 지원: 모든 브라우저가 최신 버전의 JavaScript를 지원하지는 않습니다. 그래서 크로스 브라우저 애플리케이션을 개발할 때 호환성 문제를 일으킬 수 있음
- 성능 문제: JavaScript는 인터프리터 언어이기 때문에 컴파일 언어보다 느릴 수 있음.
- 오류 처리 부족: JavaScript는 좋은 오류 처리 메커니즘이 없어 디버깅이 어려울 수 있음
- 라이브러리 부족: JavaScript는 Java나 Python과 같은 다른 언어에 비해 라이브러리가 제한적
- 해석 방식 차이: 각 브라우저마다 JavaScript를 해석하는 방식이 다를 수 있어, 동일한 코드라도 결과가 달라질 수 있음
개발 측면
- 소스 코드 노출: 브라우저에서 소스 코드가 노출되어 있음
- 복사 용이성: 컴파일하지 않는 언어이므로 복사하여 그대로 사용할 수 있음
- 한정된 객체와 함수: 제한된 객체와 객체 함수를 제공
- 복잡성: JavaScript는 매우 강력한 언어이지만, 동시에 가장 복잡하고 배우기 어려운 언어 중 하나로 간주