Three.js: ES6 ํด๋ž˜์Šค ํ‰๊ฐ€

์— ๋งŒ๋“  2017๋…„ 06์›” 19์ผ  ยท  92์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mrdoob/three.js

์ด '๊ด€์šฉ๊ตฌ' ์ƒ์†์ด ์ฝ”๋“œ์— ๋„์ž…๋˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

PointLight.prototype = Object.assign( Object.create( Light.prototype ), {

์ง„์ง€ํ•˜๊ฒŒ? ํ•จ์ˆ˜(์ค‘์ฒฉ ํ•จ์ˆ˜(ParentPrototype) ์‰ผํ‘œ ์ƒท๊ฑด ๋ธŒ๋ž˜ํ‚ท?

์˜ˆ๋ฅผ ๋“ค์–ด Materials ํด๋ž˜์Šค์— ์žˆ๋Š” ์ถฉ์‹คํ•œ ๋‘ ์ค„ ์Šคํƒ€์ผ์€ ํ›จ์”ฌ ๋” ๋ช…ํ™•ํ•˜๊ณ  ๊น”๋”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ํƒ€์ž…์„ ํ• ๋‹นํ•œ ๋‹ค์Œ ์ƒ์„ฑ์ž๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋. JavaScript ์งˆ๋ณ‘์— ๊ฑธ๋ ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ง์น˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ฐœ์ฒด ๋ฐ ์ƒ์†์ด ์ฝ”๋”ฉ๋˜๋Š” ๋ฐฉ์‹์„ ์ž์œ„ํ•ด์•ผ ํ•˜๋Š” ์ด์ƒํ•œ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด์— ๊ฑธ์ณ ํ•˜๋‚˜์˜ ์Šคํƒ€์ผ. ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Suggestion

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ TypeScript๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ €๋Š” JavaScript๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  92 ๋Œ“๊ธ€

๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ๋Œ€์‹  ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

PointLight.prototype = Object.create( Light.prototype );
Object.assign( PointLight.prototype, {
class PointLight extends Light

ํžˆํžˆ ๐Ÿ˜„ ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ์—†...

@sasha240100 ์–ธ์  ๊ฐ€...

@mrdoob ์€ ์ •ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ•œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์ง์ ‘์ ์œผ๋กœ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. OP๊ฐ€ ๋น„๊ต๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”

PointLight.prototype = Object.assign( Object.create( Light.prototype ), { 
    constructor: PointLight,
    prop1: 'something',
    method1: function someFunction() { .. },
    ...
});

~์™€ ํ•จ๊ป˜

function PointLight () { ... };

PointLight.prototype = Object.create( Light.prototype );

PointLight.prototype.constructor = PointLight;

PointLight.prototype.prop1 = 'something';

PointLight.prototype.method1 = function someFunction() { .. };

...

์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๊ธฐ ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ํ•œ ์ด๋Ÿฌํ•œ ์Šคํƒ€์ผ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๋ฝ ๋œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์•„๋‹ˆ๋ฉด Object.Assign ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์ง€๊ณ  ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์—์„œ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์œผ๋ฉด ์Šคํƒ€์ผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

@looeee @bfred-it @mrdoob ๊ทธ๋ƒฅ rollup-babel ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋น„๊ต :
ํ˜„์žฌ์˜. es5 + es6 ์กฐํ™” ๋ชจ๋“ˆ.

import { LineBasicMaterial } from './LineBasicMaterial';
import { Color } from '../math/Color';

function LineDashedMaterial( parameters ) {

    LineBasicMaterial.call( this );

    this.type = 'LineDashedMaterial';

    this.scale = 1;
    this.dashSize = 3;
    this.gapSize = 1;

    this.setValues( parameters );

}

LineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );
LineDashedMaterial.prototype.constructor = LineDashedMaterial;

LineDashedMaterial.prototype.isLineDashedMaterial = true;

LineDashedMaterial.prototype.copy = function ( source ) {

    LineBasicMaterial.prototype.copy.call( this, source );

    this.scale = source.scale;
    this.dashSize = source.dashSize;
    this.gapSize = source.gapSize;

    return this;

};


export { LineDashedMaterial };

ES2015+. ์ฝ”๋“œ๋Š” ๋™์ผํ•˜์ง€๋งŒ es2015+ with babel-plugin-transform-class-properties :

import { LineBasicMaterial } from './LineBasicMaterial';
import { Color } from '../math/Color';

export class LineDashedMaterial extends LineBasicMaterial {
  type = 'LineDashedMaterial';

  scale = 1;
  dashSize = 3;
  gapSize = 1;
  isLineDashedMaterial = true;

  constructor(parameters) {
    super();
    this.setValues( parameters );
  }

  copy(source) {
    super.copy(source);

    this.scale = source.scale;
    this.dashSize = source.dashSize;
    this.gapSize = source.gapSize;

    return this;
  }
}

three.js ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ES6 ๊ธฐ๋Šฅ:

์ €๋Š” ๋ชจ๋‘ ES2015+๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ์ฝ”๋“œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•˜๋ฏ€๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์„ฑ๋Šฅ์ด ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ˆ˜์—…๊ณผ ๊ด€๋ จํ•˜์—ฌ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Vector3.unproject ์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ํด๋ž˜์Šค ๊ตฌ๋ฌธ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์˜ฎ๊ธฐ๋‚˜์š”? ์ด ๋ฉ”์„œ๋“œ๋Š” ์‹ค์ œ๋กœ ์ƒˆ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐœ์ฒด ์ƒ์„ฑ์˜ ์–‘์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ ๊ฒŒ ์œ ์ง€ํ•˜๋Š” ์ค‘์š”ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ Object.assign ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

@Mugen87 @mrdoob es6 ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ์ •๋ณด์ž…๋‹ˆ๋‹ค. ํŠนํžˆ Object.assign :
image
์ด ๊ธฐ์‚ฌ ์—์„œ

Vector3.unproject์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ํด๋ž˜์Šค ๊ตฌ๋ฌธ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์˜ฎ๊ธฐ๋‚˜์š”? ์ด ๋ฉ”์„œ๋“œ๋Š” ์‹ค์ œ๋กœ ์ƒˆ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@ Mugen87 ๊ทธ๋ƒฅ ๋‚ด๋ณด๋‚ด์ง€ ์•Š์€ ๋ชจ๋“ˆ ๋ฒ”์œ„ ๊ฐœ์ฒด๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? ์ด ๊ฐ™์€;

const tempMatrix = new Matrix();    

export default class Vector3{
    unproject() {
        // uses tempMatrix
    }
}

์•„ ์˜ˆ, ์ด๊ฒƒ์ด ์ž‘๋™ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Š

@mrdoob ์™€์šฐ! ์ด๋ฏธ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ถ„๊ธฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์ผ๋ถ€ ํด๋ž˜์Šค๋ฅผ es6์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ปดํŒŒ์ผ ๋ฐฉ๋ฒ•์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?


@satori99 ์ „์—ญ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด Vector3 ์ฝ”๋“œ ์•ˆ์— tempMatrix ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด:

export default class Vector3 {
    static tempMatrix = new Matrix();

    unproject() {
        // uses Vector3.tempMatrix
    }
}

@mrdoob ์™€์šฐ! ์ด๋ฏธ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ถ„๊ธฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์ผ๋ถ€ ํด๋ž˜์Šค๋ฅผ es6์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ปดํŒŒ์ผ ๋ฐฉ๋ฒ•์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

๋‚˜์—๊ฒŒ ์ข‹์€ ์†Œ๋ฆฌ! ์ €๋Š” ํ˜„์žฌ WebVR์— ์ง‘์ค‘ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ €์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@sasha240100 ๋ชจ๋“ˆ ๋ฒ”์œ„ vars๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์ ์€ ์ž„์‹œ ๋ณ€์ˆ˜์— ์ ํ•ฉํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ์ฝ”๋“œ์—์„œ ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” private vars์™€ ๊ด€๋ จํ•˜์—ฌ "We are all Adults here"๋ผ๋Š” ํŒŒ์ด์ฌ์  ์ ‘๊ทผ ๋ฐฉ์‹์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์ง€๋งŒ ์ž„์‹œ ๋ณ€์ˆ˜๋Š” ์‹ค์ œ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ธฐ๋ณธ ๋ชจ๋“ˆ ์ง€์›์„ ํ™œ์„ฑํ™”ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ src ํŒŒ์ผ์„ ์ง์ ‘ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ์‹œ์ž๊ฐ€ ํ•„์š” ์—†๊ณ  ํŽธ์ง‘ํ•  ๋•Œ๋งˆ๋‹ค ํŠธ๋žœ์ŠคํŒŒ์ผํ•  ํ•„์š” ์—†์ด ํ›จ์”ฌ ๋” ์ฆ๊ฑฐ์šด ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ํด๋ž˜์Šค ์‚ฌ์–‘์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ด๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ผ์–ด๋“ค์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์Šค๋ ˆ๋“œ๊ฐ€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ ์ œ๋ชฉ์„ "Evaluate ES6 classes"์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Mugen87 @satori99 ํŒจํ„ด์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

method =(()=>{ 
    const vec3forThisScope =...; 
    return (arg)=>{...}
})()

typescript๋ฅผ ์‹œ๋„ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋‹ค๋ฅธ ๋ฒ„์ „์˜ js๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TypeScript ๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ + ์œ ํ˜• ๊ฒ€์‚ฌ๊ธฐ์ด์ž JavaScript์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•œ ์˜ต์…˜์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ .ts ํŒŒ์ผ๋กœ ์˜ฎ๊ธฐ๊ณ  ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ES6์œผ๋กœ ์ ์ง„์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์Šต๋‹ˆ๋‹ค.

TypeScript๋ฅผ ์‚ฌ์šฉํ•ด ๋ณธ ์ ์ด ์—†๋‹ค๋ฉด ๋ฌด์„ญ๊ฒŒ ๋“ค๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ํฐ ํ•™์Šต ๊ณก์„ ์ด ์•„๋‹ˆ๋ฉฐ ๊ฐ€์ ธ์˜ฌ ์ด์ ์— ๋Œ€ํ•ด ์ง€๋ถˆํ•˜๊ธฐ์—๋Š” ์ ์€ ๋น„์šฉ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. TypeScript ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ด ์ „ํ™˜์„ ๋•๊ณ  ํ˜„์žฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๊ฒŒ ๋˜์–ด ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ๊ธฐ์‚ฌ:

ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž Anders Hejlsberg์˜ ๋ง์„ ์ธ์šฉํ•˜์ž๋ฉด TypeScript๋Š” JavaScript๊ฐ€ ๋Œ€ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋Š” ํด๋ผ์ด์–ธํŠธ ๋ฐ ๋‚ด๋ถ€ ํŒ€์˜ ๋ถˆ๋งŒ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชฉํ‘œ๋Š” ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€ ๋ฐ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด๋ผ๋Š” ์ด์ ์„ ํฌ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด์„œ "ํด๋ž˜์Šค, ๋ชจ๋“ˆ ๋ฐ ์ •์  ์œ ํ˜•๊ณผ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ JavaScript๋ฅผ ๊ฐ•ํ™”"ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์–ธ์–ด์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์ถ•๋œ "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ทœ๋ชจ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์–ธ์–ด"๊ฐ€ ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ TypeScript๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ €๋Š” JavaScript๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

@mrdoob

TypeScript๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ TypeScript๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์œ ํšจํ•œ ์ด์œ ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ๊ฒ€์‚ฌ๋งŒ์„ ์œ„ํ•œ ๋ชจ๋“  ์ถ”๊ฐ€ ์ฝ”๋“œ ๋ผ์ธ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ ์–ธ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ์ด๊ฒƒ์ด ๋ฐ”๋‹๋ผ JavaScript ์ฝ”๋“œ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ž…๋ ฅ๋œ ์ฝ”๋“œ๊ฐ€ ์ œ๊ฑฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ๋œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์š”์ ๊ณผ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์—์„œ ๊ฐœ๋ฐœํ•  ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์„ ์™„์ „ํžˆ ๋†“์น˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ JavaScript๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. TypeScript์˜ ์š”์ ์€ JavaScript์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์—์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ •๋œ ECMAScript ๋Œ€์ƒ ๋ฒ„์ „์—์„œ JavaScript๋กœ ์ปดํŒŒ์ผ๋œ ์œ ํ˜•์ด ์žˆ๋Š” JavaScript๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ๊ฐ’์€ 'es3', 'es5', 'es2015', 'es2016', 'es2017' ๋˜๋Š” ' ์ด์Šค๋„ฅ์ŠคํŠธ'.

Typescript๋Š” JavaScript์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๊ฒƒ์„ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€ ์—†์ด ์ ์ง„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ ์ง„์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ES6 ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌํŒฉํ† ๋ง๊ณผ ํ•จ๊ป˜ ์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๋Œ€์‹ ์— ์—ฌ๊ธฐ์—์„œ ์–ธ๊ธ‰ํ•˜๋Š” ์œ ์ผํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ์˜ˆ๋Š” ์•„๋ž˜ TypeScript ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

@joejordanbrown

ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์ด๋ผ๋Š” ์ ์— ๋Œ€ํ•ด ๋‹น์‹ ๊ณผ ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Google์— typescript vs ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ์šฉ์–ด๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉฐ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ Flow์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด์ด ๋‘ ๊ฐ€์ง€์˜ ์žฅ๋‹จ์ ์„ ํ† ๋ก ํ•˜๋Š” ๋งŽ์€ ๊ธฐ์‚ฌ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์œ ํ˜• ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ ˆ์ถฉ์•ˆ์œผ๋กœ ๋ณด์ด๋Š” ์œ ํ˜•์€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์ด ๋งŒ๋“  ๊ฒฐ๊ณผ๋ณด๋‹ค ๋” ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด Typescript๋ฅผ ์ €์žฅํ•˜์‹ญ์‹œ์˜ค. ํŠนํžˆ ์ฒ˜์Œ์—๋Š” HTML๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์—ˆ๋˜ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๋‚ด ์›๋ž˜ ์š”์ ์€ JavaScript ์งˆ๋ณ‘์„ ์•…ํ™”์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. JavaScript๋Š” three.js์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ๊ฒฐ๊ณผ์— ๋•Œ๋•Œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฑฐ์˜ ์žฅ๋‚œ๊ฐ์— ๊ฐ€๊นŒ์šด ๊ฐ„๋‹จํ•œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. Typescript๋Š” ๋ฌด์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

2017๋…„ 9์›” 6์ผ ์˜คํ›„ 1์‹œ 55๋ถ„์— Joe [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@mrdoob

TypeScript๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ TypeScript๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์œ ํšจํ•œ ์ด์œ ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ๊ฒ€์‚ฌ๋งŒ์„ ์œ„ํ•œ ๋ชจ๋“  ์ถ”๊ฐ€ ์ฝ”๋“œ ๋ผ์ธ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ ์–ธ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ์ด๊ฒƒ์ด ๋ฐ”๋‹๋ผ JavaScript ์ฝ”๋“œ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ž…๋ ฅ๋œ ์ฝ”๋“œ๊ฐ€ ์ œ๊ฑฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ๋œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์š”์ ๊ณผ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์—์„œ ๊ฐœ๋ฐœํ•  ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์„ ์™„์ „ํžˆ ๋†“์น˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ JavaScript๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. TypeScript์˜ ์š”์ ์€ JavaScript์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์—์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ •๋œ ECMAScript ๋Œ€์ƒ ๋ฒ„์ „์—์„œ JavaScript๋กœ ์ปดํŒŒ์ผ๋œ ์œ ํ˜•์ด ์žˆ๋Š” JavaScript๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ๊ฐ’์€ 'es3', 'es5', 'es2015', 'es2016', 'es2017' ๋˜๋Š” ' ์ด์Šค๋„ฅ์ŠคํŠธ'.

Typescript๋Š” JavaScript์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๊ฒƒ์„ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€ ์—†์ด ์ ์ง„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ ์ง„์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ES6 ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌํŒฉํ† ๋ง๊ณผ ํ•จ๊ป˜ ์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๋Œ€์‹ ์— ์—ฌ๊ธฐ์—์„œ ์–ธ๊ธ‰ํ•˜๋Š” ์œ ์ผํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค.

์˜ˆ์ œ๋Š” TypeScript ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํด๋ž˜์‹ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ˆ์ œ
์œ ํ˜• ์ถ”๊ฐ€ ์˜ˆ
์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ์œ ํ˜• ์ถ”๊ฐ€ ์˜ˆ
ํด๋ž˜์Šค ์‚ฌ์šฉ ์˜ˆ
์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ํด๋ž˜์Šค ์‚ฌ์šฉ ์˜ˆ์ œ
โ€”
์Šค๋ ˆ๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ๋ณด๊ฑฐ๋‚˜ ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐํ•˜์„ธ์š”.

^ ์ผ๊ด€์„ฑ์ด ์žˆ๋Š” ํ•œ ๊ดด๋ฌผ ๊ฐ™์€ ํŒจํ„ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@joejordanbrown ์€ ๋‹น์‹ ์ด typescript์™€ ์‚ฌ๋ž‘์— ๋น ์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ํฌํฌํ•˜๊ณ  ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ๋กœ ์ด์‹ํ•˜์„ธ์š”. ์“ฐ๋ฆฌ.ํ‹ฐ! ๐Ÿ™Œ

@pailhead

๊ทธ๊ฒƒ์€ ์„ ํƒ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋™์˜ํ•˜๊ณ  ๋™์˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ •์ƒ์ด์ง€๋งŒ ์ •์ƒ์ž…๋‹ˆ๋‹ค! ๋‹น์‹ ์€ ํ•ญ์ƒ "์ด๊ฒƒ ๋Œ€ ์ €๊ฒƒ", "๋‚ด ๊ฒƒ์ด ๋‹น์‹ ๋ณด๋‹ค ๋‚ซ๋‹ค"๋Š” ๊ฒƒ์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ์ž ์žฅ๋‹จ์ ์ด ์žˆ๋Š”๊ฑธ๋กœ ์••๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์„ ํ‰๊ฐ€ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น„๊ต๋Š” ์ข‹์€ ์ผ์ด๋ฉฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๋”์šฑ ๋ฐœ์ „์‹œํ‚ต๋‹ˆ๋‹ค.

๋‹น์‹ ์€ Flow๋ฅผ ์–ธ๊ธ‰ํ–ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Flow ๋ผ์ด์„ ์Šค๋Š” BSD 3์ ˆ " Facebook BSD + Patents License "์ด๋ฉฐ Apache Software Foundation์€ ์ƒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ด ๋ผ์ด์„ ์Šค์˜ ์‚ฌ์šฉ์„ ๊ธˆ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • TypeScript์— ๋น„ํ•ด IDE ์ง€์›์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

  • TypeScript์— ๋น„ํ•ด ์‚ฌ์šฉ์ž ๊ธฐ๋ฐ˜์ด ์ ๊ณ ,

  • ๊ณต๊ฐœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํƒ€์ดํ•‘์€ ๋ถˆ์™„์ „ํ•˜๊ณ  TypeScript์—๋Š” ์ž˜ ๊ด€๋ฆฌ๋œ ํƒ€์ดํ•‘์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ์„œ ๋ฐ ๋ฆฌ์†Œ์Šค๋Š” ์ฐพ๊ธฐ ์–ด๋ ต๊ณ  TypeScript์— ๋น„ํ•ด ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ ๋ฌธ์„œ, ์ฑ…, ๋น„๋””์˜ค ๋ฐ ๊ธฐํƒ€ ๋งŽ์€ ์ „์ž ํ•™์Šต ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Flow๋Š” // @flow ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ง€์ •๋œ .js ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. .js ํ™•์žฅ์ž๊ฐ€ ํ‘œ์‹œ๋˜๋ฏ€๋กœ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ JavaScript๋ฅผ ์˜ˆ์ƒํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” FlowType์ž…๋‹ˆ๋‹ค. TypeScript๋Š” ์ž์ฒด ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ .ts . ์ด๊ฒƒ์€ ๋˜ํ•œ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ TypeScript ๋ฐ JavaScript ์ถœ๋ ฅ ํŒŒ์ผ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ํฐ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ.

Google์กฐ์ฐจ๋„ TypeScript๋ฅผ ํฌ๊ฒŒ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” TypeScript์— ๋Œ€ํ•œ ํ™•์‹ ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋˜๋Š” ์—ฌ๊ธฐ ์—์„œ ๊ฒŒ์‹œ๋ฌผ์„ ์ฝ์œผ์‹ญ์‹œ์˜ค.

Typescript๋Š” 2017๋…„ 3์›”๋ถ€ํ„ฐ ๋ฌด์ œํ•œ ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์ด ํ—ˆ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. TypeScript์˜ TypeScript ๋ฐ Angular๋Š” Google ์• ๋„๋ฆฌํ‹ฑ์Šค, Firebase, Google Cloud Platform ๋ฐ ๋ฒ„๊ทธ ์ถ”์ , ์ง์› ๋ฆฌ๋ทฐ, ์ œํ’ˆ ์Šน์ธ ๋ฐ ์ถœ์‹œ ๋„๊ตฌ์™€ ๊ฐ™์€ ์ค‘์š”ํ•œ ๋‚ด๋ถ€ ๋„๊ตฌ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Typed ์–ธ์–ด ์‚ฌ์šฉ์— ๋Œ€ํ•œ ํ† ๋ก ์„ ์—ด๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ด ์•„์ด๋””์–ด์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ์‚ดํŽด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค. @mrdoob ์€ ์•„์ด๋””์–ด์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์กฐ์ฐจ ์™„์ „ํžˆ ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


@arctwelve
์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณต์žกํ•˜์ง€ ์•Š๊ณ  Typed ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.


@mrdoob
์ „ํ˜€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ES6 ํด๋ž˜์Šค๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ๋ถ„๊ธฐ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. three.ts๋ผ๊ณ  ํ•˜๋Š” ์ž์‹ ๋งŒ์˜ ํฌํฌ๋ฅผ ๋งŒ๋“ค์–ด ๋Œ€๋‹ตํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ฆฌ์„์€ ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด 1๊ฐœ์˜ ํ”„๋กœ์ ํŠธ์— ์ง‘์ค‘ํ•˜๊ณ  ์ตœ์„ ์„ ๋‹คํ•˜๋Š” ๋Œ€์‹  OSS ํ”„๋กœ์ ํŠธ๋ฅผ ํฌํฌํ•˜๊ณ  ์ž์‹ ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด ์ข‹์€ OSS ๊ด€ํ–‰์— ๋ฐ˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ์—์„œ๋“  ๊ทธ๋“ค์ด ์„ ํ˜ธํ•˜๋Š” ํ”„๋กœ์ ํŠธ์— ์ง‘์ค‘ํ•˜๊ณ  ์ง‘์ค‘ํ•˜๋Š” ์ •๋ง ์—ด์•…ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ๋กœ ๋๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์žฅ์ ๊ณผ ๋‹จ์ ์— ๋Œ€ํ•ด ๊ณต๊ฐœ ํ† ๋ก ์„ ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์•…๋งˆ์˜ ๋ณ€ํ˜ธ์ธ ์—ญํ• ์„ ํ•˜๋ ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๊ทธ๊ฐ€ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์—ด๋ฆฐ ํ† ๋ก ์„ ํ•˜๋‹ค

์ •๋ง ์งง์•˜์–ด์š” :)

์ €๋„ ๋น„์Šทํ•œ ๊ด€์ ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ณ  JS๋Š” ํ‘œ์ค€ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์šฉ์œผ๋กœ JS๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋  ์ˆ˜ ์—†์ง€๋งŒ ๋‹ค๋ฅธ ๊ฒƒ์„ ์„ ํƒํ•˜๋ฉด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Flow๋ฅผ typescript์˜ ๋Œ€์•ˆ ์ค‘ ํ•˜๋‚˜๋กœ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์šฐ๋ฆฌ๋Š” ์ •๋ง ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Mugen87์—์„œ ์ œ๋ชฉ์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
ES6 ํด๋ž˜์Šค๋ฅผ ํ‰๊ฐ€ ํ•˜๊ธฐ ์œ„ํ•ด JavaScript ์งˆ๋ณ‘ ์ œ๊ฑฐ

์›๋ž˜ ์ œ๋ชฉ์€ ์Šคํƒ€์ผ ์ผ๊ด€์„ฑ์˜ ๋ถ€์กฑ์— ๋Œ€ํ•ด (๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ) ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์–ด๋–ค ๊ณณ์—์„œ๋Š” Object.assign() ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ๋‹ค๋ฅธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์—ฌ๊ธฐ์—์„œ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋ฌธ์ œ์˜ ํ˜„์žฌ ์ œ๋ชฉ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ ๋ฌธ์ œ๊ฐ€ ์ƒˆ๋กœ์šด ์–ธ์–ด ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋…ผ์˜๋กœ ์Šน๊ฒฉ๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ €๋Š” typescript์™€ es6 ๋ชจ๋‘์—์„œ ์ฝ”๋“œ๊ฐ€ ์ƒ๋‹นํžˆ ์ผ๊ด€์„ฑ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

https://github.com/mrdoob/three.js/wiki/Mr.doob 's-Code-Style%E2%84%A2

๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

A) "...Object.assign ์‚ฌ์šฉ ..."
B) "...Object.assign์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค"

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด์— ๊ฑธ์ณ ํ•˜๋‚˜์˜ ์Šคํƒ€์ผ. ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Materials ํด๋ž˜์Šค์— ์žˆ๋Š” ์ถฉ์‹คํ•œ ๋‘ ์ค„ ์Šคํƒ€์ผ์€ ํ›จ์”ฌ ๋” ๋ช…ํ™•ํ•˜๊ณ  ๊น”๋”ํ•ฉ๋‹ˆ๋‹ค.

์ฒซ๊ธ€์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ œ์•ˆํ•œ๋‹ค:

  1. ์ด ๋ฌธ์žฅ์„ ๋ฐ˜์˜ํ•˜๋„๋ก ์ œ๋ชฉ์„ ํŽธ์ง‘ํ•˜๊ณ , ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด์— ํ•˜๋‚˜์˜ ์Šคํƒ€์ผ์„ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ , ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ํŽธ์ง‘ํ•˜๋Š” ๋“ฑ.
  2. es6 ํด๋ž˜์Šค๊ฐ€ ํ‰๊ฐ€๋  "es6 ํด๋ž˜์Šค ํ‰๊ฐ€"๋ผ๋Š” ์ œ๋ชฉ์˜ ์ƒˆ ํ† ๋ก  ์‹œ์ž‘
  3. "์ž…๋ ฅ๋œ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ 3๊ฐ€์ง€ ํ‰๊ฐ€"๋ผ๋Š” ์ œ๋ชฉ์˜ ์ƒˆ ํ† ๋ก  ์‹œ์ž‘

์–ด์จŒ๋“  ์šฐ๋ฆฌ๋Š” ์ •๋ง ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก . @joejordanbrown TypeScript ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ์ƒˆ ์ฃผ์ œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

Btw, ์ด์ „ ๋Œ€ํ™”๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ๋„ ๋‚˜์œ OSS ๊ด€ํ–‰์ž…๋‹ˆ๋‹ค... https://github.com/mrdoob/three.js/issues/341#issuecomment -47000692

์ฃผ์ œ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

https://github.com/mrdoob/three.js/issues/11552#issuecomment -319449068

์‹œ๋„ํ•ด ๋ณผ ์‚ฌ๋žŒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ž, ๊ทธ๋Ÿผ... ์šฐ์„ 

์ฒซ ๋ฒˆ์งธ ํŒจํ„ด(์ตœ๊ณ ์˜ IMO):

function MyClass() {...}

MyClass.prototype = Object.assign( Object.create( MyClassToInherit.prototype ), {

    constructor: MyClass,

    prop1: 'something',

    method1: function someFunction() { .. },

    ...

});

๋‘ ๋ฒˆ์งธ ํŒจํ„ด:

function MyClass() {...}

MyClass.prototype = Object.create( MyClassToInherit.prototype );

MyClass.prototype.constructor = PointLight;

MyClass.prototype.prop1 = 'something';

MyClass.prototype.method1 = function someFunction() { .. };

...

@arctwelve ์ด ํŒจํ„ด์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž์œ„ ํ–‰์œ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค!

๋ฌด์—‡๋ณด๋‹ค ๋จผ์ € ๊ฐ์ฒด ์ƒ์†์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Object.assign ๋Š” ์—ฌ๊ธฐ์— ๊ฐœ์ฒด ์ƒ์†์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋ถ„๋ช…ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด MyClass.prototype ์˜ ๋งŽ์€ ์ค„์—์„œ ์ƒ์†๋œ ๊ฐœ์ฒด๋ฅผ ์žƒ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋‘˜์งธ, ๋‹ค์ค‘ ์ƒ์†์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์€ ํ›จ์”ฌ ๋” ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.
์…‹์งธ, ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋Š” ์ฝ์„ ์ˆ˜ ์žˆ๊ณ  ์ฒซ ๋ฒˆ์งธ ํฌ์ธํŠธ์ฒ˜๋Ÿผ ๋งŽ์€ ๋ผ์ธ์—์„œ ์†์‹ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋„ท์งธ, ๋™์ผํ•œ ํŒŒ์ผ์— 3, 4, 5... ๋“ฑ์˜ ํด๋ž˜์Šค๊ฐ€ ์žˆ์„ ๋•Œ ํ›จ์”ฌ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋™์ผํ•œ ์œ„์น˜(๊ด„ํ˜ธ โ€‹โ€‹์•ˆ)์—์„œ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์„ฏ์งธ, ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ถ€ "์ƒ์†" ์†์„ฑ์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅธ ๋ณต์‚ฌ๋ณธ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ( @looeee ) ์ด๊ฒƒ์€ ์„ฑ๋Šฅ์„ ์œ„ํ•œ ๊ฒƒ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์€ ํ”„๋กœํ† ํƒ€์ž…์„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  ํŒŒ์ผ ๊ตฌ๋ฌธ ๋ถ„์„์ด ๋ฐœ์ƒํ•  ๋•Œ ๋” ์ตœ์ ํ™”๋ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“  !

์ด์ œ ES6 ๊ตฌ๋ฌธ์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

@mrdoob

๋‚˜์—๊ฒŒ ์ข‹์€ ์†Œ๋ฆฌ! ์ €๋Š” ํ˜„์žฌ WebVR์— ์ง‘์ค‘ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ €์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์‹œ๋„ํ•ด ๋ณผ ์‚ฌ๋žŒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

es6 ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“œ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์šฐ๋ฆฌ ์ž์‹ ์˜ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์€ ํ”„๋กœํ† ํƒ€์ž…์„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  ํŒŒ์ผ ๊ตฌ๋ฌธ ๋ถ„์„์ด ๋ฐœ์ƒํ•  ๋•Œ ๋” ์ตœ์ ํ™”๋ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ํ™•์‹ ํ•ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” Object.Assign ๊ฐ€ ๋” ๋Š๋ฆด ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ๊ฑฑ์ •ํ•  ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ถฉ๋ถ„ํ•œ์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์ ˆ๋Œ€์ ์œผ๋กœ: https://jsperf.com/inline-prototype-vs-assign-prototype/1

ํฌ๋กฌ ๋ฒ„์ „ 61.0.3163.100(Build officiel)(64๋น„ํŠธ)์—์„œ ํ• ๋‹น๋œ ํ”„๋กœํ† ํƒ€์ž…์€ ์•ฝ 60% ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กœ์šด. ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์— ์ ์šฉ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. Firefox์—์„œ๋Š” ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค( Object.Assign ~3% ๋” ๋น ๋ฆ„). ๋ฐ˜๋ฉด Edge์—์„œ๋Š” Object.Assign ~33% ๋” ๋Š๋ฆฝ๋‹ˆ๋‹ค .

๊ทธ๋Ÿฌ๋‚˜ ์–ด์จŒ๋“  ๋‚˜๋Š” ์ด๊ฒƒ์ด ์–ด๋–ค ์Šคํƒ€์ผ์ด ๋” ๋‚˜์€์ง€์— ๋Œ€ํ•œ ๋…ผ์Ÿ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋Š๋ฆฐ ์ „์ฒด(Chrome์˜ ์ธ๋ผ์ธ ํ”„๋กœํ† ํƒ€์ž…)์กฐ์ฐจ๋„ ์—ฌ์ „ํžˆ ์ดˆ๋‹น 180,000๋ฒˆ ์ด์ƒ์˜ ์ž‘์—…์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ์œผ๋ฉฐ ์•„๋งˆ๋„ ๋ช‡ ์ฒœ ๋ฒˆ์˜ ์ž‘์—…์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค์ •์€ ์ฝ”๋“œ์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์•„๋งˆ๋„ ๋ช‡ ๋ฐ€๋ฆฌ์ดˆ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ €์—๊ฒŒ๋Š” Object.Assign ์Šคํƒ€์ผ์ด ๋” ๊น”๋”ํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šฐ๋ฉฐ ์ด๊ฒƒ์ด ์ฐฌ์„ฑํ•˜๋Š” ์ฃผ์š” ์ฃผ์žฅ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ์ด๊ฒƒ์€ ํŒŒ์ผ๋‹น ์•ฝ ๋ช‡ ๋ฐ€๋ฆฌ์ดˆ์ด๋ฉฐ ํŒŒ์ผ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ์ฒ˜์Œ์œผ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„๋  ๋•Œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค... ๊ทธ๋Ÿฌ๋‚˜ threejs์™€ ๊ฐ™์€ ํฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ ์ด๋“์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์•ฝ 200๋ฐ€๋ฆฌ์ดˆ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋” ์ด์ƒ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†๋Š” ์ „๋ฉด ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ 3scd์˜ ์ œํ•œ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”!

๋‚˜๋Š” threejs๋กœ Angular ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ ํ•˜๋Š”๋ฐ ํ•ญ์ƒ threejs์˜ ๋ชจ๋“  ๋ถ€๋ถ„์„ ํ•ดํ‚นํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
์šฐ์„  OrbitalControls๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ์กด์žฌํ•ด์•ผ ํ•˜๋Š” 3๊ฐœ์˜ ์ƒ์ˆ˜๊ฐ€ ์žˆ๋Š” es5 ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.
threejs ํƒ€์ดํ•‘์ด ์žˆ์ง€๋งŒ ๋™์ผํ•œ ํŒจํ‚ค์ง€์— ์žˆ๋Š” ๊ฒƒ์ด ๋” ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ดํ•‘์—๋Š” OrbitalControls๊ฐ€ ์žˆ์ง€๋งŒ import { OrbitalControls } from 'three; ์ฒ˜๋Ÿผ ๋‹จ์ˆœํžˆ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
Webpack์—๋Š” ํŠธ๋ฆฌ ์‰์ดํ‚น์ด ์žˆ์œผ๋ฏ€๋กœ es6์˜ ๊ฒฝ์šฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์— ํฌํ•จํ•˜๊ณ  ๋ถ„๋ฆฌ๋œ ํ”„๋กœ์ ํŠธ๋กœ ์˜ฎ๊ธฐ์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
@mrdoob ๊ทธ๋ž˜์„œ Typescript๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋‚˜์œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์–ด์จŒ๋“  ํƒ€์ดํ•‘์ด ์žˆ๋Š” ๋ชจ๋“  ๋ฒ„์ „์˜ ES๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.
React์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

@FriOne @mrdoob ์ด ์ •๋ง๋กœ Typescript๊ฐ€ ๋‚˜์˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๊ทธ๋Š” ์ด ์Šค๋ ˆ๋“œ์˜ ์ฃผ์ œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ/์Šค๋ ˆ๋“œ์—์„œ Typescript์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋Œ€ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ES6 ํด๋ž˜์Šค๋Š” Typescript์— ๋Œ€ํ•ด ๋˜๋Š” Typescript์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ES6์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ๊ตฌ๋ฌธ์ด ๋งค์šฐ ์œ ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ Typescript๋กœ ์ด์‹ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์˜ˆ, Typescript๊ฐ€ ๋งŽ์€ ์ƒˆ๋กœ์šด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋” ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋ฅผ "ํŠธ๋žœ์ŠคํŒŒ์ผ"ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๊ณ , ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋” ๋นจ๋ฆฌ ๋ฐฐ์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์•„๋งˆ๋„ https://github.com/AssemblyScript/assemblyscript์™€ ๊ฐ™์€ ๋ฏธ๋ž˜์— ์‹คํ—˜์„ ์œ„ํ•œ ๋ฌธ์„ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Typescript @joejordanbrown ์ด ์žฅ๋‹จ์ ์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ๋งŽ์€ ์žฅ์ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค์‹œ ์ฃผ์ œ๋กœ ๋Œ์•„๊ฐ€์„œ: ์ œ ์ƒ๊ฐ์—๋Š” ES6 ํด๋ž˜์Šค๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ด ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ€๊ณ  ๋‚˜์„œ Typescript์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ํ•œ๊ฑธ์Œ ํ•œ๊ฑธ์Œ ๋‚˜์•„๊ฐ€์ž

@tschoartschi , typescript๊ฐ€ es6 ํด๋ž˜์Šค๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ธฐํƒ€ ๋ฆฌํŒฉํ† ๋ง์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ๊ทธ๋Ÿฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝํ—˜์ด ์—†์–ด์„œ ํ‹€๋ฆด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@FriOne ๊ทธ๊ฒƒ์€ ์˜์กดํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜‰ ๋ฌผ๋ก  ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ชจ๋“  ์˜ค๋ฅ˜์™€ ์‹ค์ˆ˜๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Typescript๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ Typescript์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋จผ์ € ์ „์ฒด ๋นŒ๋“œ ํŒŒ์ดํ”„๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Typescript๊ฐ€ ์ ํ•ฉํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ES6 ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋‚˜์„œ Typescript์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์šฐ๋ฆฌ๋Š” ์ฝ”์Šค์˜ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ณ ์ž ํ•˜๋Š” KTH์˜ 5๋ช…์˜ ํ•™์ƒ ๊ทธ๋ฃน์ด๋ฉฐ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋ฅผ ์ƒˆ๋กœ์šด ES6 ๊ตฌ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐœ๋… ์ฆ๋ช…์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ Three.js๋ฅผ TypeScript์— ํฌํŒ…ํ–ˆ์Šต๋‹ˆ๋‹ค(r82).

https://github.com/flyover/three.ts

TypeScript ์†Œ์Šค๊ฐ€ ์ฆ‰์„์—์„œ ํŠธ๋žœ์ŠคํŒŒ์ผ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ œ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋ณ€ํ™˜๋œ JavaScript๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์›๋ณธ๋งŒํผ ๋น ๋ฅด๊ฒŒ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

three.js๊ฐ€ typescript๋กœ ์ด์‹๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์›น ์„ธ๋Œ€๋ฅผ ์œ„ํ•ด ์‹œ๊ฐ„์˜ ์‹œํ—˜์„ ๊ฒฌ๋””๋ ค๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ํ˜„๋Œ€ํ™”ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ธ์  ๊ฐ€๋Š” AssemblyScript์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๊ณ  WASM์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. threejs๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ถ„๋ช…ํžˆ ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@WestLangley ๋ฐ @mrdoob ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@bhouston ์—ฌ๊ธฐ์„œ ๊ฒฐ๋ก ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@pkieltyka ์˜ˆ ๋˜ํ•œ TypeScript๊ฐ€ Three.js์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ์ˆ  ์ „๋ฌธ๊ฐ€ ์™ธ์—๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ณ  ์ดˆ๋ณด์ž๊ฐ€ API๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ES6์˜ ๋ชจ๋“  ๊ฒƒ์„ ๋จผ์ € ๋๋‚ด๊ณ  TypeScript๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  JavaScript์—์„œ๋Š” TypeScript ํ˜•์‹์œผ๋กœ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ฆฌ ๋ณต์žกํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@flyover ์—ญ์‹œ TypeScript ๋ฒ„์ „์˜ Three.js์— ๋Œ€ํ•œ ๊ฐœ๋… ์ฆ๋ช…์„ ์ฐธ์กฐํ•˜์„ธ์š”. Three.js ๊ด€๋ฆฌ์ž๋กœ๋ถ€ํ„ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜์Šต๋‹ˆ๊นŒ?

three.js์— ๋Œ€ํ•œ typescript๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. typescirpt๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ๊ณ ์ž…๋‹ˆ๋‹ค.
์—ฐ์Šต๊ณผ ์›์‹œ JavaScript๋Š” ๋” ์ด์ƒ ์—†์Šต๋‹ˆ๋‹ค.

2019๋…„ 1์›” 5์ผ ํ† ์š”์ผ ์˜ค์ „ 4์‹œ 13๋ถ„ tschoartschi < [email protected] ์ž‘์„ฑ:

@pkieltyka https://github.com/pkieltyka ์˜ˆ TypeScript๋„ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
Three.js์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ๋งŽ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์˜†์—
๊ธฐ์ˆ ์ ์ธ ์žฅ์  ๋˜ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ณ  ์ดˆ๋ณด์ž๋ฅผ ๋•์Šต๋‹ˆ๋‹ค.
API๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ES6๋ฅผ ๋ชจ๋‘ ๋๋‚ด๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋จผ์ € ๋ฌผ๊ฑด์„ ๋งŒ๋“ค๊ณ  TypeScript๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์ตœ์‹ ์ž‘๋ถ€ํ„ฐ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค
JavaScript TypeScript์˜ ํ˜•์‹์œผ๋กœ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ๋ณต์žกํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@flyover https://github.com/flyover ์ข‹๋„ค์š”.
Three.js์˜ TypeScript ๋ฒ„์ „. ์œ ์ง€ ๋ณด์ˆ˜๋กœ๋ถ€ํ„ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜์Šต๋‹ˆ๊นŒ?
Three.js?

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/mrdoob/three.js/issues/11552#issuecomment-451639995 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAj6_bkdND7I0_F4AJcBV0DYLpToUIVhks5vAGykgaJpZM4N9vH8
.

@bhouston TypeScript๊ฐ€ ํ›Œ๋ฅญํ•œ ๊ธฐ์ˆ ์ด๋ผ๋Š” ๋ฐ๋Š” ๋™์˜ํ•˜์ง€๋งŒ ๋‹น์‹ ์ด ํ–ˆ๋˜ ๋ฐฉ์‹์œผ๋กœ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•ญ์ƒ ์›์‹œ JavaScript์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊น๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋งจ ์œ„์— TypeScript ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. TypeScript๋Š” JavaScript ์‚ฌ์–‘์„ ๋งค์šฐ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— TypeScript๋Š” ์‹ค์ œ๋กœ ์œ ํ˜•์ด ์žˆ๋Š” ES6์ฒ˜๋Ÿผ ์ฝ์Šต๋‹ˆ๋‹ค.

three.js์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ TypeScript๋Š” ์ •๋ง ์œ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ ์ง„์ ์œผ๋กœ ์ฑ„ํƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ํŠนํžˆ ๋ชจ๋“  ES6 ๋ฆฌํŒฉํ„ฐ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„์— "๋น…๋ฑ…" ์žฌ์ž‘์„ฑ์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

TypeScript์— ๋Œ€ํ•œ @mrdoob ์˜ ์ž…์žฅ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ๋“ฃ๋Š” ๊ฒƒ๋„ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. TypeScript๋Š” "typed JavaScript"์— ๋Œ€ํ•œ "์‚ฌ์‹ค์ƒ" ํ‘œ์ค€์ด ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์ด๊ฒƒ์€ ํ™•์‹คํ•œ ์‚ฌ์‹ค์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์ฃผ์žฅ์„ ์•„ํฌ์ŠคํŠธ๋กœํ”ผ ์•„๋ž˜์— ๋‘์—ˆ์Šต๋‹ˆ๋‹ค)

์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ES6 ๊ธฐ๋Šฅ, ํŠนํžˆ ํด๋ž˜์Šค, ํ™”์‚ดํ‘œ ๊ธฐ๋Šฅ, 'let' ๋ฐ 'const'๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@roomle-build๊ฐ€ ์ง€์ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ๊ฒฐ์ •ํ•˜๋ฉด ES6 ์ฝ”๋“œ ์œ„์— ์ ์ฐจ์ ์œผ๋กœ ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ์„ ์ ์ง„์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์™„๋ฃŒ๋˜๋ฉด ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ ์ง€์›์— ๋Œ€ํ•ด ์ ์ ˆํ•˜๊ฒŒ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ๋ฒˆ์— ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ผ์ด ๋„ˆ๋ฌด ๋ณต์žกํ•ด ์งˆ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

TypeScript๊ฐ€ ๋ฏธ๋ž˜์˜ ์–ด๋Š ์‹œ์ ์—์„œ ์˜ต์…˜์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ๋“ฃ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค :-) ์•„๋งˆ๋„ @flyover ๊ฐ€ ์ˆ˜ํ–‰ํ•œ ์ž‘์—… ์ค‘ ์ผ๋ถ€๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ @looeee ์˜ ๋ง์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋ชจ๋“  ES6 ์ž‘์—…์„ ์™„๋ฃŒํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„์— ์ง‘์ค‘ํ•˜์„ธ์š”.

