3. 설정파일 도입
💡INPUT → PROCESS → OUTPUT이 3가지에 거의 모든 개념이 들어가있다는 '생코'의 명언 저 위 순서에 따라 어떻게 다양한 형태의 자원들을 webpack 에게 던져줄 것인가? 또한 어떤 방법으로 가공할 것인가? 를 알아보는 게 중요하고, 또한 어떻게 유리한 형태로 내보낼 것인가? 를 알아보는 게 중요하다. 이 흐름을 컨트롤하기 위해서는 webpack 에게 어떻게 해라 시키는 방법이 있는데 이 방법에 대해서 알아보자. npx webpack —entry ./src/index.js —output ./public/index_bundle.js위의 명령어는 webpack 에게 entry 파일과 output을 선언하는 명령어였다. 그러나 프로젝트가 커질수록 이 명령어를 일일이 사용하기 번거롭기 때문에 ..
2020.09.27
2. Webpack 도입
Webpack 을 도입했을 때의 효과는 리팩토링이다. 리팩토링이란 구동되는 방법을 그대로 유지하면서 내부의 코드를 더 효율적으로 바꾸는 행위를 이야기한다. 코드의 전체적인 모습을 그대로 유지하면서 구형 브라우저에서 돌릴 수 있으며 여러가지 파일을 하나로 번들링하는 것을 Webpack 을 통해 해보자. 일단 nodejs 서버 프레임웤으로 해당 페이지를 올려보자.npm init 을 입력해 해당 프로젝트 폴더를 nodejs 초기 설정을 해주고, npm install -D webpack webpack-cli 저 -D 는 개발을하기 위한 옵션이다. 이렇게 2개를 다운받은 후에 src/index.js 파일을 만들어 html 에서 import 했던 구문들을 옮겨주자 // src/index.js import hello..
2020.09.27
no image
1. Webpack 소개
Javascript 를 더 잘 다루기 위한 기술이다. 이 그림은 웹팩이 무엇임을 잘 보여주는 그림이다. 웹사이트를 만들다 보면 js, css, 등등 여러 수많은 파일들이 생겨난다. 때문에 웹을 로딩해보면 정말많은 파일들이 로딩되는 것을 볼 수 있다. 이는 서버와의 통신이 그만큼 늘어나 좋지 않은 결과가 생기며 서로 독립적인 js 파일이 동일한 의미의 식별자를 사용하게 되어 원치 않은 결과가 생기기도 한다. 이를 위해 등장한 도구를 Bundler 라고 한다. 묶는 다는 뜻의 도구이다. Webpack, Broserify, Parcel 등등 여러가지 종류가 잇는데 이 중 가장 인기있는 도구인 Webpack 에 대해 알아보자. 이 번들러를 이용해 웹 개발하며 다양한 확장 파일들과 이것들을 쉽게 관리할 수 있게 ..
2020.09.27
[JavaScript] JavaScript 소개
JavaScript 란 무엇일까? 결론부터 말하자면 JavaScript 란 scripting language 이고 interpreted language 이다. 말이 좀 어려운데 간단하게 설명하자면 scripting 의 의미는 control 할 수 있도록 도와주는 의미이고, interpreted 의 의미는 컴파일 하지 않는 이미 해석되어있는 언어라는 의미이다. 후자의 의미가 좀 어려운데 다시 설명해보자. c언어와 같은 compile 기반의 프로그래밍 언어는 실행 되기 전에 컴파일러에 의해 compile 된 이후 실행된다. 허나 이와는 달리 JavaScript 는 run time 떄 그냥 바로 실행되버린다는 특징이 있다. 즉, script 로 되어있는 프로그램들을 실행할 때 인터프리터의 도움을 받아 다이나믹..
2020.09.23
no image
[JavaScript] Three.js 를 써보며
요즘 3D 이미지 시각화 툴을 만들어가면서 HTML5 표준이 미디어에 큰 힘을 불어넣어주고 있구나를 체감하고 있습니다. canvas 태그에 2D 이미지를 자유롭게 렌더링하거나, svg 값을 통해 이미지를 좀더 유동적으로 설정하며 시각화 툴을 만드는 와중에 3D 이미지 렌더링을 위한 webGL 에 관심이 가게 되어 자료들을 모으고 정리하는 중입니다. * WebGL 사용 후기 WebGL은 canvas 에 2D 이미지를 렌더링하는 것과 거의 비슷하게 점, 선, 삼각형 등 간단한 도형을 그려줍니다. 다만 2D가 아닌 3D 그래픽화 시켜준다는 것이 차이점입니다. Scene, Mesh, Geometry, Camera 등 여러 객체들을 초기화해주고 각각을 잘 연결시켜 Renderer에게 canvas에 그려줘~ 라고 ..
2020.09.02
[JavaScript] new
코딩하는 과정에서 객체를 정의할 때 해당 객체의 프로퍼티를 셋팅하도록 설정한다면 해당 객체를 추후 재활용하는데에 귀찮음과 어려움이 생길 수 있다. -> 이를 보완하기 위해 생성자를 새용해 원하는 프로퍼티의 인스턴스를 생성할 수 있도록 해줄 수 있다. 즉 생성자 패턴을 도입함으로써 코드의 재사용성을 대폭 높혀 레고 블럭인 객체를 좀더 자유자제로 사용할 수 있게 된다. - 함수를 호출할 때 new 를 붙이면 해당 함수는 새로운 객체를 만든 후에 이를 리턴한다. 해당 객체의 생성자를 호출한다고 생각하면 편하다. - 일반적인 객체지향 언어에서 생성자는 클래스의 소속이다. 하지만 자바스크립트에서 객체를 만드는 주체는 함수이다. 즉, 함수에 new 를 붙이는 것을 통해 객체를 만들 수 있다는 것은 자바스크립트의 특..
2020.08.28
no image
[JavaScript] 객체지향
객체 지향이라는 말은 코딩에 입문한 이후로 끊임없이 들었던 단어였다. 허나 정확한 개념에 대해 설명하라는 질문을 들었을 때 얼타기 일쑤인 말이기도 하다. 때문에 간단하게나마 정리하고자 한다. * 객체지향 프로그래밍 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이라고 할 수 있다. 이 객체들을 마치 레고블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라고 할 수 있다. 다시 말해서 객체지향 프로그래밍은 객체(레고블럭 조각) 를 만드는 것이다. 따라서 객체지향 프로그래밍의 시작은 객체가 무엇인가를 이해하는 것이라고 할 수 있다. 또한 객체지향을 비슷한 관점에서 부품화의 정점이라고도 할 수 있다. 즉, ..
2020.08.28
no image
[JavaScript] 브라우저 엔진이란
JavaScript 엔진은 JavaScript 코드의 인터프리터라고 보면된다. 여기서 인터프리터란 코드 한 구문씩 기계어로 해석해나가면서 실행해주는 프로그램이라고 알면 되고~ 여튼 JavaScript 엔진은 여러 종류의 웹 브라우저에서 찾아볼 수 있는데 대표적으로 Google Chrome의 V8, 블링크가 있으며, Mozilla Firefox의 SpiderMonkey 도 있다. 이 엔진들은 각자 퍼포먼스가 다르고, 지원되는 ECMAScript도 다르다. ECMAScript가 새로운 에디션을 발표하면 이에 맞춰서 JavaScript 엔진도 해당 사양을 따라가도록 점진적으로 업데이트를 해준다. 이름 설명 게코(Gecko) 모질라 재단에서 만든 레이아웃 엔진으로 파이어폭스, 모질라 선더버드, 시몽키 등이 이를..
2020.08.27

