์ด '๊ด์ฉ๊ตฌ' ์์์ด ์ฝ๋์ ๋์ ๋๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
PointLight.prototype = Object.assign( Object.create( Light.prototype ), {
์ง์งํ๊ฒ? ํจ์(์ค์ฒฉ ํจ์(ParentPrototype) ์ผํ ์ท๊ฑด ๋ธ๋ํท?
์๋ฅผ ๋ค์ด Materials ํด๋์ค์ ์๋ ์ถฉ์คํ ๋ ์ค ์คํ์ผ์ ํจ์ฌ ๋ ๋ช ํํ๊ณ ๊น๋ํฉ๋๋ค. ํ๋กํ ํ์ ์ ํ ๋นํ ๋ค์ ์์ฑ์๋ฅผ ์ค์ ํฉ๋๋ค. ๋. JavaScript ์ง๋ณ์ ๊ฑธ๋ ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์น์ง ๋ง์ญ์์ค. ๊ฐ์ฒด ๋ฐ ์์์ด ์ฝ๋ฉ๋๋ ๋ฐฉ์์ ์์ํด์ผ ํ๋ ์ด์ํ ํ์๊ฐ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฒด์ ๊ฑธ์ณ ํ๋์ ์คํ์ผ. ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค.
๊ทธ๋์ ๋น์ ์ ๋์ ์ด ํจํด์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ํ๊ณ ์์ต๋๊น?
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;
}
}
์ ๋ ๋ชจ๋ ES2015+๋ก ์ด๋ํ๋ ๊ฒ์ ์ฐฌ์ฑํฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ์ฌ ๊ฐ์ง๊ณ ์๋ ๊ฒ๊ณผ ์ ์ฌํ ์ฝ๋๋ฅผ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ํ๋ฏ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์ฑ๋ฅ์ด ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค.
์์ ๊ณผ ๊ด๋ จํ์ฌ ์ง๋ฌธ์ด ์์ต๋๋ค. Vector3.unproject ์ ๊ฐ์ ๋ฉ์๋๋ฅผ ํด๋์ค ๊ตฌ๋ฌธ์ผ๋ก ์ด๋ป๊ฒ ์ฎ๊ธฐ๋์? ์ด ๋ฉ์๋๋ ์ค์ ๋ก ์ ๋ฒ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํด๋ก์ ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ ๊ฐ์ฒด ์์ฑ์ ์์ ๊ฐ๋ฅํ ํ ์ ๊ฒ ์ ์งํ๋ ์ค์ํ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
์ด ๊ฒฝ์ฐ Object.assign
๊ฐ ํ์ํฉ๋๊น?
@Mugen87 @mrdoob es6 ์ฑ๋ฅ์ ๋ํ ํฅ๋ฏธ๋ก์ด ์ ๋ณด์
๋๋ค. ํนํ Object.assign
:
์ด ๊ธฐ์ฌ ์์
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 ํด๋์ค์ ์๋ ์ถฉ์คํ ๋ ์ค ์คํ์ผ์ ํจ์ฌ ๋ ๋ช ํํ๊ณ ๊น๋ํฉ๋๋ค.
์ฒซ๊ธ์ ์์ต๋๋ค.
๋๋ ์ ์ํ๋ค:
์ด์จ๋ ์ฐ๋ฆฌ๋ ์ ๋ง ์ฃผ์ ์์ ๋ฒ์ด๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฌผ๋ก . @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 ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น?
๋๋ ๊ทธ ๋ณํ์ ์ํํ๋ ๊ณผ์ ์ด ๋ค์๊ณผ ๊ฐ๋ค๊ณ ๊ฐ์ ํ๋ค:
rollup-examples.config.js
๋ฅผ ์ฌ์ฉํ์ฌ ES ๋ชจ๋์ UMD ๋ชจ๋๋ก ๋ณํํ๊ธฐ ์์ํ ๊ฒ์
๋๋ค. ์ด๋ examples/js
์ ๋ฒ์ ์ ์.@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
ํฅ๋ฏธ๋ก์ด ์ฌ์ค์ ์ด๊ฒ์ ๋ฃ์์ ๋ ์ฝ๋ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ์์์ต๋๋ค.
๋๋ ๊ทธ ๋ณํ์ ์ํํ๋ ๊ณผ์ ์ด ๋ค์๊ณผ ๊ฐ๋ค๊ณ ๊ฐ์ ํ๋ค:
- moduleize.js ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณธ ํ์ผ์ ES ๋ชจ๋๋ก ๋ณํํฉ๋๋ค.
- ํ์ํ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ์ ๋ฆฌํฉ๋๋ค.
- ์ด๋ค ์์ (์ด ๋ฆด๋ฆฌ์ค ๋๋ ๊ฐ๊น์ด ์ฅ๋์)์์
rollup-examples.config.js
๋ฅผ ์ฌ์ฉํ์ฌ ES ๋ชจ๋์ UMD ๋ชจ๋๋ก ๋ณํํ๊ธฐ ์์ํ ๊ฒ์ ๋๋ค. ์ด๋examples/js
์ ๋ฒ์ ์ ์.- ์ผ๋จ ์์ ํ๋๋ฉด 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 ํด๋๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์์์ผ ํฉ๋๋ค.
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
!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก TypeScript๋ฅผ ์คํํ ์ ์์ ๋๊น์ง ์ ๋ JavaScript๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.