๋ชจ๋“  ES6 ์ž‘์—…์„ ์™„๋ฃŒํ•˜์‹ญ์‹œ์˜ค

์šฐ๋ฆฌ๊ฐ€ ์ ์–ด๋„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ˜…

TypeScript์˜ ์ข‹์€ ์ค‘๊ฐ„ ๋‹จ๊ณ„๋Š” ๋ชจ๋“  JavaScript ํŒŒ์ผ ์˜†์— ์œ ํ˜• ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๊ฐ€ ๋ชจ๋‘ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒกํ„ฐ3.js
Vector3.d.ts

์ด๊ฒƒ์€ ์‚ฌ์ด๋“œ์นด ํŒŒ์ผ๋กœ์„œ TypeScript์˜ ๋ชจ๋“  ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ @types/three ํŒŒ์ผ์ด ์žˆ์ง€๋งŒ ๊ตฌ์‹์ด๋ฉฐ ๋ณ„๋„๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ ํ•ญ์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

Three.JS์˜ ์ฃผ์š” ๊ฒฝ์Ÿ์ž๋Š” Babylong์ด๋ฉฐ ์™„์ „ํ•œ ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ์ด๋ฉฐ ์ด ์ ์—์„œ ์ด์ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ @types/three๋ฅผ ์ฃฝ์ด๊ณ  ์‚ฌ์ด๋“œ ์นด ์œ ํ˜• ์ •์˜ ํŒŒ์ผ๋กœ Three right์— ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์€ ํ›Œ๋ฅญํ•œ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ํŠธ๋ฆฌ ์‰์ดํ‚น๊ณผ ํ•จ๊ป˜ ๋ชจ๋“  ์˜ˆ์ œ๋ฅผ /src์— ํ†ตํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ Three.JS์˜ ์ฝ”๋“œ ๊ตฌ์กฐ๋Š” 2014๋…„์ด๋ฏ€๋กœ ์ž‘์—…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์˜ˆ์‹œ?