3. 설정파일 도입

TERAJOO
|2020. 9. 27. 01:25

💡
INPUT → PROCESS → OUTPUT

이 3가지에 거의 모든 개념이 들어가있다는 '생코'의 명언

저 위 순서에 따라 어떻게 다양한 형태의 자원들을 webpack 에게 던져줄 것인가? 또한 어떤 방법으로 가공할 것인가? 를 알아보는 게 중요하고, 또한 어떻게 유리한 형태로 내보낼 것인가? 를 알아보는 게 중요하다.

이 흐름을 컨트롤하기 위해서는 webpack 에게 어떻게 해라 시키는 방법이 있는데 이 방법에 대해서 알아보자.

npx webpack —entry ./src/index.js —output ./public/index_bundle.js

위의 명령어는 webpack 에게 entry 파일과 output을 선언하는 명령어였다. 그러나 프로젝트가 커질수록 이 명령어를 일일이 사용하기 번거롭기 때문에 설정파일을 사용하는 것이 좋다.

https://webpack.js.org

위 webpack 홈페이지에 들어가보면 webpack.config.js 파일에 대한 예제들이 나와있는 것을 볼 수 있다.

이 예제를 참고하면서 코딩하면 쉬울 것이다.

// webpack.config.js
const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'index_bundle.js'
  }
};

