[ch1] 자바스크립트(javascript)란?

Maru·2022년 7월 10일
0
post-thumbnail

이 글은 저서 [인사이드 자바스크립트]를 공부하고자 작성되었으며, 핵심 개념과 새롭게 알게 된 내용을 위주로 기록하였습니다.

1.1 소개


자바스크립트는 웹 브라우저에서 동작하는 스크립트 언어이다.

🤔스크립트 언어란?

소스 코드를 컴파일(Compile)하지 않고도 실행할 수 있는 프로그래밍 언어이다.
별도의 컴파일 없이 내장된 번역기에 의해 번역 되므로 바로 실행 할 수 있다.
스크립트 언어는 소스를 작성한 후 컴파일 과정 없이 바로 실행하여 결과를 확인할 수 있다는 장점이 있는 반면에 번역 과정을 거쳐야 하기 때문에 다소 느리다는 단점이 있다.

C언어나 Java와 같은 비스크립트 언어의 경우 실행 속도가 빠른 장점이 있는 반면 컴파일 과정을 거쳐야 하는 등 개발 과정이 조금 복잡하다는 단점이 있다.
(출처: https://jokergt.tistory.com/81 [Gun's Knowledge Base:티스토리])

🤔proptotype이란

js는 클래스라는 개념이 없다.
그래서 기존 객체를 복사(cloning)해 새로은 객체를 생성하는 프로토타입 기반의 언어다.
프로토타입을 이용해 상속 기능을 흉내내도록 구현되었다.
클래스 대신 함수(function)new를 통해 클래스를 비슷하게 흉내낼 수 있다.

이해가 잘 가지 않아서 이미지를 찾아보았다.
java의 생성자 같은 느낌인걸까?? ... 아직까진 잘 감이 안온다.



(출처 : https://velog.io/@wmc1415/Javascript-Prototype%EC%9D%B4%EB%9E%80)




1.2 자바스크립트 활용 범위


브라우저 기반의 자바스크립트 라이브러리 뿐만 아니라, Node.js와 같은 서버 기반의 자바스크립트 환경에서 동작할 수 있는 라이브러리까지 존재. js만으로 웹 서버와 클라이언트인 웹 페이지 개발이 가능하다.
  • 웹 브라우저 : 자바스크립트 엔진 성능 향상을 강조
  • jQuery를 비롯해 knockout, backbone 등의 라이브러리가 웹 개발자 사이에서 중요한 컴포넌트
  • 웹OS의 등장 : 웹OS를 표방. 구글에선 크롬os라는 브라우저 기반의 os 선보임


1.3 자바스크립트 핵심 개념


1.3.1 ✔️ 객체

js에선 거의 모든 것이 객체다.

  • 기본 데이터 타입 : boolean, string, number (객체 처럼 다루기 가능)
  • 특별한 값 : null, undefine (객체 불가능)

1.3.2 ✅ 함수

js에선 함수도 객체다.
함수는 일급 객체(first class object)로 다뤄진다.


1.3.3 🚨 프로토타입

  • 모든 객체는 숨겨진 링크인 프로토타입을 가진다.
    이 링크는 해당 객체를 생성한 생성자의 프로토타입 객체를 가리킨다.
    (쉽게 설명하자면 날 낳은 부모의 생성자 프로토타입 객체)
  • [[prototype]] : 콘솔 창에서 이런 걸 본적이 많아 익숙하다...

1.3.4 😓 실행 컨텍스트와 클로저

  • js는 자신만의 독특한 과정으로 실행 컨텍스트를 만들고 그 안에서 실행이 이루어짐
  • 실행 컨텍스트는 자신만의 유효 범위 (scope)를 가지며, 이 과정에서 클로저를 구현 가능

1.4 JS와 객체지향 프로그래밍


js는 클래스를 지원하지 않지만 객체 지향 프로그래밍이 가능하다.
프로토타입 체인과 클로저로 상속, 캡슐화, 정보 은닉 등의 개념 소화 가능


1.5 JS와 함수형 프로그래밍


  • js는 함수형 프로그래밍이 가능
  • 함수형 프로그래밍 : 높은 수준의 모듈화 가능한 효율적인 프로그래밍 방법
  • 일급 객체인 함수 특성과 클로저를 활용해 이를 가능케한다.
  • 하지만 이 때문에 가독성이 떨어질수있다.

1.6 JS의 단점


  • 유연성 : js는 매우 유연한 언어이다. 뛰어난 표현력을 가진다. 하지만 디버깅이 어렵다.

  • 느슨한 타입 체크 : 타입 체크에 대한 자유를 제공, 덕분에 컴파일 타임에서 잡지 못한 오류갸 그대로 런타임 오류로 발견된다. 이때문에 실무에선 보통 typeScript를 사용하는 것이라고 알고있다.

  • 전역 객체의 존재 논란
    최상위 레벨의 객체들은 모두 전역 객체 안에 위치하는데, 이는 이름 충돌의 위험이 있다. 그러므로 프로그래머가 이름 작명에 신경써야한다.
    (음 아직 무슨 말인지 잘 모르겠다)

profile
함께 일하고 싶은 개발자

0개의 댓글