์˜ˆ์ œ/js

2019๋…„ 1์›” 7์ผ ์›”์š”์ผ ์˜ค์ „ 10์‹œ 25๋ถ„ Dusan Bosnjak < [email protected] ์ž‘์„ฑ:

๋ชจ๋“  ์˜ˆ์‹œ?

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/mrdoob/three.js/issues/11552#issuecomment-451970482 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAj6_Q3Kakb5Qn2DqGbMVvLkW_28cOyaks5vA2b5gaJpZM4N9vH8
.

@๋ณด์Šคํ„ด

TypeScript์˜ ์ข‹์€ ์ค‘๊ฐ„ ๋‹จ๊ณ„๋Š” ๋ชจ๋“  JavaScript ํŒŒ์ผ ์˜†์— ์œ ํ˜• ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๊ฐ€ ๋ชจ๋‘ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒกํ„ฐ3.js
Vector3.d.ts

.d.ts ํŒŒ์ผ์ด c์—์„œ .h ํŒŒ์ผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

.d.ts ํŒŒ์ผ์ด c์—์„œ .h ํŒŒ์ผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

์•„์ฃผ ์ข‹์€ ๋น„์œ ์ž…๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กœ์šด ์‚ฌ๋žŒ์ด ์ด๋ฏธ ์—ฌ๊ธฐ์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/three ๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ๋Š” ์ด๋Ÿฌํ•œ ์œ ํ˜• ํŒŒ์ผ์˜ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ ธ ์™€์„œ Three.js์— ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›ํ•œ๋‹ค๋ฉด ์ด๊ฒƒ์„ Three.js์— ํ†ตํ•ฉํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ๋ถ„ํ• ํ•˜๋Š” PR์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Typescript์˜ ์ธ๊ธฐ๋„๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์ฃผ๋‹น @Types/three๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋˜๋Š” ํšŸ์ˆ˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