다음과 같이 config 파일을 코딩해주고

npx webpack —config webpack.config.js 을 입력해주면 번들링되어 파일화 된다. (참고로 파일을 webpack.config.js 라는 약속된 이름으로 해주었으면 npx webpack 만 입력해주어도 된다.)

즉 정리하자면 번들링하는 방법은

  • 명령어를 통해 엔트리 아웃풋 적어 시키기
  • webpack.config.js 에 코드 적어주고 npx webpack 입력


<> 모드 도입

webpack의 운영모드라는 것을 알아보자.

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'index_bundle.js'
  }
};

위 코드가 작성했었던 webpack.config.js 파일이다.

저 형태로 실행하게 되면 경고 문구가 하나 뜨는 것을 볼 수 있다. mode 설정을 하지 않아서 생기는 문구이다. 즉, 개발용인지 서비스 용인지 webpack에게 알려줘야 한다는 것이다.

const path = require('path');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'index_bundle.js'
  }
};

다음과 같이 mode 한 줄 추가해주면 경고 문구가 뜨지 않는 것을 볼 수 있다.

이 모드를 사용해서 개발용 번들과 배포용 번들을 따로둬서 따로 분리시켜 js 파일을 가질 수도 있다.

또는 하나의 webpack.config.js 하나의 파일 내에서 조건문을 설정해 switching 되게 할 수도 있으니 이 점은 따로 찾아서 처리해보자.


'책장 > Webpack' 카테고리의 다른 글

5. 플러그인  (0) 2020.09.27
6. Webpack 참고사항  (0) 2020.09.27
2. Webpack 도입  (0) 2020.09.27
1. Webpack 소개  (0) 2020.09.27

2. Webpack 도입

TERAJOO
|2020. 9. 27. 01:25

Webpack 을 도입했을 때의 효과는 리팩토링이다.

리팩토링이란 구동되는 방법을 그대로 유지하면서 내부의 코드를 더 효율적으로 바꾸는 행위를 이야기한다.

코드의 전체적인 모습을 그대로 유지하면서 구형 브라우저에서 돌릴 수 있으며 여러가지 파일을 하나로 번들링하는 것을 Webpack 을 통해 해보자.

일단 nodejs 서버 프레임웤으로 해당 페이지를 올려보자.

npm init 을 입력해 해당 프로젝트 폴더를 nodejs 초기 설정을 해주고, npm install -D webpack webpack-cli 저 -D 는 개발을하기 위한 옵션이다.

이렇게 2개를 다운받은 후에 src/index.js 파일을 만들어 html 에서 import 했던 구문들을 옮겨주자

// src/index.js
import hello_word from './src/hello.js'; 
import world_word from './src/world.js';
document.querySelector('div#root').innerHTML = hello_word + ' ' + world_word;

즉, 애플리케이션의 입구 역할의 파일을 index.js 로 설정해준것이다. 이것을 엔트리파일 이라고 한다.

index.js 파일이 hello.js 와 world.js 파일을 사용하고 있다. 그러면 이 의존성을 이용해 index.js 로 번들링 해보자. 이 때의 작업한 결과는 public이라는 폴더 안에다가 넣겠다.

