[JavaScript] 자바스크립트는 어떤 언어일까?

핫걸코더지망생·2023년 9월 7일
0

JavaScript

목록 보기
2/6
post-thumbnail

자바스크립트는 명령형, 함수형, 프로토타입 기반의 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어입니다.
책과 블로그에서 많이 볼 수 있는 정의이다. 그런데 이 짧은 문장에 정확히 이해하고 있지 않은 수 많은 개념이 있다. 그래서 이 한 문장을 잘 뜯고 맛보고 즐겨보는 글을 정리해 보려 한다.


📍 1. 패러다임?

자바스크립트는 명령형, 함수형, 프로토타입 기반의 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어입니다.

💡 프로그래밍 언어는 설계 될때 각자 지향하는 패러다임을 설정한다.
💡 다중 패러다임 프로그래밍 언어란 하나 이상의 프로그래밍 패러다임을 지원하는 프로그래밍 언어이다.

💡 개발자가 프로그래밍을 위해 어떠한 '관점'을 가지고 개발을 할지에 대해서 결정을 하는데 도움을 주는 것을 의미합니다.


📍 2. 명령형과 함수형 ?

자바스크립트는 명령형, 함수형, 프로토타입 기반의 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어입니다.

1) 명령형(Imperative) 프로그래밍 -> 컴퓨터가 수행할 명령들을 순서대로 써 놓는 수행 기법 (HOW)

  • 쉬운예시

    👉 아파트 1 단지 정문 앞 사거리에서 우회전해서 있는 CU에 가서 하이볼 1캔 집어서 계산대로 가. 그리고 5000원 지폐 내고 800원 잔돈 받아와.

  • 코드예시

function double (arr) {
  let results = [];
  for (let i = 0; i < arr.length; i++){
    results.push(arr[i] * 2);
  }
  return results;
}

2) 선언형 (Declarative) 프로그래밍 -> 수행할 명령들을 순서대로 적어두는것이 아닌 무엇을 나타낼지에 대해서 관점을 두어서 프로그래밍을 수행하는 기법 (WHAT)

  • 쉬운예시

    👉 하이볼 사와

  • 코드예시

function double(arr) {
  return arr.map((item) => item * 2);
}

❓근데 JS의 내장함수인 map을 쓰면 선언형이 되는가? -> 내장형 함수로 바꿔쓰며 무엇이 바뀌었는가?를 생각해보면 정답은 추상화이다. 이미 하이볼을 사본 경험이 있다 라던가 지도어플이 있다라는 가정하에 결과에 집중한 언어

3) 함수형 프로그래밍의 장점

  • 여러 가지 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉽다.
  • 멀티 코어 혹은 여러 개 연산 프로세서를 사용하는 시스템에서 효율적인 프로그램을 만들기 쉽다.
  • 상태변화에 따른 부작용에서 자유로워지기 때문에 순수하게 기능 구현에 초점을 맞추어 설계할 수 있다.

4) 선언형(함수형) 프로그래밍의 단점

  • 순수함수를 구현하기 위해 코드의 가독성이 좋지 않을 수 있다.
  • 재귀적 코드 스타일은 무한루프에 빠질 수 있다.
  • 순수함수를 쓰는건 쉬울 수 있지만, 그것들을 조합하는 것은 쉽지 않다.

📍 3. 프로토타입 기반의 객체지향 언어?

자바스크립트는 명령형, 함수형, 프로토타입 기반의 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어입니다.

1) 프로토타입 (prototype)

prototype은 특정 객체에 대한 참조입니다. 즉 어떠한 공간을 가르키고 있습니다.

  • 생성자 함수가 인스턴스를 생성하게 되면 그 안에는 숨겨진 프로퍼티인 [[Prototype]] 이 존재하게 됩니다. 코드상에서는 __proto__로 표현됩니다. __proto__ 프로퍼티는 자신을 만든 생성자 함수의 prototype을 참조하는 역할을 합니다.
    즉, new 키워드를 통해 생성자 함수의 prototype과 인스턴스의 __proto__ 가 연결됩니다.

(2) 객체지향 프로그래밍?

💡 프로그래밍 방법론중에 하나로, 프로그램을 작성할 때 객체들을 만들어 객체와 객체가 서로 메소드를 통해 상호작용하게 만드는 것
💡 객체 지향 프로그래밍을 사용하는 대표적인 언어로는 C++, JAVA, C#이 있습니다.




📝 Reference

profile
산은 산, 물은 물, 코드는 코드

0개의 댓글