https://www.npmjs.com/package/@types/three - ์ฃผ๋‹น 63,000 ๋‹ค์šด๋กœ๋“œ.

์ธ์ƒ์ ์ธ!

์›ํ•œ๋‹ค๋ฉด ์ด๊ฒƒ์„ Three.js์— ํ†ตํ•ฉํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ๋ถ„ํ• ํ•˜๋Š” PR์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ์ข‹์€ ์†Œ๋ฆฌ ๐Ÿ‘

eslint์™€ ์œ ์‚ฌํ•œ ๋ช…๋ น์ค„ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์œ ํ˜• ํŒŒ์ผ๊ณผ ์†Œ์Šค .js ํŒŒ์ผ์ด ์ •๋ ฌ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? d.ts ํŒŒ์ผ์˜ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ ธ๊ฐ„๋‹ค๋ฉด ํŒŒ์ผ์ด ์ผ์น˜ํ•˜๋Š”์ง€ ์ •๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Typescript์˜ ์ธ๊ธฐ๋„๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์ฃผ๋‹น @Types/three๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋˜๋Š” ํšŸ์ˆ˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

https://www.npmjs.com/package/@types/three - ์ฃผ๋‹น 63,000 ๋‹ค์šด๋กœ๋“œ.

Visual Studio Code์˜ ์ž๋™ ์œ ํ˜• ํš๋“ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด Visual Studio Code๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— Visual Studio Code์˜ ์ธ๊ธฐ์— ๋” ํฐ ๊ธฐ์—ฌ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰, ๋ฌด์‹œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@flyover @bunnybones1 @mrdoob @looeee @donmccurdy @bhouston @roomle-build @pkieltyka @FriOne @joejordanbrown ์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘ TypeScript์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์œผ๋‹ˆ TypeScript์™€ ๊ด€๋ จ๋œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  TS ํ† ๋ก ์„ ๊ทธ๊ณณ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด ์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/mrdoob/three.js/issues/15545