위 과정을 진행하기 위해 webpack 을 실행시켜주자.

npx webpack —entry ./src/index.js -—output ./public/index_bundle.js

위 명령어를 쳐주면 된다. 의미는 src/index.js 의 엔트리 파일과 그 파일이 사용하고 잇는 모든 파일들을 하나로 만들어 public/index_bundle.js 에 가져다 놓아라 라는 의미이다.

그러면 public 폴더 밑에 번들화 된 파일이 만들어져 있을 것이다.

그 후 html 파일에 script src 연결해두면 해당 파일 하나만 커넥션해서 받아도 기존의 기능과 동일하게 돌아간다는 것을 확인할 수 있다.

이렇듯 import 를 webpack을 통해 모든 브라우저가 읽을 수 있게 번들링해줄 수 있게 되어 우리는 편하게 코딩해줄 수 있고, 브라우저도 쉽게 코드를 읽게 된, 서로 윈윈했다고 볼 수 있다.



'책장 > Webpack' 카테고리의 다른 글

5. 플러그인  (0) 2020.09.27
6. Webpack 참고사항  (0) 2020.09.27
3. 설정파일 도입  (0) 2020.09.27
1. Webpack 소개  (0) 2020.09.27

1. Webpack 소개

TERAJOO
|2020. 9. 27. 01:25

Javascript 를 더 잘 다루기 위한 기술이다.

 

이 그림은 웹팩이 무엇임을 잘 보여주는 그림이다.

 

웹사이트를 만들다 보면 js, css, 등등 여러 수많은 파일들이 생겨난다. 때문에 웹을 로딩해보면 정말많은 파일들이 로딩되는 것을 볼 수 있다. 이는 서버와의 통신이 그만큼 늘어나 좋지 않은 결과가 생기며 서로 독립적인 js 파일이 동일한 의미의 식별자를 사용하게 되어 원치 않은 결과가 생기기도 한다.

 

이를 위해 등장한 도구를 Bundler 라고 한다. 묶는 다는 뜻의 도구이다. Webpack, Broserify, Parcel 등등 여러가지 종류가 잇는데 이 중 가장 인기있는 도구인 Webpack 에 대해 알아보자.

 

이 번들러를 이용해 웹 개발하며 다양한 확장 파일들과 이것들을 쉽게 관리할 수 있게 되어 큰 이점을 가져갈 수 있다. 이는 계속 검색해보자.

 

 


 

일단 배우기 전에 웹팩 없이 웹 사이트를 만들어 보고 이 떄의 단점을 알아보는 것이 이해하기 좋다.

 

이 과정에서 특히 집중해서 봐야할 것이 모듈이다.

 

// index.html 
<html>  
    <head>     
        <script src='src/hello.js'></script>     
        <script src='src/world.js'></script> 
    </head>  
    <body>     
        <h1>Hellow, Webpack</h1>     
        <div id='root'></div>     
        <script>         
            document.querySelector('div#root').innerHTML = word;     
        </script> 
    </body>  
</html>
// src/hello.js var word = 'Hello'; 
// src/world.js var word = 'World'; 

 

다음과 같이 3개의 파일이 있다고 생각해보자. 이렇게 실행시키면 word 는 World 로 설정되어

 

 

이런식으로 페이지가 뜨게 된다. js 파일이 충돌되어 뒤에 호출된 파일이 값을 덮었기 때문이다.

 

이 처럼 큰 프로젝트에서는 여러 js 파일이 있게 되고 이 과정에서 이 충돌 과정이 필연적으로 생길 수밖에 없다. 때문에 이 충돌을 잘 다뤄야하는 기술 스텍이 필요해졌고 이렇게 나온 개념이 모듈 개념이다.

 

html 에서 모듈 사용법은 다음과 같다.

<html>  
    <head>     
        <!-- 
        <script src='/src/hello.js'></script>     
        <script src='/src/world.js'></script> 
        --> 
    </head>  
    <body>     
        <h1>Hellow, Webpack</h1>     
        <div id='root'></div>     
        <script type='module'>         
            import hello_word from './src/hello.js';  				
            import world_word from './src/world.js';  				
            document.querySelector('div#root').innerHTML = hello_word + ' ' + world_word;     
        </script> 
    </body>  
</html>
// World.js var word = 'World';  export default word;
// Hello.js var word = 'Hello';  export default word;

 

이런식으로 type='module' 선언해주고 js 파일을 import 하여 사용해주면 충돌이 나지 않게 된다. 또한 이런식으로 선언시 콘솔창에서 word 에 접근하려고 하면 에러가 생기게 된다.

 

export default word; 으로 word 를 선언해주게 되면 해당 식별자는 해당 파일 내에서 사용할 수 있기 때문이다.

 

 

 

허나 이런식으로 모든 js 파일을 일일이 불러오게 된다면 오만가지 파일들을 다운받게 되어 connection 이 엄청나게 많아지게 된다. 이러면 사용자나 서비스제공자 입장에서 더 많은 컴퓨팅 파워를 사용함이 필요해진다. 즉, 서비스 속도가 느려지게 되어 그만큼의 경쟁력이 사라지게 되는 것이다.

 

그래서 많은 사람들이 예전부터 웹에서도 모듈의 개념을 사용하고 싶다는 생각과 여러개 파일을 하나로 묶어서 제공하고 싶다는 생각을 한 사람들이 만든 도구가 번들러 라는 도구이다.

 

이 번들러 중 Webpack 에 대한 사용법, 장점 등을 알아보자.

 

 

'책장 > Webpack' 카테고리의 다른 글

5. 플러그인  (0) 2020.09.27
6. Webpack 참고사항  (0) 2020.09.27
3. 설정파일 도입  (0) 2020.09.27
2. Webpack 도입  (0) 2020.09.27

 

 

JavaScript 란 무엇일까?

 

결론부터 말하자면 JavaScript 란 scripting language 이고 interpreted language 이다.

말이 좀 어려운데 간단하게 설명하자면 scripting 의 의미는 control 할 수 있도록 도와주는 의미이고, interpreted 의 의미는 컴파일 하지 않는 이미 해석되어있는 언어라는 의미이다.

후자의 의미가 좀 어려운데 다시 설명해보자. c언어와 같은 compile 기반의 프로그래밍 언어는 실행 되기 전에 컴파일러에 의해 compile 된 이후 실행된다. 허나 이와는 달리 JavaScript 는 run time 떄 그냥 바로 실행되버린다는 특징이 있다.

즉, script 로 되어있는 프로그램들을 실행할 때 인터프리터의 도움을 받아 다이나믹하게 on-demand 로 그 자리에서 해석 하여 머신코드로 변환시키는 작업을 얻게 되는 것이다. 즉 이러한 특징으로 interpreted language 라고 한것이다.


 

JavaScript 는 1995년에 Netscape Communication 에서 Mocha라는 이름으로 개발되었다.

 

이후 사람들에게 쉽게 인식되기 위해서 마케팅 적으로 그 당시 유명했던 Java의 이름을 빌려 JavaScript 라고 불렸다.

이 때문에 현재 Trademark License 가 아직도 Oracle 에 있기도 한다. ㅎㅎ

 

여튼 이렇게 개발된 Java와 C랑 문법이 비슷하다는 특징이 있는 JavaScript 는 처음 나왔을 때는 그저그런 언어였다. 허나 (당시 욕심쟁이)MS 에서 JScript 를 개발했고 Netscape 이 없어진 후 당시 엄청난 기술이었던 AJAX 기술이 생기게 되었고 그 후 JavaScript BOOOOOOM! 이 발생하게 되었다.

 

이 BOOM 을 기점으로 HTML5 에 대한 표준이 생기고 ECMAScript 라는 JavaScript 의 표준이 생기는 등 큰 변화가 생겼고, 현재 엄청난 인기의 JavaScript (ECMAScript) 가 생기게 되었다!

💡 ECMAScript