ES6 ํด๋ž˜์Šค๋กœ ์ด์‹ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์šฉ์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์–ธ์  ๊ฐ€ Typescript๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ข‹์€ ๋ธŒ๋ฆฌ์ง€ ์†”๋ฃจ์…˜์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์ผ๋ถ€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ES6์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://github.com/mrdoob/three.js/tree/dev/examples/jsm

์ปจํŠธ๋กค, ๋กœ๋” ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ์ข‹์€ ํ›„๋ณด์ž…๋‹ˆ๋‹ค. ์–ธ์ œ๋“ ์ง€ ๋„์™€์ฃผ์„ธ์š”!

@mrdoob ํ™•์ธ์„ ์œ„ํ•ด ES ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•˜์ง€๋งŒ ์•„์ง ๋‹ค๋ฅธ ES6 ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค:

  1. moduleize.js ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ํŒŒ์ผ์„ ES ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์–ด๋–ค ์‹œ์ (์ด ๋ฆด๋ฆฌ์Šค ๋˜๋Š” ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์—)์—์„œ rollup-examples.config.js ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ES ๋ชจ๋“ˆ์„ UMD ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ examples/js ์˜ ๋ฒ„์ „์€ ์†.
  4. ์ผ๋‹จ ์•ˆ์ •ํ™”๋˜๋ฉด ES6 ๊ธฐ๋Šฅ ๋„์ž…๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mrdoob ํ™•์ธ์„ ์œ„ํ•ด ES ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•˜์ง€๋งŒ ์•„์ง ๋‹ค๋ฅธ ES6 ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๋„ค, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •ํ–ˆ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์™€ @bhouston ์€ ๋Œ€๋ถ€๋ถ„์˜ Three.JS ํ”„๋กœ์ ํŠธ์— *.d.ts ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋Š” ์•ฝ์†๋œ PR์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/mrdoob/three.js/pull/15597