ECMAScript 는 Ecma International 에 의해 관리되는 JavaScript 의 표준안이다. 5버전 까지는 클래스 코딩이 어렵고 함수 객체? 독자적인 코딩 문법으로 그렇게 큰 인기를 끌진 못했지만 6버전 이후 Class, let, const, Promise (await, async), block scoping 등 여러 절출 개념들이 생겨나 큰 인기를 끌게 되었다.


 

초기의 Web Browser 들은 Tag의 structuring 과 같은 HTML parsing에 큰 초점을 두었다. 허나 점차 시간이 지나면서 HTML 위에서 동작하는 script 언어가 필요했고, 해당 역할을 JavaScript 가 맡게 되었다. 물론 현재 Google 의 Dart 가 있지만 대부분 Javascript 를 사용하고 있다. ( 마치 IPv6가 생겼지만 계속 쓰고있는 IPv4 를 쓰는 느낌? )

💡 Interpreter

여튼 이런 script 언어가 생김에 따라 각 브라우저들은 해당 언어를 실행시키기 위해 위에서 말한

"Interpreter"

를 내장하게 되었다. Mozilla Firefox 는 SpiderMonkey라는 엔진을 가지고 있고, Chrome 과 Opera 는 V8이라는 엔진을 사용하고 잇다.

 

Javascript 를 사용하면 HTML 문서에 대해 style을 자유자재로 바꿀 수 있고, event 를 처리할 수도 있으며 AJAX 을 사용할 수도 있다.

 

 

'책장 > Javascript' 카테고리의 다른 글

Axios가 대괄호 인코딩을 해줄까? (feat. paramsSerializer)  (0) 2024.01.01
BOM / DOM ???  (0) 2021.04.28
[JavaScript] Three.js 를 써보며  (0) 2020.09.02
[JavaScript] new  (0) 2020.08.28

요즘 3D 이미지 시각화 툴을 만들어가면서 HTML5 표준이 미디어에 큰 힘을 불어넣어주고 있구나를 체감하고 있습니다.

canvas 태그에 2D 이미지를 자유롭게 렌더링하거나, svg 값을 통해 이미지를 좀더 유동적으로 설정하며 시각화 툴을 만드는 와중에 3D 이미지 렌더링을 위한 webGL 에 관심이 가게 되어 자료들을 모으고 정리하는 중입니다.


* WebGL 사용 후기

 WebGL은 canvas 에 2D 이미지를 렌더링하는 것과 거의 비슷하게 점, 선, 삼각형 등 간단한 도형을 그려줍니다. 다만 2D가 아닌 3D 그래픽화 시켜준다는 것이 차이점입니다.

 Scene, Mesh, Geometry, Camera 등 여러 객체들을 초기화해주고 각각을 잘 연결시켜 Renderer에게 canvas에 그려줘~ 라고 요청하는 느낌의 3D 렌더링 작업은 어떻게 보면 쉬울 수 있지만, 참으로 골치아픈 작업이라고 느끼고 있습니다. (별로 해보진 않았지만..)

현재 진행중인 프로젝트에서 위 처럼 각 객체들을 잘 연결시켜주어 하나의 Scene을 구성해주고 마지막에 Renderer에게 그려달라 작업하는 기본 코드를 응용해 MRI, CT 영상 DICOM 파일들을 canvas 상에서 3D 프린팅해주듯이 결과물을 나타내려고 매우 삽질중입니다. 자료가 너무 없는 건지.. 내가 잘 못 찾는 건지.. 게다가 웹서비스 툴이다보니 대용량 파일을 여러개 불러오고, 업로드하고 바이너리 값으로 바꿔 전처리하고 하는 과정에서 엄청난 정신력 소모 중입니다. 

프로그래머 진화과정 중 너무 쓰디쓴 맛을 느끼는 중이지만 더 열심히 조사하고 해결해야겠지요..ㅎㅎ 


여튼 Three.js 를 사용하면서 느낀 것은 HTML5 표준으로 바뀌며 프론트앤드에서 그래픽 작업같은 고성능 작업을 동적으로 처리할 수 있구나~를 느껴 JavaScript 가 더더더 중요해지구 있구나를 느꼈습니다. 

'책장 > Javascript' 카테고리의 다른 글

BOM / DOM ???  (0) 2021.04.28
[JavaScript] JavaScript 소개  (0) 2020.09.23
[JavaScript] new  (0) 2020.08.28
[JavaScript] 객체지향  (0) 2020.08.28

[JavaScript] new

TERAJOO
|2020. 8. 28. 17:23

코딩하는 과정에서 객체를 정의할 때 해당 객체의 프로퍼티를 셋팅하도록 설정한다면 해당 객체를 추후 재활용하는데에 귀찮음과 어려움이 생길 수 있다.

-> 이를 보완하기 위해 생성자를 새용해 원하는 프로퍼티의 인스턴스를 생성할 수 있도록 해줄 수 있다.

즉 생성자 패턴을 도입함으로써 코드의 재사용성을 대폭 높혀 레고 블럭인 객체를 좀더 자유자제로 사용할 수 있게 된다.

 

- 함수를 호출할 때 new 를 붙이면 해당 함수는 새로운 객체를 만든 후에 이를 리턴한다. 해당 객체의 생성자를 호출한다고 생각하면 편하다.

- 일반적인 객체지향 언어에서 생성자는 클래스의 소속이다. 하지만 자바스크립트에서 객체를 만드는 주체는 함수이다. 즉, 함수에 new 를 붙이는 것을 통해 객체를 만들 수 있다는 것은 자바스크립트의 특징이면서 자바스크립트가 추구하는 자유로움을 보여주는 사례라고 할 수 있다.

 


객체지향언어에서는 보통 클래스를 인스턴스화 시키기 위해 new 연산자를 사용한다. 

하지만 자바스크립트에서는 두개의 객체를 연결하기 위해 new 연산자를 사용한다.

 

즉, 전자의 경우 클래스로부터 작동을 복사하여 새로운 객체를 만드는 것이고, 후자의 경우 복사 과정 없이 그저 두 객체를 연결한다는 것이다. 따라서 자바스크립트의 new 키워드는 흔히 아는 new 키워드와 다르게 동작한다고 할 수 있다.

다시 말해 JavaScript 에서 new 연산자는 결국 새 객체를 다른 객체와 연결하기 위한 간접적인 우회 방법이며, 직접적으로 연결해주기 위해 Object.create() 을 이용하기도 한다.

 또한 [[Prototype]] 체계를 흔히들 프로퍼타입 상속이라고도 부르는데 상속은 기본적으로 복사를 수반하지만, 자바스크립트는 객체 프로퍼티를 복사하지 않고, 연결만 한다는 점에서 약간은 다르다. 따라서 프로퍼타입 상속이라는 말은 의미를 좀 헷갈리게 한다고 할 수 있고, 다른 적절한 단어인 위임이라고 생각하면 더 정확하지 않을까 한다.

'책장 > Javascript' 카테고리의 다른 글

[JavaScript] JavaScript 소개  (0) 2020.09.23
[JavaScript] Three.js 를 써보며  (0) 2020.09.02
[JavaScript] 객체지향  (0) 2020.08.28
[JavaScript] 브라우저 엔진이란  (0) 2020.08.27

객체 지향이라는 말은 코딩에 입문한 이후로 끊임없이 들었던 단어였다. 허나 정확한 개념에 대해 설명하라는 질문을 들었을 때 얼타기 일쑤인 말이기도 하다. 때문에 간단하게나마 정리하고자 한다.

 

* 객체지향 프로그래밍 

 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이라고 할 수 있다.

 

 이 객체들을 마치 레고블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라고 할 수 있다. 다시 말해서 객체지향 프로그래밍은 객체(레고블럭 조각) 를 만드는 것이다. 따라서 객체지향 프로그래밍의 시작은 객체가 무엇인가를 이해하는 것이라고 할 수 있다.

 또한 객체지향을 비슷한 관점에서 부품화의 정점이라고도 할 수 있다. 즉, 여러 로직들을 결합해 메소드라는 완제품을 만들고 이러한 메소드를 부품으로 해서 하나의 완제품인 독립된 프로그램을 만드는 것이라고 할 수 있다.

 이 때 서로 연관된 메소드와 그 메소드가 사용하는 변수들을 분류하고 그룹핑한 대상이 객체이고 이 과정에서 information hiding, Encapsulation 이라는 컨셉이 생겨난다.