ES6 ํด๋ž˜์Šค์™€ Typescript ์ •์˜๋ฅผ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. three.js๋กœ ์ž‘์—…ํ•  ๋•Œ๋งˆ๋‹ค ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๋ฒ”์œ„์— ์žˆ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ฝ”๋“œ ์ค„์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์žฅ๋ฉด์„ ์ตœ์ ํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” ์šฐ์•„ํ•œ ์ž‘์—… ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋งˆ์นจ๋‚ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ณ  ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์›Œํฌํ”Œ๋กœ๋ฅผ ์ƒˆ๋กœ์šด ์ˆ˜์ค€์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํด๋ž˜์Šค ๊ธฐ๋Šฅ์„ ์ตœ์†Œํ•œ "๋ณดํ˜ธ"ํ•˜๊ณ  ์˜ˆ์™ธ ์—†์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์„ธ์š” ๐Ÿค—

three.js๋กœ ์ž‘์—…ํ•  ๋•Œ๋งˆ๋‹ค ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๋ฒ”์œ„์— ์žˆ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ฝ”๋“œ ์ค„์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ... ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค ๊ธฐ๋Šฅ์„ ์ตœ์†Œํ•œ "๋ณดํ˜ธ"ํ•˜๊ณ  ์˜ˆ์™ธ ์—†์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