cf) 객체란 변수와 메소드를 그룹핑한 것이라고 일단 생각하자.

 

* 인터페이스

잘 만들어진 부품이라면 부품과 부품을 서로 교환할 수 있어야 한다. 예를 들어 컴퓨터와 모니터는 서로가 교환관계에 있다. 이 이유는 모니터와 컴퓨터를 연결하는 케이블의 규격이 표준화 되어있기 때문이다. 이 때의 표준을 인터페이스라고 한다.

'책장 > Javascript' 카테고리의 다른 글

[JavaScript] JavaScript 소개  (0) 2020.09.23
[JavaScript] Three.js 를 써보며  (0) 2020.09.02
[JavaScript] new  (0) 2020.08.28
[JavaScript] 브라우저 엔진이란  (0) 2020.08.27

JavaScript 엔진은 JavaScript 코드의 인터프리터라고 보면된다.

여기서 인터프리터란 코드 한 구문씩 기계어로 해석해나가면서 실행해주는 프로그램이라고 알면 되고~

여튼 JavaScript 엔진은 여러 종류의 웹 브라우저에서 찾아볼 수 있는데 대표적으로 Google Chrome의 V8, 블링크가 있으며, Mozilla Firefox의 SpiderMonkey 도 있다.

연도 별 엔진 [출처 : 위키피디아]

이 엔진들은 각자 퍼포먼스가 다르고, 지원되는 ECMAScript도 다르다. ECMAScript가 새로운 에디션을 발표하면 이에 맞춰서 JavaScript 엔진도 해당 사양을 따라가도록 점진적으로 업데이트를 해준다. 

 

이름 설명
게코(Gecko) 모질라 재단에서 만든 레이아웃 엔진으로 파이어폭스, 모질라 선더버드, 시몽키 등이 이를 탑재하고 있다.
블링크(Blink) 웹키트에서 파생된 레이아웃 엔진으로 크롬, 오페라 등이 이를 탑재하고 있다.
트라이던트(Trident) 마이크로소프트의 레이아웃 엔진으로 인터넷 익스플로러, 아웃룩 익스프레스, 마이크로소프트 아웃룩, 그리고 윈앰프, 리얼플레이어의 미니 브라우저 등이 이를 탑재하고 있다.
프레스토(Presto) 오페라 소프트웨어의 사유 엔진으로 오페라가 탑재하고 있다. 오페라 15부터는 블링크로 교체되었다.
KHTML KDE 컨커러가 탑재하고 있다.
웹키트(Webkit) KHTML에서 파생된 레이아웃 엔진으로 사파리 등이 탑재하고 있다.
태즈먼(Tasman) 마이크로소프트의 레이아웃 엔진으로 맥용 인터넷 익스플로러가 탑재하고 있다.

 

이 때!! 브라우저마다 ECMAScript 를 지원하는 범위가 다르게 때문에, 웹 코딩시 흔히 듣는 "호환성 문제" 라는 것이 여기서 발생하게 된다.

이러한 문제를 해결하기 위해 바벨(babel) 이라는 오픈소스 JavaScript 트랜스 파일러를 사용한다. 바벨은 ES6 사양 기준으로 작성된 코드를 이전 버전과 호환되는 JavaScript 버전으로 변환해준다. 주요 브라우저는 ES5까지 지원하기 때문에 바벨이 ES5 코드로 변경해주어 호환성 문제를 해결할 수 있게 해준다.

 

 

'책장 > Javascript' 카테고리의 다른 글

[JavaScript] JavaScript 소개  (0) 2020.09.23
[JavaScript] Three.js 를 써보며  (0) 2020.09.02
[JavaScript] new  (0) 2020.08.28
[JavaScript] 객체지향  (0) 2020.08.28