@dionysiusmarquis ์—ฌ๊ธฐ์„œ ๋ฌด์Šจ ๋ง์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค... ๊ธฐ์กด TS ์ž…๋ ฅ์— ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ธฐ๋Šฅ์ด ๋น„๊ณต๊ฐœ๋กœ ์ž˜๋ชป ํ‘œ์‹œ๋˜์–ด ์žˆ๋‚˜์š”? ์•„๋‹ˆ๋ฉด ํ˜„์žฌ ํ”„๋กœํ† ํƒ€์ž… ์Šคํƒ€์ผ์˜ ํด๋ž˜์Šค ์ •์˜๊ฐ€ TS์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด๊ฐ€์š”? ์˜ˆ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

three.js๋กœ ์ž‘์—…ํ•  ๋•Œ๋งˆ๋‹ค ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๋ฒ”์œ„์— ์žˆ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ฝ”๋“œ ์ค„์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ... ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค ๊ธฐ๋Šฅ์„ ์ตœ์†Œํ•œ "๋ณดํ˜ธ"ํ•˜๊ณ  ์˜ˆ์™ธ ์—†์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

@dionysiusmarquis ์—ฌ๊ธฐ์„œ ๋ฌด์Šจ ๋ง์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค... ๊ธฐ์กด TS ์ž…๋ ฅ์— ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ธฐ๋Šฅ์ด ๋น„๊ณต๊ฐœ๋กœ ์ž˜๋ชป ํ‘œ์‹œ๋˜์–ด ์žˆ๋‚˜์š”? ์•„๋‹ˆ๋ฉด ํ˜„์žฌ ํ”„๋กœํ† ํƒ€์ž… ์Šคํƒ€์ผ์˜ ํด๋ž˜์Šค ์ •์˜๊ฐ€ TS์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด๊ฐ€์š”? ์˜ˆ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ํŠน์ • ๊ทธ๋ฆผ์ž ๋งต์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด getDepthMaterial ๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํฌํ•จํ•˜๋Š” ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ฒ„์ „์œผ๋กœ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์— ๋‚ด ์ž์‹ ์˜ WebGLShadowMap ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“  ๋‹จ์ผ three.js ํด๋ž˜์Šค๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ๋…ธ์ถœ๋œ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. typescript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜๋„ํ•œ ๋ชฉ์ ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ private ๋˜๋Š” protected ๋กœ ์‰ฝ๊ฒŒ ํ”Œ๋ž˜๊ทธ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ES6 ํด๋ž˜์Šค/Typescript ShadowMap์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

interface MaterialCache {
  [uuid: string]: {[uuid: string]: MeshDepthMaterial}
}

class ShadowMap {
  public enabled: boolean = false
  public autoUpdate: boolean = true
  public needsUpdate: boolean = false
  public type: ShadowMapType

  โ€ฆ

  protected depthMaterials: MeshDepthMaterial[]
  protected materialCache: MaterialCache

  constructor (renderer: WebGLRenderer, objects: WebGLObjects, maxTextureSize: any) {
    โ€ฆ
  }

  protected getDepthMaterial (object: Object3D, material: Material) {
    โ€ฆ
  }
}

export { ShadowMap as WebGLShadowMap }

"๋‚ฎ์€ ์ˆ˜์ค€" ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ง‘์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

์ˆ˜์—…๊ณผ ๊ด€๋ จํ•˜์—ฌ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Vector3.unproject ์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ํด๋ž˜์Šค ๊ตฌ๋ฌธ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์˜ฎ๊ธฐ๋‚˜์š”? ์ด ๋ฉ”์„œ๋“œ๋Š” ์‹ค์ œ๋กœ ์ƒˆ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐœ์ฒด ์ƒ์„ฑ์˜ ์–‘์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ ๊ฒŒ ์œ ์ง€ํ•˜๋Š” ์ค‘์š”ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ Object.assign ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?
@๋ฌด๊ฒ87

์ด์ œ ํด๋ž˜์Šค๋กœ ํด๋กœ์ €๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ตฌ๋ฌธ ์„คํƒ•์„ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. StackOverflow์— ๋Œ€ํ•œ ๋‚ด ๋Œ€๋‹ต์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. https://stackoverflow.com/questions/39297258/iife-in-es6-class-literal/56077521#56077521 (๋‚˜๋Š” ๊ฒธ์†ํ•ด์•ผ ํ•˜๋ฉฐ ์ž‘๋™ ๋ฐฉ์‹/์ด์œ ๋ฅผ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. .)

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์•ˆํ‹ฐ ํŒจํ„ด์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฅผ ์ ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ๋ฒ”์œ„์—์„œ ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๊ธธ์„ ๊ฐ€๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•œ๋‹ค.

@Mugen87 ๋„ค ์ €๋„ ๋ชจ๋“ˆ ๋ฒ”์œ„๋ฅผ ์ž˜ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚˜๋ฌด๋ฅผ ํ”๋“œ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ผ์—๋„ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๋ฏธ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋งŽ์€ ๋ฌธ์ œ์—์„œ ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/mrdoob/three.js/issues/6241#issuecomment -398703521

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์•ˆํ‹ฐ ํŒจํ„ด์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฅผ ์ ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ๋ฒ”์œ„์—์„œ ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๊ธธ์„ ๊ฐ€๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•œ๋‹ค.

๋ฌธ์ œ ์—†์–ด์š”. ๊ฐ€๋Šฅ์„ฑ์„ ์–ธ๊ธ‰ํ–ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ง„ํ–‰ ์ค‘์ธ ๋” ๋‚˜์€/๋” ๊นจ๋—ํ•œ ์†”๋ฃจ์…˜์ด ์žˆ๋‹ค๋ฉด ์‹คํ–‰์— ์˜ฎ๊ธฐ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Three.js ํ”„๋กœ์ ํŠธ(์‚ฌ์šฉ๋ฒ•, ์†Œ์Šค, ํ† ๋ก  ๋“ฑ)๋Š” JS ์ง€์‹์˜ ์ฃผ์š” ์†Œ์Šค์˜€์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Three.js์— ์ƒˆ๋กญ๊ณ  ๋” ๋‚˜์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจํ„ด์„ ๋„์ž…ํ•˜๋ฉด ๋‚˜์™€ ๋‚ด ํ”„๋กœ์ ํŠธ์—๋„ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ;-)

@Mugen87 ๋‚ด๊ฐ€ ์ข€ ๋” ๋ฐฐ์šฐ๊ณ  ์ดํ•ดํ•  ์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด ์™œ class-IIFE๋ฅผ ์•ˆํ‹ฐ ํŒจํ„ด์œผ๋กœ ๊ณ ๋ คํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ชจ๋“ˆ์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋ณ€์ˆ˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜์ง€๋งŒ ์ด์ „์— ์ฝ”์–ด๊ฐ€ ๊ตฌ์ถ•๋œ ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์บ์‹œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ํ•จ์ˆ˜๋„ ๋™์‹œ์— ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์ค‘์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ๋ฒ”์œ„ ์ง€์ •์„ ํ†ตํ•ด ์ด๋ฅผ ๊ด€๋ฆฌ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์ง€๋ฏ€๋กœ ์•ˆํ‹ฐ ํŒจํ„ด์œผ๋กœ (์ ์–ด๋„ ๋ชจ๋“ˆ ๋ฒ”์œ„์—์„œ ๋ชจ๋“  ์บ์‹œ ๋ณ€์ˆ˜๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•  ๋•Œ).

ํด๋ž˜์Šค IIFE๋ฅผ ์•ˆํ‹ฐ ํŒจํ„ด์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

https://github.com/mrdoob/three.js/pull/14695์— ์–ธ๊ธ‰๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚˜๋ฌด ํ”๋“ค๋ฆผ์„ ์ž ์žฌ์ ์œผ๋กœ ๋ฐฉํ•ดํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ „์ฒด ํŒจํ„ด์ด ํ•ดํ‚น์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋œ "๋ฉ‹์ง„" ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ํด๋กœ์ €๋ฅผ ํ”ผํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ ์‹คํ–‰ ์„ฑ๋Šฅ๋„ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์บ์‹œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๊ฐ€ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ๋™์‹œ์— ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

IIFE๋Š” ์ฃผ๋กœ ์ˆ˜ํ•™ ์ˆ˜์—…์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์ƒ๋‹นํ•œ ์–‘์˜ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—( @gero3 ๋Š” ์ตœ๊ทผ์— ๋” ๋งŽ์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ›Œ๋ฅญํ•œ ์ผ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค), ๊ทธ๊ฒƒ๋“ค์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

IIFE๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 2013๋…„์—๋Š” ์ œ๊ฐ€ ์ฑ…์ž„์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ ์ง€ํ•˜๊ธฐ ํž˜๋“  ์ •์  ๋ณ€์ˆ˜ ํŒจํ„ด์„ ์—†์• ๊ธฐ ์œ„ํ•ด์„œ์˜€์Šต๋‹ˆ๋‹ค. ์ด PR์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/mrdoob/three.js/pull/2941

https://github.com/mrdoob/three.js/issues/2936

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์—์„œ ๋” ์ผ์ฐ ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/mrdoob/three.js/pull/2920#issuecomment -12217793

ํฅ๋ฏธ๋กœ์šด ์‚ฌ์‹ค์€ ์ด๊ฒƒ์„ ๋„ฃ์—ˆ์„ ๋•Œ ์ฝ”๋“œ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค:

  1. moduleize.js ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ํŒŒ์ผ์„ ES ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์–ด๋–ค ์‹œ์ (์ด ๋ฆด๋ฆฌ์Šค ๋˜๋Š” ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์—)์—์„œ rollup-examples.config.js ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ES ๋ชจ๋“ˆ์„ UMD ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ examples/js ์˜ ๋ฒ„์ „์€ ์†.
  4. ์ผ๋‹จ ์•ˆ์ •ํ™”๋˜๋ฉด ES6 ๊ธฐ๋Šฅ ๋„์ž…๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ผ. ๋†“์ณค์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ˆ˜์—…์„ ํ–ฅํ•œ ์šฐ๋ฆฌ์˜ ์ ์ง„์ ์ธ ๋‹จ๊ณ„๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  1. [x]modularize.js ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ํŒŒ์ผ์„ ES ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. [x] ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. [ ] ์–ด๋–ค ์‹œ์ (์ด ๋ฆด๋ฆฌ์Šค ๋˜๋Š” ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์—)์—์„œ ์šฐ๋ฆฌ๋Š” ES ๋ชจ๋“ˆ์„ UMD ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด rollup-examples.config.js๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ examples/js์˜ ๋ฒ„์ „์€ ๋” ์ด์ƒ ์†.
  4. [ ] ์ผ๋‹จ ์•ˆ์ •ํ™”๋˜๋ฉด ES6 ๊ธฐ๋Šฅ ๋„์ž…๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋‹จ๊ณ„์—์„œ ์šฐ๋ฆฌ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋‹จ๊ณ„ (1)๊ณผ (2)๋ฅผ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

(3) ์šฐ๋ฆฌ๋Š” ๋” ์ด์ƒ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ์–ด๋Š ์‹œ์ ์—์„œ examples/js ํด๋”๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค(https://github.com/mrdoob/three.js/pull/18749 ์ฐธ์กฐ). .

examples/jsm ์— ES6 ํด๋ž˜์Šค๋ฅผ ๋„์ž…ํ•˜๋Š” (4) ๋‹จ๊ณ„๋Š” examples/js ์†Œ์Šค ๋ฒ„์ „์—์„œ ์ƒ์„ฑ๋˜์ง€ ์•Š์€ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ์—์„œ๋งŒ (ํ˜„์žฌ๋กœ์„œ๋Š”) ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐ ํ•ฉ๋‹ˆ๋‹ค. examples/js ๊ฐ€ ์ œ๊ฑฐ๋˜๋ฉด ๋‚˜๋จธ์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

^ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ์ค„ ์‚ฌ์ด๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @Mugen87 ๋˜๋Š” @mrdoob ์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

IMO์—์„œ ํ”„๋กœ์ ํŠธ๋Š” ๋ชจ๋“ˆ ์ „์šฉ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด examples/js ์˜ ์‚ฌ์šฉ ์ค‘๋‹จ ๋ฐ ์ œ๊ฑฐ์— ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” ํด๋ž˜์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ๋กœ ์‹œ์ž‘ํ•œ ๋‹ค์Œ ์ฝ”์–ด๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

์™„๋ฒฝํ•œ. ๊ฐ์‚ฌ ํ•ด์š”. ๊ทธ ๋ฐฉ๋ฒ•์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค

๋‹ซํžŒ ๋ฌธ์ œ์—์„œ ๋‹ค์‹œ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์•ˆ๋…•ํ•˜์„ธ์š”,

ํด๋ž˜์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ์€์ง€์— ๋Œ€ํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ์ƒ๊ฐ์„ ์•Œ๋ฆฌ๊ณ ์ž ์ด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ๋‚ด๊ฐ€ ๊ฒช์€ ๊ฒƒ์— ๋Œ€ํ•œ ๋น ๋ฅธ ์š”์•ฝ:

  • ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— examples ํด๋”๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์ œ์— ์˜ํ•ด ํ™•์žฅ๋˜์ง€ ์•Š์€ src/ ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • moduleize.js ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•˜๋ฉด ํ•ด๋‹น examples/jsm ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” examples/js/์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋†“์นœ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— examples ํด๋”๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

examples/js ํด๋”์˜ ํŠน์ • ๋‹ค์Œ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ์ฑ…์ž„์ด ๋ˆ„๊ตฌ์—๊ฒŒ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ๊ณ„ํš์„ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด, ์ด๊ฒƒ์ด ES ํด๋ž˜์Šค๋กœ์˜ ๋ณ€ํ™˜์„ ๋ง‰์ง€ ์•Š์•˜์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ด์œ ๋กœ ๋‚˜๋Š” https://github.com/mrdoob/three.js/issues/11552#issuecomment -592768708์— ๋‹ค์†Œ ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚

๋” ๋‚˜์•„๊ฐ€ ์šฐ๋ฆฌ๋Š” ๋‚ ์งœ๊ฐ€ ์ •ํ•ด์ง€๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‚ด๊ฐ€ ํ•œ ์ˆ˜์ •์˜ ์ผ๋ถ€๋กœ ํ˜„์žฌ ๋กค์—… ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ES2015 ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ด ์˜๊ฒฌ ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ์˜ˆ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์—ฌ๊ธฐ์— ๋˜ ๋‹ค๋ฅธ ๋น ๋ฅธ ์˜ˆ์˜ ์š”์ง€ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@Definitely์•„๋งˆ๋„ ๋‚˜๋Š” ์‹œ๊ฐ„์ด ์žˆ๊ณ  ๋•๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. dependencies.json ๋ชฉ๋ก์— ์žˆ๋Š” ์ผ๋ถ€ ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@DefinitelyMaybe Object3D ์™€ ๊ฐ™์€ ๊นŠ์€ ์กฐ์ƒ์˜ ์ƒ์†์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด src/audio/AudioListener.js ๋ณ€ํ™˜ ์ค‘ ํŒŒ์†์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

[ROLLUP] bundles src/Three.js โ†’ build/three.js...
[ROLLUP] (!) Error when using sourcemap for reporting an error: Can't resolve original location of error.
[ROLLUP] src/audio/AudioListener.js: (137:1)
[ROLLUP] [!] Error: 'return' outside of function
[ROLLUP] src/audio/AudioListener.js (137:1)
[ROLLUP] 135:   };
[ROLLUP] 136: 
[ROLLUP] 137:   return AudioListener;
[ROLLUP]        ^
[ROLLUP] 138: }(Object3D));
[ROLLUP] Error: 'return' outside of function

๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ธฐ์–ตํ•œ๋‹ค๋ฉด, ์šฐ๋ฆฌ๊ฐ€ ๊ฒช๋Š” ๋ชจ๋“  ๋ฌธ์ œ์— ๋Œ€ํ•ด ํŒŒ์ผ ์ƒ๋‹จ์— ๋ฉ”๋ชจ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

AudioListener์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜๋ชป ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค... ์•ฝ๊ฐ„์˜ ๋””๋ฒ„๊น… ํ›„์— bubleCleanup ๋ณ€ํ™˜์— ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://github.com/mrdoob/three.js/pull/19934#issuecomment -667411997์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๋‚˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๋” ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ์ •๋ ฌํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ผ๋ถ€ ํŒŒ์ผ์˜ ๊ฒฝ์šฐ์ด์ง€๋งŒ ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์˜ˆ์ƒํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ๊ฐ€๋Š” ๋ถ„๋“ค์€ ์—ฌ๊ธฐ ์—์„œ ํ† ๋ก  ๋‚ด์šฉ์„ ๋น ๋ฅด๊ฒŒ ์ฝ์œผ์‹ญ์‹œ์˜ค.

๊ทธ ๋™์•ˆ src/loaders !

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