TypeScript์์ 1๋จ๊ณ private field ์ ์์ ๊ตฌํํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ฌ์ ์์ฌ ๋น๊ณต๊ฐ ๊ตฌํ์ ๋๋ถ๋ถ ๋์ฒดํ ๊ฒ์ด๋ฉฐ ์์ ํ ์ฌ๋ฐ๋ฅธ ๊ตฌํ์ ํด๋์ค๋ณ WeakMaps๋ฅผ ์ฌ์ฉํ์ฌ ES6์๋ง ์ ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ ์์ฒด๊ฐ ๋ด๋ถ์ ์ผ๋ก WeakMaps๋ฅผ ์ฌ์ฉํ์ฌ ๋น๊ณต๊ฐ ์ํ๋ฅผ ๋ชจ๋ธ๋งํ๋ฏ๋ก ์ ์์ ๊ตฌํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
ํ์ฌ ์ ์์์๋ private _properties_๋ง ํฌํจ๋์ด ์์ง๋ง ๋ฐฉ๋ฒ์ด ๋ฐ๋ฅผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋ํ ์ ์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ private ์์ฑ์ด ํด๋์ค ์์ฒด ๋ด์์๋ง ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
TypeScript ํ์ ๊ตฌ๋ฌธ๊ณผ ๊ธฐํธ/๋ฌธ์ ์ ๋์ฌ์ ์ฌ์ฉ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํฉ๋๊น?
๋๋ ๊ฐ์ธ์ ์ผ๋ก ๊ทธ๊ฒ์ด ๋์ฐํด ๋ณด์ธ๋ค๊ณ ์๊ฐํ์ง๋ง ๋ถ๋ช ํ ๊ธฐ์ ์ ํ๊ณ๊ฐ ์์ต๋๋ค(๋ด๊ฐ ์์ ํ ์ดํดํ์ง ๋ชปํ๋ ์ด์ ๋ก ๊ฐ์์ฑ์ ์๋ณํด์ผ ํ๋ ์ฌ์ฉ๋ฒ).
TypeScript๊ฐ ํ์ฌ์ private/protected ๊ตฌ๋ฌธ์ ์๋ ๊ฒ์ ๋ณด๋ ๊ฒ์ ์ฌํ ๊ฒ์ ๋๋ค. ์ด๋ ๋ค๋ฅธ ์ฌ๋ฌ ์ธ์ด์ ํจ์ฌ ๋ ๊นจ๋ํ๊ณ ์ผ๊ด์ฑ์ด ์์ต๋๋ค. ์ด๊ฒ์ด ์ผ์ด๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น? ๋์์ด ์์ต๋๊น?
์ฌ๊ธฐ์ ์ถ๊ฐํ๊ธฐ ์ํด #
๋ฐ @
๊ธฐํธ๋ฅผ ์ ํํ ๊ฐ๋ฅ์ฑ์ ๋ํ ์ด์ผ๊ธฐ๊ฐ ์์ต๋๋ค(์ฆ, ๋ฐ์ฝ๋ ์ดํฐ์ #
์ฌ์ฉ). ์ด๋ ๋ถ๋ช
ํ TypeScript์๋ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. .
์ ๋ '๋์ฐํ๋ค'๊ณ ์๊ฐํฉ๋๋ค. ์ ์๊ฐ์๋ ::
๋ฐ์ธ๋ ์ฐ์ฐ์์ฒ๋ผ ์ค์ ๋ก๋ ๊ทธ๋ ๊ฒ ๋ฉ๋ฆฌ ๋ง๋ค์ง ์์์ต๋๋ค. T39๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ๋ก๋ฅผ ์กฐ๊ธ ๋ ์๋๋ก ๋ด๋ ค๊ฐ ๋๊น์ง ๊ตฌํํ๋ ค๊ณ ์๋ํ๋ ๊ฒ์กฐ์ฐจ ๋ณด๋ฅํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์ฝ๊ฐ์ ๊ฑฐ์น ์ฃผํ์ด ๋ ๊ฒ์ด๋ผ๊ณ ๋งค์ฐ ์์ฌํฉ๋๋ค. ๋ํ ๋ชจ๋ ์ก์ธ์ค ์ฌ์ดํธ๋ฅผ ๋ค์ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ง์ํ๋ ๋ค์ด ์๋ฏธํธ๋ ๋ค์ ์ด๋ ค์ธ ๊ฒ์ผ๋ก ์๊ฐ๋ฉ๋๋ค.
๋ด๊ฐ ์์ ํ ์ดํดํ์ง ๋ชปํ๋ ์ด์ ๋ก ์ฌ์ฉ๋ฒ์ ๊ฐ์์ฑ์ ์๋ณํด์ผํฉ๋๋ค.
์ฃผ๋ก ์ฌ์ฉ ์ฌ์ดํธ์์ ์์ฑ์ ์กฐํํ๋ ๋ฐฉ๋ฒ์ ์๋ณํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ ํด๋์ค๊ฐ ์์ ๊ฐ์ธ ์์ฑ์ ๋ํด "์" ํ์ ์์ด ๋์ผํ ๊ฐ์ธ ์ด๋ฆ์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ๋ค๋ฅธ ์กฐํ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ์๋ ๊ตฌ๋ฌธ์ ํ ๊ฐ์ง ์ฅ์ ์ this
์๋ตํ๊ณ #field
์ง์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๋ํ ์ธ์ฅ์ ๋ฐ์ฝ๋ ์ดํฐ(https://github.com/tc39/proposal-private-fields/issues/32)๋ก ๊ต์ฒด๋ ์ ์์ผ๋ฉฐ ๋์ @
๊ฐ ์ฌ์ฉ๋๋ฏ๋ก @field
, ๋ฃจ๋น์ฒ๋ผ. ์ด ๊ตฌ๋ฌธ์ด ์ฌ์ ํ ๋ชป์๊ฒผ์ต๋๊น?
๋๋ ์ฌ๋๋ค์ด "๋น๊ณต๊ฐ" ํค์๋ ๊ธฐ๋ฐ ์๋ฃจ์ ์ ๋ง์กฑํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
JavaScript๊ฐ ํ๋ ๊ฒ์ฒ๋ผ ์ผ๋ฐ์ ์ธ eval
๋ฅผ ์ง์ํ๋ ๋์ ๊ทธ๋ ๊ฒ ํ๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ณด์ด์ง ์์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ํ ํฐ์ ์ฝ๊ฐ์ ์ฐจ๋ณํ๋ฅผ ํ์ฉํ๊ณ TypeScript์์์ ๊ฐ์ด ์ ์ ์ ํ ์์คํ
์ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์๋ ๊ฐ์ธ ์ํ๋ฅผ ์ง์ํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. . ์ฐ๋ฆฌ๋ https://github.com/tc39/proposal-private-fields/issues/14 ์์ ์ฌ๋ฌ ๊ตฌ๋ฌธ ๋์์ ๋ํด ๋
ผ์ํ์ผ๋ฉฐ TypeScript์ ํ์ฌ ๊ตฌ๋ฌธ์ ํญ์ ์ ๋๋ก ์๋ํ ์ ์๋ ๊ฒ์ผ๋ก ๋ณด์ง ์์ต๋๋ค. ์์ ํ ์ผ๋ฐ์ ์ธ JS ํ๊ฒฝ.
์ฃผ๋ก ์ฌ์ฉ ์ฌ์ดํธ์์ ์์ฑ์ ์กฐํํ๋ ๋ฐฉ๋ฒ์ ์๋ณํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ ํด๋์ค๊ฐ ์์ ๊ฐ์ธ ์์ฑ์ ๋ํด "์" ํ์ ์์ด ๋์ผํ ๊ฐ์ธ ์ด๋ฆ์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ๋ค๋ฅธ ์กฐํ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
JavaScript๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ ์๊ณ ์ถ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด here and here ์ค๋ช ๋ ๋ฐฉ์์ผ๋ก ์๋ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๋ถ๋ช ํ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น๋ค๋ ์ฌ์ค์ด ์ฌ์ ํ ๋ฏฟ๊ธฐ์ง ์์ง๋ง ๋น๊ตํ ์ ์๋ ์์น๋ ์์ต๋๋ค.
์ด ๊ตฌ๋ฌธ์ด ์ฌ์ ํ ๋ชป์๊ฒผ์ต๋๊น?
๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ๋ ์ต๋๋ค. ๋๊ตฐ๋ค๋ ๋๋จธ์ง JavaScript ๊ตฌ๋ฌธ๊ณผ ์ผ์นํ์ง ์์ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ง์ ์ธ์ด์๋ ์ผ์นํ์ง ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
| ์ธ์ด | ๊ตฌ๋ฌธ | ๋ฉ๋ชจ |
| --- | --- | --- |
| C# | ๊ฐ์ธ ์ ์ x; | |
| C++ | ์ฌ์ ์ธ:
์ ์ x; | |
| ์๋ฐ | ๊ฐ์ธ ์ ์ x; | |
| PHP | ๊ฐ์ธ $x; | |
| ํ์ด์ฌ | __x | "๋
ธ์ฝ๋ฉํธ" |
| ๋ฃจ๋น | ์ฌ์ ์ธ
def ๋ฉ์๋
# ...
๋ | ๋ฐฉ๋ฒ์ด์ง๋ง ํ๋๋ ๋น๊ณต๊ฐ์
๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์๊ฐํฉ๋๋ค. |
| ํ์
์คํฌ๋ฆฝํธ | ๊ฐ์ธ x; | |
| ๋น์ฃผ์ผ ๋ฒ ์ด์ง | ๊ฐ์ธ x ์ ์ | |
์์ ์ธ์ด ์ค _ํ๋_๋ฅผ ์ ์ธํ ๋ชจ๋ ์ธ์ด๋ private
ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ Python์๋ ์ด์จ๋ "์ ์ ํ" ๊ฐ์ธ ์ํ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
Python์ ์ ์ธํ๊ณ (๋ค์), ์ด๋ค ์ธ์ด๋ ๊ฐ์์ฑ์ ๋ฐ๋ผ ํ๋ ์ ์ธ ๋๋ ํ๋ ์ก์ธ์ค๋ฅผ ๋ค๋ฅด๊ฒ ํ์ํํ์ง ์์ผ๋ฉฐ ํ์ํ ๊ฒฝ์ฐ ๋ชจ๋ ์๋ก์ด ๊ฐ์์ฑ ์์ ์๋ฅผ ํ์ฉํฉ๋๋ค.
๋๋ ๋ํ #
๋ฐ @
๋ ๋ค ๋ฐ์ฝ๋ ์ดํฐ์ ๊ฐ์ ๊ฒ, ์ฆ ์ผ๋น์ ๋ง์ ๋ฐ๋ฅด๋ฉด "๊ตฌ๋ฌธ์ ์ผ๋ก ๋ช
๋ นํ ํ๋ฆ์ '์ธ๋ถ'"์ ๋ ์ ์๋ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
JavaScript๊ฐ ํ๋ ๊ฒ์ฒ๋ผ ์ผ๋ฐ ํ๊ฐ๋ฅผ ์ง์ํ๋ ๋์ ๊ทธ๋ ๊ฒ ํ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํ์ ๋ ์ฉ์ด๋ก ์ค๋ช ํ ์ ์์ต๋๊น? (https://github.com/tc39/proposal-private-fields/issues/14์ ์์ ์ ์์)
์ด๋ฌํ ๋ฌธ์ ์ ๋ชฉ๋ก์ ์์ ์ ํจ๊ป ํ ๊ณณ์์ ์ฐธ์กฐํ ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น๋ค๋ ์ฌ์ค์ด ์ฌ์ ํ ๋ฏฟ๊ธฐ์ง ์์ง๋ง ๋น๊ตํ ์ ์๋ ์์น๋ ์์ต๋๋ค.
TypeScript์์์ ๊ฐ์ ๊ท์น์ ๋นํด ์ ๋ง ๋น๊ณต๊ฐ๋ก ํ๊ณ ์ถ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ ๊ฒ์ ๋๋ค. JavaScript์์ ์์ฑ์ ์กฐํํ ๋๋ง๋ค ํ๋ก์ธ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
undefined
๋ฐํํ๊ฑฐ๋ ๋ด์ธ ๋๋ ๋๊ฒฐ๋์ง ์์ ๊ฒฝ์ฐ ๊ฐ์ ์์ ์ ์์ฑ์ผ๋ก ์ค์ ํ๊ณ ์ฐ์ญ์์ค.์ด์ ์ด๋ฆ์ ํจํด์ด ์๋ privates๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณ ์ ํ ์์ฑ์ด ์๊ณ ํ๋กํ ํ์ ์ฒด์ธ์ ์ฌ๋ผ๊ฐ์ง ์๋ ์์ฒด private ์์ฑ๊ณผ ๊ฐ์ ๊ฒ์ ๊ฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ์ธ ์์ฑ์ ์ก์ธ์คํ ์ ์๋ ๋ชจ๋ ์์ ์ ๋ํด์๋ ํด๋น ์์ฑ์ ์ฐพ์์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ์ด ์ฐธ์กฐ๋๋์ง ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฒ์ํ ๋ค์ ๋น๊ณต๊ฐ์์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์๋ง ๋งค์ฐ ์ํํ ์ ์์ต๋๋ค. ํ๋กํ ํ์ ์ฒด์ธ์์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐพ์์ง๋ง ๋น๊ณต๊ฐ ๋ฒ์ ๋ ์๋ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ๋ ๊น์?
๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ JavaScript ํด๋์ค๊ฐ ์ฌ์ ํ ์ฝ๊ฐ ์๋ชป๋ ์ด๋ฆ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ณธ์ง์ ์ผ๋ก ํ๋กํ ํ์ ์์ ์์ฑ์ ํจ์์ ๋ํ ๊ตฌ๋ฌธ ์คํ์ ๋๋ค. tc39/proposal-private-fields#14์ ์ถ๊ฐํ๋ ค๊ณ ํ๋ ํ ๊ฐ์ง ์๊ฐ์ด ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํ์ ๋ ์ฉ์ด๋ก ์ค๋ช ํ ์ ์์ต๋๊น?
ํธ์ถ ์ฌ์ดํธ๋ฅผ ๋ค์ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ง์ํ ์ ์์ต๋๋ค.
class Foo {
private foobar: string;
baz() {
const p = 'foo' + 'bar';
console.log(this[p]);
}
}
๋๋ eval
๊ตฌ์กฐ์ ๊ฐ์ ์ฉ๋. ๋น๊ณต๊ฐ์ ๋ํ ์ธ๋ฑ์ค ์ก์ธ์ค ๋๋ ํ๊ฐ ์ง์ ์์๊ณผ ๊ฐ์ ๊ฒ์ ์ง์ํ์ง ์๋๋ก ์ ํํ ์ ์์ง๋ง "์ ๊ท์ฐฎ์"ํฉ๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ด ์ ์์์์ ์ด๋ค ์์ผ๋ก๋ ์ง์ ๋์์ง๋ง ์ฌ๋๋ค์ ์ฌ์ ํ โโ"ํ์ง๋ง ๋๋ ์ฌ์ ์ธ ๊ฒ์ ์ข์ํฉ๋๋ค" ๐.
๋น์ ์ ์์ ์ ์ฌ์ฐ์ด ์์ ๊ฒ์ ๋๋ค, ๋น์ ์ ์์ ์ ์ฌ์ ์ฌ์ฐ๊ณผ ๊ฐ์ ๊ฒ์ ๊ฐ์ง ๊ฒ์ ๋๋ค
์ค๋ช
์์ visibility
ํญ๋ชฉ์ด ์๋ ๋จ์ผ ์์ฑ ์งํฉ์ด ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ ํด๋น ์์ฑ์ด ํ์ฌ ๊ฐ์ฒด์ ์กด์ฌํ์ง ์์ผ๋ฉด ์์นํ ์ง ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ํ๋กํ ํ์
์ฒด์ธ.
ํธ์ถ ์ฌ์ดํธ๋ฅผ ๋ค์ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ง์ํ ์ ์์ต๋๋ค.
AFAIK, ์ด์จ๋ ์ง์๋์ง ์์ต๋๋ค( ref ).
๋๋ ์ฌ์ ํ ํ๊ฐ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ง ์์ต๋๋ค. ์์ฑ ์ด๋ฆ์ด ๊ณ์ฐ๋ ํ ์์ฑ ๊ฒ์ฌ๊ฐ ๋ฐํ์์ ๋ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๋๋ค์ ์ฌ์ ํ โโ"ํ์ง๋ง ๋๋ ์ฌ์ ์ธ ๊ฒ์ ์ข์ํ๋ค"
์ ๋ ๊ทธ๋ฐ ์ฌ๋๋ค ์ค ํ ๋ช ๋ ๋์ง ์๊ณ ๋ฌธ์ ๋ฅผ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ง๋ง ์ ์๋ ๊ตฌ๋ฌธ์ด ์ ๋ฅผ ๋ถํธํ๊ฒ ๋ง๋ญ๋๋ค. =)
์๊ฒ ์ต๋๋ค. ์ด์ ํ๊ฐ/์ฌ์์ฑ ์ฌ๋ก๋ฅผ ์ดํดํ ๊ฒ ๊ฐ์ต๋๋ค. ํด๋์ค ๋ด์ ์ฌ์ฉ ์ฌ์ดํธ๋ ์ ์ธ๋ ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์์ฑ์ ๋ํ๋ด๋๋ก ๋ค์ ์์ฑ๋๋ฉฐ ๋จ์ ์กฐํ๊ฐ ์๋๋ฉด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ค๋ช ์์ ๊ฐ์์ฑ ํญ๋ชฉ์ด ์๋ ๋จ์ผ ์์ฑ ์งํฉ์ด ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ ํ์ฌ ๊ฐ์ฒด์ ์์ฑ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ํ๋กํ ํ์ ์ฒด์ธ์ ์์นํ ์ง ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
ํ . ๊ทธ๋ฌ๋ ํ์ฌ ํด๋์ค์ ์กด์ฌํ์ง ์๋๋ค๋ฉด ์ ์์ non-private๊ฐ ์๋๊ฐ์? ๊ทธ๋ ๋ค๋ฉด (์ผ๋ฐ ๊ณต๊ฐ ์์ฑ ์กฐํ์ ๋ง์ฐฌ๊ฐ์ง๋ก) ์ด์จ๋ ํ๋กํ ํ์
์ฒด์ธ์ ์๋ก ์ด๋ํด์ผ ํฉ๋๋ค. private
์ก์ธ์ค์ ๋ํ ์ถ๊ฐ ์์
์ ์์ต๋๋ค.
(๋๋ ์๋ง๋ ๋ช ๋ฐฑํ ๊ฒ์ ๋์น๊ณ ์์ ๊ฒ์ ๋๋ค)
๊ทธ๋ฌ๋ ํ์ฌ ํด๋์ค์ ์กด์ฌํ์ง ์๋๋ค๋ฉด ์ ์์ non-private๊ฐ ์๋๊ฐ์? ๊ทธ๋ ๋ค๋ฉด (์ผ๋ฐ ๊ณต๊ฐ ์์ฑ ์กฐํ์ ๋ง์ฐฌ๊ฐ์ง๋ก) ์ด์จ๋ ํ๋กํ ํ์ ์ฒด์ธ์ ์๋ก ์ด๋ํด์ผ ํฉ๋๋ค.
์๋์, ๋น์ ์ ์ฌ๋ผ๊ฐ๊ณ ์ถ์ง ์์ต๋๋ค. ๊ฐ์ธ ๋ ์ด๋ธ์ ์์๋์ง ์์ผ๋ฉฐ ํ์ ํด๋์ค๋ ๋ง์คํน/์ด๋ฆ ์ถฉ๋์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ๊ฐ์ธ ๋ ์ด๋ธ์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
@glen-84 ์ธ๊ธํ ๋ ๊ฒ์๋ฌผ ๋ชจ๋ ์๋ช ๋์ง ์์ ๊ฐ์ธ ์ํ์ ๋ฌธ์ ๊ฐ ์์์ ๋ํ๋ ๋๋ค. ๊ทธ๋ฌํ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น? ์กฐํ ์ฒด์ธ์ ๋ณต์กํ๊ฒ ๋ง๋๋ ๊ฒ์ ํธํ์ฑ ๋ฉด์์ ์ํํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ข์ ์ฑ๋ฅ์ผ๋ก ๊ตฌํํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ (๊ธฐ์กด ํ๋ก๊ทธ๋จ์ ๋๋ฆฌ๊ฒ ๋ง๋ค ์ ์์) ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก์์ ์ ๊ณฑํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ธ์ด์ ์ ์ ๋ชจ๋ธ์ ์๋นํ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค. ์ด๋ฏธ ๋น๊ต์ ๋ณต์กํ ๊ฐ์ฒด ์์คํ ์ ๊ฐ์ง๊ณ ์์).
์ธ์ด ๊ฐ ๋น๊ต์์ Ruby๋ฅผ ์ธ๊ธํ์ต๋๋ค. ๋๋ Ruby๊ฐ @
_with_ ๊ฐ์ธ ์ํ์ ์ข์ ์๋ผ๊ณ ์๊ฐํฉ๋๋ค. sigil ์์ด getter ๋ฐ setter ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
์๋์, ๋น์ ์ ์ฌ๋ผ๊ฐ๊ณ ์ถ์ง ์์ต๋๋ค. ๊ฐ์ธ ๋ ์ด๋ธ์ ์์๋์ง ์์ผ๋ฉฐ ํ์ ํด๋์ค๋ ๋ง์คํน/์ด๋ฆ ์ถฉ๋์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ๊ฐ์ธ ๋ ์ด๋ธ์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ฑ์ด ํ์ฌ ํด๋์ค์ ์์ผ๋ฉด ์๋ก ์ด๋ํ์ฌ ๊ณต๊ฐ ๋๋ ๋ณดํธ ์์ฑ์ ์ฐพ๋ ๊ฒ์ ์๋ฏธํ์ต๋๋ค.
์ธ๊ธํ ๋ ๊ฒ์๋ฌผ ๋ชจ๋ ์๋ช ๋์ง ์์ ๊ฐ์ธ ์ํ์ ๋ฌธ์ ๊ฐ ์์์ ๋ํ๋ ๋๋ค. ๊ทธ๋ฌํ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น?
JavaScript์ ๋ด๋ถ ์๋์ ๋ํ ์ดํด๊ฐ ์๋ ์ฌ๋์ผ๋ก์ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค.
You'd have to somehow encode a "private key" into each lexical environment.
๋๋ ์ด๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ ํ ๋ชจ๋ฅธ๋ค. ๋ฌด์์ ์ํ ๊ฒ์ ๋๊น? ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๊น?
You'd have to change the semantics of each and every property access (because any property access might result in a private field). Engines are highly optimized around the current property lookup semantics.
๊ฐ์์ฑ์ ์ผ๋ ๋จ์ผ ์ค์์น๊ฐ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ๋๋ก ๊ณ ๋๋ก ์ต์ ํ๋์ด ์์ต๋๊น?
Would for-in enumerate over these properties?
๋ฌธ๋งฅ์ ๋ฐ๋ผ ๋ค๋ฅผ ๊ฒ ๊ฐ์์. ๊ฐ์ ํด๋์ค ๋ด์์ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ private
์ฌ์ฉํ์ง ์๋ ์ด์ ๊ฐ ์๋๋ผ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ด๋ฉฐ ๋ค๋ฅธ ์ธ์ด์์ ์ด๋ฏธ ์ด๋ฌํ ์ง๋ฌธ์ ๋ตํ์ ๊ฒ์
๋๋ค.
Can someone shadow a private property with a normal property lower on the prototype chain? What about the reverse?
์๋ง๋ ์ฒซ ๋ฒ์งธ ์ง๋ฌธ์๋ ์(๊ฐ์์ฑ์ด ์ฆ๊ฐํจ)์ด๊ณ ๋ ๋ฒ์งธ ์ง๋ฌธ์๋ ์๋์ค์ผ ๊ฒ์ ๋๋ค. ๋ค์ ๋งํ์ง๋ง, ์ด๊ฒ์ ๋ชจ๋ ์ด์ ์ ์ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ต๋๊น?
How do you prevent leaking the names of private fields to clients that shouldn't know that information? This is probably a fatal information leak.
๊ฐ์์ฑ์ ๊ณต๊ฐ ์ธํฐํ์ด์ค๋ฅผ ์บก์ํํ๊ณ ์ ์ํ๊ธฐ ์ํ ๋๊ตฌ์ผ ๋ฟ์ ๋๋ค. ๊ฐ๋ฐ์์ 99%๋ ์๋ง๋ "์ ๋ณด ์ ์ถ"์ ๋ํด ์ ๊ฒฝ ์ฐ์ง ์์ ๊ฒ์ ๋๋ค. ์ฆ, ์ฌ๊ธฐ์์ ๋ ๊ฐ์ง ๊ฐ๋ณ ๊ธฐ๋ฅ์ ์ ์
All of this runtime stuff is going to be terrible for performance
์ฑ๋ฅ์ ์ํ๋ฉด "์จ๊น/๋ณด์ ์ํ"๋ฅผ ์ฌ์ฉํ์ญ์์ค. :D ์ง์งํ๊ฒ ๋งํ์๋ฉด ์ด๋ค ์ ํ์ ์ฑ๋ฅ ์์ค์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น? ๋๊ตฐ๊ฐ ํ๋กํ ํ์ ์ ๋ง๋ค ์๋ ์์ต๋๋ค. =)
Also, we couldn't use such a solution to self-host the built-ins
์์ฒด ํธ์คํ ๋ด์ฅ ๊ธฐ๋ฅ(์ด๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ดํดํ๊ณ ์๋ค๋ฉด)์ด ์ฑ๋ฅ์ ์ ๋ง ์ข์ง ์์ต๋๊น? ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ... "์จ๊ฒจ์ง/๋ณด์ ์ํ"๋ฅผ ์ฌ์ฉํ๊ณ ์์ ์์ค์ ๊ฐ์ธ/๋ณดํธ๋ ๊ฐ์์ฑ์ ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
์กฐํ ์ฒด์ธ์ ๋ณต์กํ๊ฒ ๋ง๋๋ ๊ฒ์ ํธํ์ฑ ์ธก๋ฉด์์ ์ํํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด๊ฒ์ด ์๋ํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ์ต์ด์/์ ์ผํ ์ฌ๋์ด ์๋๋๋ค. ์์ฑ์ ์ก์ธ์คํ๋ฉด ๊ฐ์์ฑ์ ์ํด ์ค๋ช ์๋ฅผ ์ฐพ๊ณ ๊ทธ์ ๋ฐ๋ผ ์๋ตํฉ๋๋ค. JS์์ ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ชจ๋ฅธ๋ค๋ฉด ๋ณต์กํด ๋ณด์ด์ง ์์ต๋๋ค. JS ๋ด๋ถ/์์ฑ ์กฐํ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ๋จ๊ธฐ ๊ณผ์ ์ ์ ๋ง ์ฝ์ด์ผ ํฉ๋๋ค. =ํผ
Ruby๋ sigil--@์ด ์๋ private state์ ์ข์ ์๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Ruby๋ C ๊ณ์ด ์ธ์ด๋ ์๋๋ฉฐ ๊ณต๊ฐ ํ๋๋ ์๊ณ getter์ setter(์ ๊ทผ์)๋ง ์์ต๋๋ค. ํ์ฌ ๋น๊ณต๊ฐ ์ํ ์ ์์๋ ๋์ผํ ๋ฒ์ฉ(์์ฑ ์ ์ธ)์ ์ฌ์ฉํ์ฌ ๋๋ํ ์ฌ๋ฌ ์ ์ธ์ด ์์ง๋ง ์๊ฐ์ ์ผ๋ก ๋ค๋ฅด๊ณ ์ผ๊ด์ฑ์ด ์๋ ๊ตฌ๋ฌธ์ด ์์ต๋๋ค.
๊ทธ๋ ๊ธด ํด๋, ๋๋ ์ฌ๊ธฐ์ ๋ด ๊น์ด๋ฅผ ๋ฒ์ด๋ฌ๊ณ , ๊ฐ์น๋ณด๋ค ๋ ธ์ด์ฆ๋ฅผ ๋ ๋ง์ด ์ถ๊ฐํ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฏ๋ก ์กฐ์ฉํ ํ๊ณ ์ ๋ฌธ๊ฐ๋ค์ด ํฉ์์ ์ด๋ฅด๋๋ก ํ๋ ค๊ณ ํฉ๋๋ค.
๋๋ ์ด ํฌ๋ง์ ๋ํด TC39์ ๋ ผ์ํ๊ณ ์ ๋์ฌ๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ค๋ฅธ ์์ด๋์ด๋ฅผ ์๊ฐํด๋ผ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค. TypeScript๊ฐ ๊ฐ์ธ ํ๋๋ฅผ ๊ตฌํํ๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒฝ์ฐ์๋ ์ฌ์ ํ TC39์ 1๋จ๊ณ์ ์์ผ๋ฏ๋ก ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
TypeScript ํ์ ๊ตฌ๋ฌธ๊ณผ ๊ธฐํธ/๋ฌธ์ ์ ๋์ฌ์ ์ฌ์ฉ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํฉ๋๊น?
๊ฐ์ธ์ ์ผ๋ก ๋ฌด์ญ๊ฒ ์๊ฒผ๋ค๋ ์๊ฐ์ด...
์ฐธ๊ณ ์ ๋ #
๊ตฌ๋ฌธ์ ์ ๊ฑฐํ๊ธฐ ์ํ ์ ์ ์ ํ์ต๋๋ค.
@shelby3 ๋ถํํ๋, ๋๋ ๊ทธ๊ฒ์ ํ์ค์ ์ธ ์ต์
์ผ๋ก ๋ณด์ง ์์ต๋๋ค. tl;dr, ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ฒ์ด eval
์ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ๋ํด ๊ฑฑ์ ํด์ผ ํฉ๋๋ค. sigil์ ํฌํจํ์ง ์์ผ๋ฉด ๋ชจ๋ ๊ฒ์ด "๋๋ฌด ์ญ๋์ "์ผ๋ก ์๋ํ์ฌ ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค.
@littledan ๋๋ ์ง๊ธ ๊ฑฐ๊ธฐ์ ๋ฐ๋ผ sigil ์ฌ์ฉ์ ๋ํ ๋์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ฃผ์ฅ ๊ณผ TypeScript์์ ํธํ์ฑ ์ ํ์ต๋๋ค . ๋ฉ์๋์ ํ์ํ๋์ง ์์ ์ธ์์ ๋ํด ๊ฐ์ธ ์ ๋ณด๋ฅผ ์ ์ธํด์ผ ํ๋ ์ด์ ๋ฅผ ์ด์ ์ดํดํฉ๋๋ค.
@isiahmeadows
ํ์ฌ์ ์ ์ฌ ๋น๊ณต๊ฐ ๊ตฌํ์ ๋๋ถ๋ถ ๋์ฒดํ ๊ฒ์ ๋๋ค. [...] ๋ํ, ์ ์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ ๋น๊ณต๊ฐ ์์ฑ์ด ํด๋์ค ์์ฒด ๋ด์์๋ง ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์์ฌ ๋น๊ณต๊ฐ ๊ตฌํ์ ๋์ฒดํ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ ๋จ์ง ํด๋์ค ๋ด์์ ๊ฐ์ฉ์ฑ์ด ์ค์ ๋ก (์ด์ฉํ๋ฉด ํ๊ท ์ ๊ทผ์ฑ์ ์ํด ์ฃผ์ด์ง) ๊ทธ๋ฐ ์ข์ ์ผ์ด ์๋๋ผ๊ณ ์๊ฐ. ์๋ฅผ ๋ค์ด ๋ณด์ ๋ชฉ์ ์ผ๋ก ์๊ฒฉํ๊ฒ ๊ฐ์ธ์ ์ด๊ณ ์ ๊ทผํ ์ ์๋ ์์ฑ์ ๊ฐ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ธ ํน๋ณํ ์ํฉ์ด ์์ ์ ์์์ ์ธ์ ํฉ๋๋ค. ๋ค๋ฅธ ์ธ์ด์ ์ต์ํ ์ฌ๋๋ค์๊ฒ๋ private
๊ฐ ์ค์ ๋ก JavaScript์์ ๋น๊ณต๊ฐ๊ฐ ์๋๋ผ๋ ๊ฒ์ด ๋ถ๋ช
ํ ํผ๋์ค๋ฝ๋ค๋ ๊ฒ๋ ์ธ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ณด์์์ ์ด์ ์๋ ๋ณ๋๋ก ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ private
๊ณ์ฝ์ ์ ์ํ ๋๋ง ์ฌ์ฉํ๊ณ ์ก์ธ์ค ๊ฐ๋ฅ์ฑ์ ์ ์ด ํ์ง ์์์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๊ฑด์ถ๊ฐ์ ๊ด์ ์์ TS private
-keyword ๋ฐ ์ ์ฌ ๋น๊ณต๊ฐ ํน์ฑ์ ๋ํด ๋งค์ฐ ์ข์ ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐํ์ ์ private ์์ฑ์ ๋ํ ์ก์ธ์ค ๊ฐ๋ฅ์ฑ์ ํ
์คํธ ์ค์ธ ํด๋์ค์ private ํ๋๋ฅผ ์ค์ ํ๋ ๊ฒ๋ง์ผ๋ก private state๋ฅผ ์ฃผ์
ํ ์ ์๊ธฐ ๋๋ฌธ์ any
๋ฆฌํฉํ ๋ง ์ง์), ์:
let instance: ClassUnderTest = new ClassUnderTest();
instance["_privateField"] = "My injected state";
ํน์ (๋น๊ณต๊ฐ) ์ํ์ ํด๋์ค๋ฅผ ์ค์ ํ๊ธฐ ์ํด ๋ณต์กํ ํ
์คํธ ์ฝ๋๊ฐ ํ์ํ์ง ์์ต๋๋ค.
pseudo-private ์์ฑ์ ๋ ๋ค๋ฅธ ์ฅ์ ์ ์์ญ์ด ํจ์น์ ํ์์ ์ด๋ผ๋ ๊ฒ์
๋๋ค.
TypeScript ์ปค๋ฎค๋ํฐ๊ฐ ๋ชจ๋ private variable
ํ์ private #variable
๊ธฐ๊บผ์ด ๋ณ๊ฒฝํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
TypeScript์ ๊ด์ ์์ ๋ณผ ๋ ์ฐ๋ฆฌ ๋๋ถ๋ถ์ ์ข์ ์ธ์ด(intellisense, ๋น๋ ์๊ฐ ์ค๋ฅ, ์ ํ, ๋ค์ํ ์คํ)์ ๋ํ ์ฌ๋์ค๋ฝ๊ณ ๋ฌ์ฝคํ ํ์์ ๋ง์กฑํฉ๋๋ค. ์ด๋ฌํ ํ์์ ์ฐ๋ฆฌ์๊ฒ ๋ ๋์ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํ๊ณ ๋ ๋์ ์ฝ๋๋ฅผ ๋ ๋นจ๋ฆฌ ์์ฑํฉ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ESNext ํธ๋์คํ๋ ์ด์ ์ธ์ TS๋ฅผ ์ฌ์ฉํ๋ ์ฃผ๋ ์ด์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ์์ ๊ฒฝ์ฐ Babel์ด ์๊ณ ๊ทธ๊ฒ ๋ ์ข์ต๋๋ค(๋๋ ์ ์ด๋ ๋ด๊ฐ ๋ง์ง๋ง์ผ๋ก ํ์ธํ์ ๋ ๋ ์ข์์ต๋๋ค).
๋๋ ์ค์ ๋ก ์์ค ํ์ผ์ ๊ตฌ๋ฌธ ์คํ๋ณด๋ค ๊ฐ์ธ ๋ณ์์์ ๋ ๋ง์ ๊ฒ์ ์ํ๋ ์์์ ๋ํด ๋งํ๋ ๊ฒ์ด ์๋๋๋ค. ๋๋ ๊ทธ ์ฌ๋๋ค์๊ฒ ๋ ๊ฐ๋ ฅํ ๊ฒ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ง๋ ๋ค์ดํฐ๋ธ ์ฝ๋์ ๋ ๊ฐ๊น์ต๋๋ค.
ํ์ง๋ง ๋๋จธ์ง๋ JS private์ด ํ์ํ์ง ์์ต๋๋ค. C++, Java, C# ๋ฑ์์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๊ฐ๋จํ๊ณ ์ฌ์ด private convenient
๋ณ์๊ฐ ํ์ํฉ๋๋ค.
์ฐ๋ฆฌ์๊ฒ ๊ณ ํต์ด ๋์ง ์๋ ํด๊ฒฐ์ฑ
์ ํฌํํด ์ฃผ์ญ์์ค. ์๋ง ์ํํธ ํ๋ผ์ด๋น? ์ฐ๋ฆฌ๊ฐ sigil private #variable
์ ์ํ๋์ง ์์ฌ์ค๋ฝ๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋๋ฉด TS private
์ ES private์ด ๋ค๋ฅธ ๊ฐ๋
์ผ๊น์? ๋ชป์๊ธด.
@igabesz
TypeScript ์ปค๋ฎค๋ํฐ๊ฐ ๋ชจ๋
private variable
ํ์private #variable
๊ธฐ๊บผ์ด ๋ณ๊ฒฝํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ฌ์ค ๊ทธ ์ ์์ผ๋ก private
๋ ๋ถํ์ํ ๊ฒ์
๋๋ค. ๋์ #
sigil์ ์ถฉ๋ ์์ด ์์ ํ ๋์ฒดํฉ๋๋ค.
ํ์ง๋ง ๋๋จธ์ง๋ JS private์ด ํ์ํ์ง ์์ต๋๋ค. C++, Java, C# ๋ฑ์์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๊ฐ๋จํ๊ณ ์ฌ์ด ๊ฐ์ธ์ฉ ํธ๋ฆฌํ ๋ณ์๊ฐ ํ์ํฉ๋๋ค.
TypeScript์ private์ ๋๋ถ๋ถ์ OO ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก soft private์
๋๋ค. Java์ private ๋ณ์์กฐ์ฐจ๋ ์ฌ์ ํ ๊ธฐ์ ์ ์ผ๋ก soft-private์
๋๋ค. ์๋ํ๋ฉด ๊ทธ๊ฒ๋ค์ ์ฌ์ ํ โโํ์ถ ํด์น๋ก ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. JS private์ this
๊ฐ ์๋ ์ธ์คํด์ค์ private ์ํ์ ๊ณ์ ์ก์ธ์คํ ์ ์๋ค๋ ์ ์ ์ ์ธํ๊ณ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์ฐ๋ฆฌ์๊ฒ ๊ณ ํต์ด ๋์ง ์๋ ํด๊ฒฐ์ฑ ์ ํฌํํด ์ฃผ์ญ์์ค. ์๋ง ์ํํธ ํ๋ผ์ด๋น? ์ฐ๋ฆฌ๊ฐ sigil private #๋ณ์๋ฅผ ์ํ๋์ง ์์ฌ์ค๋ฝ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋๋ฉด TS private๊ณผ ES private์ด ๋ค๋ฅธ ๊ฐ๋ ์ผ๊น์? ๋ชป์๊ธด.
๊ทธ๊ฒ๋ค์ ๋ค๋ฅธ ๊ฐ๋
์ด์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ํ์ถ์ฉ ํด์น๋ ์ค์ ๋ก ๊ฑฐ์ ์ ์ฉํ์ง ์์ต๋๋ค. ์ฃผ์ ์์ธ๋ ๊ฐ์ฒด ๊ฒ์ฌ(์: ๊ฐ๋ฐ์ ๋๊ตฌ, Node.js util.inspect
)์ด์ง๋ง ๋๋ถ๋ถ์ ํธ์คํธ ์ ์์ด๋ฉฐ ํ์ฌ ์ด๋ฏธ ๊ถํ ์๋ ๊ธฐ๋ณธ API๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ฌ์์ ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค.
๋ํ ES๊ฐ ๋น๊ณต๊ฐ ์ํ๋ฅผ ํ์คํํ๋ฉด TS๋ ์ด๋ฅผ ์ฑํํ๊ณ ๋ค์ ๋ฉ์ด์ ๋ฒ์ ์์ ์ ๊ฑฐ๋ ์์ฒด ์ํํธ ๋น๊ณต๊ฐ ๋ฉ์ปค๋์ฆ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ๊ฒ์
๋๋ค. ํญ์ ES์ ์๊ฒฉํ ์์ ์งํฉ์ด์์ผ๋ฉฐ ES ์์ฒด๊ฐ ์งํํจ์ ๋ฐ๋ผ ํ์ํ ๋งํผ ๊ธฐ๋ฅ์ ์ถ๊ฐ(๋น๋๊ธฐ ํจ์), ๋ณ๊ฒฝ(ํด๋์ค) ๋ฐ/๋๋ ์ฌ์ฉํ์ง ์์( /// <amd-dependency />
)ํ์ฌ ์๊ฒฉํ ES๋ก ์ ์ง๋ฉ๋๋ค. ์์ ์งํฉ์ด๋ฉฐ ํ์ฌ ์ฌ์์ ๋ณต์ ํ์ง ์์ต๋๋ค.
๋ํ ES๊ฐ ๋น๊ณต๊ฐ ์ํ๋ฅผ ํ์คํํ๋ฉด TS๋ ์ด๋ฅผ ์ฑํํ๊ณ ๋ค์ ๋ฉ์ด์ ๋ฒ์ ์์ ์ ๊ฑฐ๋ ์์ฒด ์ํํธ ๋น๊ณต๊ฐ ๋ฉ์ปค๋์ฆ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค.
๐ญ
๋ํ ES๊ฐ ๋น๊ณต๊ฐ ์ํ๋ฅผ ํ์คํํ๋ฉด TS๋ ์ด๋ฅผ ์ฑํํ๊ณ ๋ค์ ๋ฉ์ด์ ๋ฒ์ ์์ ์ ๊ฑฐ๋ ์์ฒด ์ํํธ ๋น๊ณต๊ฐ ๋ฉ์ปค๋์ฆ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ TS ํ์ ์
์ฅ์ด ์๋๋๋ค. ์ฐ๋ฆฌ๋ ์กฐ๋ง๊ฐ ์ด๋ค ๊ฒ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ๊ณํ์
๋๋ค.
๋น๊ณต๊ฐ ์ํ ์ ์์ด ์ฌ๋ฐ๋ฅธ ์ํ์ ๋๋ฌํ๋ฉด TS๊ฐ ์ด๋ฅผ ๊ตฌํํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ์ค๋๋ TS๊ฐ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด private์ ์ด๋ค ์๋ฏธ๋ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
@mhegazy ์๊ฒ ์ต๋๋ค. ์ ์ ํฉ๋๋ค. (๊ทธ๊ฒ์ ๊ต์ก๋ฐ์ ์ถ์ธก์ด์์ต๋๋ค, BTW.)
ํด๋์ค ํ๋ ์ ์ ์ด ํ์ฌ 2๋จ๊ณ์ ์์ผ๋ฏ๋ก TypeScript ํ์ด ์ด๋ฅผ ๊ณ ๋ คํ๊ณ EcmaScript ํ์ค์ ๋ฐ๋ฅผ ์ค๋น๊ฐ ๋์ด ๊ธฐ์ฉ๋๋ค ๐ฏ
๋น๊ณต๊ฐ ์ํ ์ ์์ด ์ฌ๋ฐ๋ฅธ ์ํ์ ๋๋ฌํ๋ฉด TS๊ฐ ์ด๋ฅผ ๊ตฌํํฉ๋๋ค.
@mhegazy 3๋จ๊ณ๊ฐ ๊ตฌํํ๊ธฐ์ ์ ์ ํ ์๊ธฐ์ ๋๊น?
ํธ์ง: ๋ด ๋๋ต ์ ์ฐพ์์ ์๋ ์์ต๋๋ค ๐
@styfle ์ ๊ตฌํ๊ณผ ๊ด๋ จ๋ ํ์ฌ ๊ณ ๋ ค ์ฌํญ์ ๋ ผ์ํ๋ ๋์์ธ ํ์ ๋ ธํธ(#16415)์ ํ ๋ก ์ ์ฐธ์กฐํ์ธ์.
3๋จ๊ณ๊ฐ ์ํํ๊ธฐ์ ์ ์ ํ ์๊ธฐ์ ๋๊น?
์. ์ฐ๋ฆฌ๋ ์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ ๋ค์ํ ๋์์ธ์ ์กฐ์ฌํ๊ธฐ ์์ํ์ต๋๋ค.
ํด๋์ค ํ๋ ์ ์์ ํ์ฌ 3๋จ๊ณ ์ ๋๋ค. (ํ ๋ฌ ์ ๊ธฐ์ค)
ํด๋์ค ํ๋ ์ ์์ ํ์ฌ 3๋จ๊ณ ์ ๋๋ค. (ํ ๋ฌ ์ ๊ธฐ์ค)
ํด๋์ค ํ๋๊ฐ Stage 3์ ๋๋ฌํ๋ ๋์ Private Methods ๋ฐ Accessors๋ ๊ทธ ์ดํ๋ก Stage 2์ ์์๊ณ ์ด์ ๊น์ง Stage 3์ผ๋ก ์ฎ๊ฒจ์ก์ต๋๋ค. ์ด์ ํด๋์ค์ private ๋ฉค๋ฒ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ด Stage 3์ ์์ต๋๋ค.
#[field]
๊ตฌ๋ฌธ ์ฑํ์ ๋ํ TS ํ์ ์
์ฅ/์งํ ์ํฉ์ ๋ํ ์
๋ฐ์ดํธ๊ฐ ์ ์ ๋์ 3๋จ๊ณ์ ์์์ต๋๊น? ๊ฐ์ธ์ ์ผ๋ก ๋๋ ๊ทธ๊ฒ์ ์ ๋ง๋ก ์ซ์ดํ๊ณ TS์ ๊ธฐ์กด private
ํค์๋๋ฅผ ํจ์ฌ ์ ํธํ์ง๋ง ๋์์ ๊ฐ๋ฅํ ํ ํ์ค์ ๊ฐ๊น๊ณ ์ถ์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ฌด ์ซ๊ณ TS์ ๊ธฐ์กด private ํค์๋๋ฅผ ํจ์ฌ ์ ํธํฉ๋๋ค.
๋๋ ๋๋ฌด ๋ชป์๊ฒผ์ด
ํ์ง๋ง @mhegazy ๋๋ ์ด๊ฒ์ (์๋)ํ๊ณ ์ถ์ต๋๋ค. ํ ์ ์์ต๋๊น?
๊ตฌ๋ฌธ ๋ถ์์ ๋์์ง ์์์ผ ํ์ง๋ง(๊ฑฐ์ ํ ํฐ์ ๋ถ๊ณผํ ๊ฑฐ์ ์๋ก์ด ์์ ์) ์ ํ ๊ฒ์ฌ๋ ๊ณ ํต์ค๋ฌ์ธ ๊ฒ์ ๋๋ค(์ด๋ป๊ฒ๋ ๋น๊ตํด์ผ ํ๋ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ข ๋ฅ์ private๊ฐ ์๊ธฐ ๋๋ฌธ์). downlevel ๋ฐฉ์ถ์ ๋์ฐ ํฉ๋๋ค(์ค์ ๋ฐํ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ์์ค์ @rbuckton ์๋ ์ด์ ๋ํ ์์ด๋์ด๊ฐ ์๊ณ ์๋ง๋ ๊ตฌํ์ด ์์ ์ ์์ต๋๋ค(ํ์คํ์ง ์์ง๋ง ๊ทธ๋ ํฌํฌ์ ๋ง์ ๊ฒ์ ๊ฐ์ง๊ณ ์์ต๋๋ค). ์ฐ๋ฆฌ๋ ๊ธฐ์ ์ ์ผ๋ก ๋น์ ์ด ์๋ํ๋ ๊ฒ์ ๋ง์ ์๋ ์์ง๋ง, ๋น์ ์ด ์๋ํ๊ณ ์ถ์ ๋ค๋ฅธ ๊ฒ์ ์ฐพ์ ์ ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ถ์ฒํ์ง ์์ ๊ฒ์ด๋ฉฐ, ๋๋ ๋น์ ์ด ๊ทธ๊ฒ์ ๋ง์น๋ฉด ๊ทธ๊ฒ์ ๋ฐ์๋ค์ผ ์ค๋น๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ๋ณด์ฅํ ์ ์์ต๋๋ค. ๋ํ private ํ๋์ ๋ฉ์๋๊ฐ ๋ฐ์ ํ์ง๋ง private statics (๋ฐ ์๋ง๋ ๋ฐ์ฝ๋ ์ดํฐ )๋ ๋ฐ์ ํ ๋๊น์ง๋ ์ฌ์ ํ ์ฝ๊ฐ ๋ถ์์ ํฉ๋๋ค(๋ชจ๋ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ๊ณ ๋ คํ ๋ ํ ๋ฒ์ ๋ชจ๋ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ ๋์ ์ ์์).
์ฌ๊ธฐ ๋ง์ด ์์ต๋๋ค.
@weswigham ์์์ด ํฌ๊ธฐ ๐
๋ค์์ ๋ด๊ฐ ( @Neuroboy23 ๋ฐ ๊ธฐํ ์ฌ๋๋ค๊ณผ ํจ๊ป) ๊ฐ์ธ ํ๋ ๊ตฌํ์ ์คํํ ๊ฒ์ด๋ผ๋
์ ๋ฐ์ดํธ: ์งํ ์ค์ธ ์์ ์ด ์ฌ๊ธฐ์ ์์ต๋๋ค .
์. ์ฐ๋ฆฌ๋ ์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ ๋ค์ํ ๋์์ธ์ ์กฐ์ฌํ๊ธฐ ์์ํ์ต๋๋ค.
๋๋ #
๊ตฌ๋ฌธ์ ์ข์ํ์ง ์์ง๋ง ์ด ๊ตฌ๋ฌธ ๋ค์ ์๋ ๊ธฐ์ ์ ์ธ ์ด์ ๋ฅผ ์ดํดํฉ๋๋ค. @mhegazy TypeScript๊ฐ namespace
, private
์ ๊ฐ์ ๊ตฌ์ ๊ตฌํ์ผ๋ก ๋ฌด์์ ํ ๊ฒ์ธ์ง ์๊ฐํ๋ ์๋ก์ด ์ ์์ ๊ตฌํํ ํ TypeScript ํ์ด ์ค์ ๋ก ํ๊ณ ์ถ์ ๊ฒ์ ๋์ผํ๊ฑฐ๋ ๊ฑฐ์ ๋์ผํ๊ฒ ์ํํ๋ ๋ ๋์ es-standard ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ด ์๋๋๋ค.
๋ํ protected
๋ํ ๋ช ์ผํธ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค. (์ง๊ธ ํฌ๋ง์ ์ผ๋ก) ์ธ์ ๊ฐ private
ํค์๋๋ฅผ ์ ๊ฑฐ/์ฌ์ฉ ์ค๋จํ๋ ค๋ ๊ฒฝ์ฐ protected
ํค์๋๋ก ๋์ผํ ์์
์ ์ํํ๋ ๊ฒ์ด ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๋์ํ์ง ์์ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง, ์, ์ถ๊ฐ ๊ฐ์์ฑ ๋ฒ์๊ฐ ๋๋๋ก ํธ๋ฆฌํ ์ ์์ง๋ง, ๊ทธ๊ฒ์ ์ ๋ฐ์ ์ธ ๊ฐ์น๋ ๊ทธ๋ค์ง ๋์ง ์์ต๋๋ค.
@pleerock ,
์ด๊ฒ์ด ๋ด๊ฐ TypeScript์์ ๋ณผ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ ๊ฒ์ ๋๋ค.
class Example {
private a = 1;
#b = 2;
}
๋ฐฉ์ถ(ESNext ๋์):
class Example {
a = 1;
#b = 2;
}
๋ฐฉ์ถ(ESNext๋ฅผ ๋์์ผ๋ก ํ๊ณ ES ๊ฐ์ธ ํ๋๋ก ๊ฐ์ธ์ผ๋ก ํ์๋ ํ๋๋ฅผ ๋ฐฉ์ถํ๋ ์๋ก์ด ์ปดํ์ผ๋ฌ ์ต์ ์ฌ์ฉ):
class Example {
#a = 1;
#b = 2;
}
์ด๋ ์ด์ ๋ฒ์ ๊ณผ ํธํ๋์ด์ผ ํ๋ฉฐ ๊นจ๋ํ ๊ตฌ๋ฌธ์ผ๋ก ES ๊ฐ์ธ ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค.
@glen-84 ๋น์ฐํ ๊ทธ๋ ๊ฒ ์ฃ . ์ ๋ ๊ตฌ์ ํค์๋์ ๊ตฌ๋ฌธ์ ๋ํ ์ฅ๊ธฐ ๊ณํ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์์ต๋๋ค.
๊ตฌ๋ฌธ์ด๋ ํค์๋๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ๊ณํ์ ๋๋ค.
๋ํ private
๋ฅผ #
๋ก ๋ณํํ๋ ์ต์
์ด ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์์๋๋ ๋์์ด ๋ค๋ฆ
๋๋ค. #
๋ ํ๋ ๋ฐํ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ์ด๋ฉฐ private
๋ ๋์์ธ ์๊ฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ์
๋๋ค.
@weswigham ์ ๋ ๊ทธ๋ ๊ฒ ์๊ฐํฉ๋๋ค. @RyanCavanaugh ์, ์์๋ ๋ต๋ณ์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ ํ ๋๋ ์ต์ ecmascript ์ ์์ผ๋ก ์ธํด ์ธ๋ชจ ์๊ฒ ๋์๊ธฐ ๋๋ฌธ์ ์๋ก์ด ์ฌ์ฉ์๊ฐ ๋ค์์คํ์ด์ค/๋น๊ณต๊ฐ ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ์ต์ํ ๋ช ๊ฐ์ง ์ ๋ต์ ์ ์ฉํ ๊ฒ์ ๋๋ค.
์ฌ๋๋ค์ ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ๋ฌผ๋ก ์
๋ฐ์ดํธํ๋ ๋ฌธ์ ์ฝ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ฒ์ ์์๋
๋๋ค. module foo {
๋ ์ฌ์ ํ ์ธ์ด์ ์์ง๋ง namespace foo {
์ด์ ์ ์์ฃผ ์ค๋๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์ธํ๊ณ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ์ด์ ์ผ์์์ ๋ณผ ์ ์์ต๋๋ค.
@RyanCavanaugh ์ ๋ค์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ ํ ๋๋ C#์์ ์ค๋ ์๋ก์ด ์ฌ๋๋ค์ด ํ์คํ ๋ค์์คํ์ด์ค(์ ๋ถ๋ ์๋์ง๋ง ์ผ๋ถ)๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. ๋ค๋ฅธ ์ธ์ด์์ ์จ ์ฌ์ฉ์๋ ๋ง์ฐฌ๊ฐ์ง์ผ ๊ฒ์
๋๋ค. #
๋์ private๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๊ณ ๋ค์์คํ์ด์ค๊ฐ ์๋ ์์ ๋ณด๋ค ๋ ๋ง์ ๊ฒฝํฅ์ด ์์ต๋๋ค.
๋ํ private๋ฅผ #๋ก ๋ณํํ๋ ์ต์ ์ด ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์์๋๋ ๋์์ด ๋ค๋ฆ ๋๋ค. #์ ํ๋ ๋ฐํ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ์ด๋ฉฐ private์ ๋์์ธ ์๊ฐ ๊ฐ์ธ ์ ๋ณด์ ๋๋ค.
๋์ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ... ๋ถํํ ๊ตฌ๋ฌธ์ ํผํ๊ธฐ ์ํด ์๊ฒฉํ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ์ํด ์ ํ์ ์ผ๋ก private
๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋์ต๋๋ค.
์ด์จ๋ soft-private๋ ๋ด (ํ์ฌ) ์ฌ์ฉ ์ฌ๋ก์ ์ถฉ๋ถํ ๊ฒ์ ๋๋ค.
์ด ๊ธฐ๋ฅ์ด ๊ฑฐ๋ํ๊ณ ๋ฒ์ 3์ด ์ฌ๋๋ค์ด ์๋ก์ด #
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์์ํ๋๋ก ํ๋ ์ข์ ๊ธฐํ๋ก ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์์ผ๋ก ๋์ฌ TypeScript 3 ๋ฒ์ ์ ์ด ๊ตฌ๋ฌธ ์ง์์ ํฌํจํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํธ์ง: ๋ฒ์ 3์ด ์ด๋ฏธ ์ถ์๋์๋ค๋ ์ฌ์ค์ ์์ด๋ฒ๋ ธ์ต๋๋ค.
์ฐธ๊ณ ๋ก, ์ต๊ทผ TC39 ์ ์์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ฐ์ธ ํ๋/์ฌ๋กฏ/๋ฌด์์ด๋ ๊ฐ์ ์ฝ๊ฐ์ ๋ณ๋์ด ์์ผ๋ฏ๋ก ํ์ฌ ํ์์ ์ ์์ด ์ฑ๊ณตํ ์ง๋ ํ์คํ์ง ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ๊ด๋ จ ๋ฌธ์ ์ ๋๋ค.
์ ๋ TC39๋ ์๋์ง๋ง ๋ชจ๋ ์ฌ๋์๊ฒ ๊ฐ์ธ์ ์ผ๋ก ์ ์ํ๋ ๊ฒ์ ๋จผ์ ๊ตฌ๋ฌธ์ด ๋ค์ ๊ตณ์ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ๋ค์( 4๋จ๊ณ๊น์ง ๊ธฐ๋ค๋ฆด ์ ์์) ๊ตฌํํ๋ ๊ฒ์ ๋๋ค.
FWIW ๋๋ tc39/proposal-class-fields#100์ ๋
ผ์๋ฅผ ํน์ ํ ๊ฒ์ ๋ํ๋ด๋ ๊ฒ์ผ๋ก ํด์ํ์ง ์์ ๊ฒ์
๋๋ค. #
๋ ์ฒ์์๋ ๋ฏ์ค์ง๋ง ์ ํธ๋๋ ๊ตฌ๋ฌธ ํ์์ ์ ์๋์ง ์์์ผ๋ฉฐ ์ฌ๋๋ค์ด ์ํ๋ ์ ์ผํ ๊ตฌ๋ฌธ์ ๋ถ๋ช
ํ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ผ์ข
์ ์ ๋์ฌ sigil์ด ์์ด์ผ ํ๋ฉฐ this.someProp
๋ฅผ ๋น๊ณต๊ฐ๋ก ํ์ฉํ๋ ค๋ ๋ชจ๋ ์๋๋ ์คํจํ ์ด๋ช
์
๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์คํ๋ ค ๋ฌด์ํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง ์์งํ ๊ทธ๊ฒ์ด ๋ด ์๋๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ํด๋น ์ค๋ ๋์ ๋ถ๋ง ์ ๊ธฐ์ ์ค ๋๊ตฌ๋ ๊ธฐ์กด ์ค๋ ๋ ๋๋ FAQ์์ ํด๊ฒฐ๋ ํต์ฌ ๊ธฐ์ ๋ฌธ์ ์ ์๋ฏธ ์๊ฒ ๊ด์ฌํ์ง ์์์ต๋๋ค. ํด๋น ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ค๋ ๋๋ฅผ ์ฝ๊ณ ์ sigil์ด ํ์ํ์ง์ ๋ํ ๊ธธ๊ณ ์ ํํ ์ค๋ช ์ ๋ณด๋ ๊ฒ์ ์ฐ์ธํฉ๋๋ค.
์๊ฒฉํ ๋ฐํ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๊ฐ ์ ๋ง๋ก ํ์ํ์ง ์๋ ํ ์๋ฌด๋ ๊ฐ์ธ ํ๋๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ต์ข ๋ชฉํ์ธ ๊ฒฝ์ฐ ์ฑ๋ฅ ๋ฐ ๋๋ฒ๊น ๊ฐ๋ฅ์ฑ ์ธก๋ฉด์์ ์น์ ์ข์ ๊ฒฐ๊ณผ์ผ ์ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ธ๊ธํ๊ธฐ์ ์ด์์ ์ธ ๋ฌธ์ ๊ฐ ์๋ ์๋ ์๋ค๋ ๋ฐ ๋์ํ์ง๋ง, ๋ค๋ฅธ ํ๋๋,
tc39/proposal-class-fields#106, ์๋ง๋ ํจ์ฌ ๋ ์์์ ์ผ ๊ฒ์
๋๋ค.
๋ค๋ฅธ ๋ฌด์๋ณด๋ค๋ ์ฝํ ๋งต์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํ ์ง์งํ ํ ๋ก
ํ๋ก์ interop์ ๋ถ๋ช
ํ ์ง์ฆ๋ฉ๋๋ค.
์ด์ฌ์ ๋ฉ๋์ฐ์ฆ
[email protected]
www.isiahmeadows.com
2018๋
7์ 30์ผ ์์์ผ ์คํ 3:38 Ryan Cavanaugh ์๋ฆผ @github.com
์ผ๋ค:
FWIW ๋๋ ํ ๋ก ์ ํด์ํ์ง ์์ ๊ฒ์ ๋๋ค
tc39/proposal-class-fields#100
https://github.com/tc39/proposal-class-fields/issues/100 ์์
ํนํ ์ด๋ค ๊ฒ์ ๋ํ๋ ๋๋ค. # ์ฒ์์๋ ์ผ๊ตด์ด ๋ถ์ด์ง๋๊ฒ ์์์ง ์์ง๋ง
์ ํธ๋๋ ๊ตฌ๋ฌธ ํ์์ ์ ์๋์ง ์์์ผ๋ฉฐ ์ ์ผํ ๊ตฌ๋ฌธ์
์ฌ๋๋ค์ด ์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ ๋ถ๋ช ํ ์คํ ๊ฐ๋ฅํ์ง ์์ต๋๋ค. ์ ๋์ฌ๊ฐ ์์ด์ผ ํฉ๋๋ค
์ผ์ข ์ ์ธ์ฅ๊ณผ this.someProp์ ๋น๊ณต๊ฐ๋ก ํ์ฉํ๋ ค๋ ๋ชจ๋ ์๋
์คํจํ ์ด๋ช ์ ๋๋ค.๋๋ ๊ทธ๊ฒ์ด ์คํ๋ ค ๋ฌด์ํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง ์์งํ ๊ทธ๊ฒ์ด ๋ด ์๋์ ๋๋ค-
ํด๋น ์ค๋ ๋์ ๋ถ๋ง ์ ๊ธฐ์ ์ค ๋๊ตฌ๋
ํ์กดํ๋ ์ฐ๋ ๋๋ FAQ์์ ๋ค๋ฃจ๋ ํต์ฌ ๊ธฐ์ ๋ฌธ์ . ์ด๊ฒ์
๊ทธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ค๋ ๋๋ฅผ ์ฝ๊ณ ๊ธด ์๊ฐ์ ๋ณด๋ ค๋ฉด ์ ๋ง ์ฐ์ธํฉ๋๋ค.
์ธ์ฅ์ด ํ์ํ ์ด์ ์ ๋ํ ์ฌ๋ฐ๋ฅธ ์ค๋ช ์
์ง๋ฉด.์ต์ข ๊ฒ์์ด ์ ๋ง๋ก ๊ฐ์ธ ํ๋๋ฅผ ์ฌ์ฉํ์ง ์๋ ํ ์๋ฌด๋ ๊ฐ์ธ ํ๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ด๋ผ๋ฉด
์๊ฒฉํ ๋ฐํ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๊ฐ ํ์ํฉ๋๋ค. ์ด๋ ์๋ง๋ ์น์์ ์ข์ ๊ฒฐ๊ณผ์ผ ๊ฒ์ ๋๋ค.
์ฑ๋ฅ ๋ฐ ๋๋ฒ๊น ๊ฐ๋ฅ์ฑ ์ธก๋ฉด์์.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/Microsoft/TypeScript/issues/9950#issuecomment-408984395 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AERrBGCphyQUu5lJQW7lgsqALLL3e0_Wks5uL2DLgaJpZM4JVDwV
.
WeakMaps ์ฌ์ฉ์ ๋ํ ๋ ผ์๊ฐ ์์ง๋ง Proxy์์ ์ํธ ์์ฉ์ด ์ด๋ป๊ฒ ํฅ์๋๋์ง๋ ์ ์ ์์ต๋๋ค. ๋น๊ณต๊ฐ ์์ ๊ธฐ๋ฅ์ด ์ด๋ป๊ฒ ์๋ํ์ฌ ํผ๋๋ฐฑ์ ์ํด ์์ํ์ ์ ์ถํด์ผ ํ๋์ง์ ๋ํด ๋ค๋ฅธ ์์ด๋์ด๊ฐ ์๋ TC39 ํ์์ ์ด๋ํ๊ณ ์ถ์ต๋๋ค. ํ์ฌ ์ด ์ ์์ 3๋จ๊ณ์ ์์ผ๋ฉฐ ์ด๋ก ์ ์ผ๋ก ์์ํ์ ํฉ์๋ ์ ์ฅ์ ๋ํ๋ ๋๋ค. ๋ค๋ฅธ ๋์์ธ์ด ๊ฐ๋ฅํ๋๋ผ๋ ๋ง์ ์ฌ๋๋ค์ด ์ด ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค๋ ๊ณตํต ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ํํํ์ต๋๋ค.
์ ๋ Proxy๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ๋์ฐ๋ณ์ด๋ฅผ ๊ด์ฐฐํ๋ ๋ฐฉ๋ฒ๊ณผ ์ด๊ฒ์ด ๊ฐ์ธ ํ๋์ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํ๋ ์์ํฌ ๊ฐ์ ํ ๋ก ์ ๊ตฌ์ฑํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ๋ํ์ ์ฐธ์ฌํ๊ณ ์ถ๋ค๋ฉด ์๋ ค์ฃผ์ญ์์ค.
@RyanCavanaugh
FWIW ์ ๋ tc39/proposal-class-fields#100 ์ ํ ๋ก ์ ํน์ ํญ๋ชฉ์ ๋ํ๋ด๋ ๊ฒ์ผ๋ก ํด์ํ์ง ์์ต๋๋ค.
#
๋ ์ฒ์์๋ ๋ฏ์ค์ง๋ง ์ ํธ๋๋ ๊ตฌ๋ฌธ ํ์์ ์ ์๋์ง ์์์ผ๋ฉฐ ์ฌ๋๋ค์ด ์ํ๋ ์ ์ผํ ๊ตฌ๋ฌธ์ ๋ถ๋ช ํ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ผ์ข ์ ์ ๋์ฌ sigil์ด ์์ด์ผ ํ๋ฉฐthis.someProp
๋ฅผ ๋น๊ณต๊ฐ๋ก ํ์ฉํ๋ ค๋ ๋ชจ๋ ์๋๋ ์คํจํ ์ด๋ช ์ ๋๋ค.
๋ฆ์์ง๋ง ์ค์ ๋ก this->var
๊ตฌ๋ฌธ ์ ์์ด ์์ต๋๋ค .
๋ฌผ๋ก ์ด ์ ์์ ์ฃฝ์์ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค("์์ํ๊ฐ ์ด๊ดํ์ง ์์๋ค"๋ ๊ฒ์ด ๋ด๊ฐ ์ฐพ์ ์ ์์๋ ์ ์ผํ ์ด์ ์ ๋๋ค). ๊ทธ๋ฌ๋ ๋์ฒด ๊ตฌ๋ฌธ์ด ์ค์ ๋ก ์ ์๋์์ผ๋ฉฐ ๋ชจ๋ ์ดํด ๋น์ฌ์๊ฐ ์ด์ ๋ํด ์ ์๊ณ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ฐํ์์ ์ ์ฉ๋๋ ์ผ์ข
์ _soft_ private๋ก private
๋ณํํ๋ ์ปดํ์ผ๋ฌ ์ต์
์ด ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ์ง์ ํ hard private์ ํ์๋ก ํ๋ ์ ์ค ์ผ์ด์ค๊ฐ ํนํ ์ผ๋ฐ์ ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋์ #
๊ตฌ๋ฌธ์ ์ซ์ดํ๋๋ผ๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ private
๋ฅผ ๊ณ ์ํ๋ ๊ฒฝํฅ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ปดํ์ผ ์๊ฐ ์ ์ฉ์ _๋๋ฌด_ soft IMO์
๋๋ค. ๋ํ ์ด๋ฌํ ์ต์
์ ๊ฐ๋ฅํ private ๋ณํ์ ์๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌํํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ค์์ ๋ชจ๋ ๊ฐ์ง ์ ์์ต๋๋ค.
class Demo {
private a
#b
<strong i="9">@reflect</strong>
#c
}
๊ทธ๋์ ์ ๋ ์๋ก์ด ์ต์
์ด ํ์ฑํ๋๋ฉด private a
๊ฐ <strong i="13">@reflect</strong> #a
๋ณํ๋ ๊ฒ์ด๋ผ๊ณ ์ ์ํฉ๋๋ค. ์ฌ๊ธฐ์ @reflect
๋ ์ปค๋ฎค๋ํฐ ์ง์ API๋ฅผ ํตํด ์์ฑ์ ๋ฐ์ํ ์ ์๋ ๋ฐ์ฝ๋ ์ดํฐ์
๋๋ค. ํ์ค ๋ฐ์ฝ๋ ์ดํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ด์ผ๊ธฐ ๊ฐ ์์์ต๋๋ค. ๊ทธ๋์ @reflect
๋ฐ์ฝ๋ ์ดํฐ(๋๋ ์ฐ๋ฆฌ๊ฐ ๋ถ๋ฅด๊ณ ์ถ์ ๊ฒ์ ๋ฌด์์ด๋ )๋ ๋ฏธ๋์ ํ์คํ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ฉด์์ ์ข์ ํ๋ณด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ด ์ ์์ ์ฃผ์ ๋จ์ ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ธ์ ๊ฐ JS์ ์ต์ ํ๋ฅผ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํ๋๋ ํ์ค ๋ฐ์ฝ๋ ์ดํฐ๊ฐ ์์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋ ์ ์์ง๋ง ๊ฐ๊น์ด ๋ฏธ๋์ ๋ํ ํ์ค์ <strong i="19">@reflect</strong> #x
๊ฐ #x
๋ณด๋ค ๋๋ฆด ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ด๊ฒ์ ์ต์
์ผ๋ก ์ ์ํ ๋ฟ์ด๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด์ผ ํฉ๋๋ค(์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํด).
@MichaelTheriot
๋ฆ์์ง๋ง ์ค์ ๋ก this->var ๊ตฌ๋ฌธ์ ์ ์ํ๋ ์ ์์ด ์์ต๋๋ค.
๋ฌผ๋ก , ์ด ์ ์์ ์ฃฝ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค("์์ํ๊ฐ ์ด๊ดํ์ง ์์์ต๋๋ค"๊ฐ ๋ด๊ฐ ์ฐพ์ ์ ์์๋ ์ ์ผํ ์ด์ ์).
์์ํ๋ ์๋ฅผ ๋ค์ด https://github.com/tc39/proposal-class-fields/issues/100#issuecomment -429460917๊ณผ ๊ฐ์ด ํด๋์ค 1.1 ์ ์ ๋์ ํ์ฌ ์ ์์ ์ง์งํ๋ ์ถฉ๋ถํ ์ด์ ๋ฅผ ์ ์ํ์ต๋๋ค.
@mbrowne
๋์ณค์ ์๋ ์์ต๋๋ค. ํด๋์ค 1.1์ ์ด์ ํ์ด์ง๋ ๋ฐ๋ ๋์ ๋นํ์ฑํ๋์๊ณ ๋งํฌ ๋ ์์ ์กฐ์ฐจ๋ ๋ด ์๊ฒฌ๋ณด๋ค ํ ๋ฌ ํ์ ์์ฑ๋์์ต๋๋ค.
์ฐธ๊ณ ๋ก, ๋ช ๋ฌ ์ ์ ๋งํฌํ ์ค๋ ๋์์ ์ด๊ฒ์ ์ธ๊ธํ์ต๋๋ค . ์ฌ๊ธฐ์ ๋ด ์๊ฒฌ์ ๋์ฒด ๊ตฌ๋ฌธ์ด ์ ์๋์ง ์์๋ค๋ ์คํด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๊ด๋ จ๋ ๋ชจ๋ ๋น์ฌ์๋ ๊ทธ๋ ์ง ์๋ค๋ ์ฌ์ค์ ์์์ผ ํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํธ์ง : ๋ด ์๊ฒฌ์ TypeScript๊ฐ ๋ค๋ฅธ ๊ฒ์ ์ ์ํ์ง ์์ต๋๋ค. ์ ์์์ ์ฐธ์กฐ๋ ๋ฌธ์ ์ ๋ํ ์๋ชป๋ ์ ๋ณด๋ฅผ ์์ ํ๋ ๊ฒ์ด ์ ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@MichaelTheriot ๋์ ์ ์์ ์๋ ค์ผ ํ๋ ๋น์ฌ์๋ ์ด ๋ํ์ ๊ด๋ จ๋ ๋น์ฌ์๊ฐ ์๋๋๋ค. TypeScript๋ ๋น์ค์ ์ํด ์งํ ์ค์ธ ์ ์์ ๋ฐ๋ฅผ ๊ฒ์ ๋๋ค. ๋์ฒด ๊ตฌ๋ฌธ์ด ์ ์๋์์ง๋ง ์ฑํ๋์ง ์์๋ค๋ ์ฌ์ค์ ๋ด ์๊ฐ์ ์ด ๋ํ์ ์ค์ ๋ก ์ ์ฉํ์ง ์์ต๋๋ค.
์ฌ๋ฌ๋ถ, ๋์์ด ๋ ์ ์๋๋ก ๋ฐํ์ ๋ณดํธ/๋น๊ณต๊ฐ ๋ฉค๋ฒ์ ๊ตฌํ์ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค.
lowclass
์ฐธ์กฐํ์ญ์์ค.
๋ฐํ์ public/protected/private ๋ฉค๋ฒ์ ๋ชจ๋ ์ข ๋ฅ์ ์ฌ์ฉ์ ๋ณด์ฌ์ฃผ๋ ๊ด๋ฒ์ํ ํ ์คํธ ํ์ผ์ ํ์ธํ์ญ์์ค. ๊ตฌํ์ ๊ธธ์ง ์์ผ๋ฉฐ ์ต์ํ์ ๋ณดํธ/๊ฐ์ธ ๊ธฐ๋ฅ๋ง ๊ฐ๊ธฐ ์ํด ์ผ๋ถ ๊ธฐ๋ฅ์ ์๋ตํ ์ ์์ต๋๋ค.
๋ ธํธ:
super
๋๋ ES5์ฉ Super
๋์ฐ๋ฏธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํฉ๋๋ค(ํ
์คํธ ์ฐธ์กฐ).constructor
๋ฐฉ๋ฒ์ ์ง์ํฉ๋๋ค(ํ
์คํธ ์ฐธ์กฐ).class
es๋ฅผ ํ์ฅํ๋ ๊ธฐ๋ฅ(ํ
์คํธ ์ฐธ์กฐ).class
es๋ฅผ ๋ํํ์ฌ ๋ณดํธ ๋ฐ ๋น๊ณต๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค(ํ
์คํธ ์ฐธ์กฐ).class
๋์ ES5 ์คํ์ผ function
ํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค(ํ
์คํธ ์ฐธ์กฐ).ํ ์คํธ๋ฅผ ์คํํ๋ ค๋ฉด:
npm install
npm test
๋ํ Babel ๊ตฌํ์ ๋ํ ์์ธํ ๋ด์ฉ๊ณผ ๋ฌธ์ ๋ https://github.com/babel/proposals/issues/12 ๋ฐ https://github.com/babel/babel/issues/8421 ์ ์ฐธ์กฐ ํ์ธ์ .
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ,
์์ง ์๋ฃ๋์ง ์์ ๊ฐ์ธ ํด๋์ค ํ๋ ์ฌ์์ ๊ตฌํํ์ง ๋ง์ญ์์ค. ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด ์ค๋ ๋๋ฅผ ์ฝ์ผ์ญ์์ค.
์ด ๊ธ์ ์ฝ๋ ๋ชจ๋ ์ฌ๋์ด ๋ค๋ฅธ ๊ตฌ๋ฌธ ์์ด๋์ด๋ฅผ ์ดํด๋ณด๊ณ (๋ ๋ง์ ์ ๋ณด๊ฐ ์์ต๋๋ค) ์๊ฒฌ์ ๋งํ๋๋ก ๊ถ์ฅํฉ๋๋ค.
fe ์ฌ๊ธฐ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์์ต๋๋ค (ํ์ฌ #
IMHO๋ณด๋ค ๋ ๋์ ๊ตฌ๋ฌธ ์์ด๋์ด๊ฐ ์์).
์ด๋ฏธ public/private/protected๋ฅผ ๋๋ฆฌ ์ฌ์ฉํ๊ณ ์๋ JavaScript ์ปค๋ฎค๋ํฐ๊ฐ ์๋ค๋ฉด TypeScript ์ปค๋ฎค๋ํฐ๋ JS private/protected์ ๋ฏธ๋๋ฅผ ํ์ฑํ๋ ๋ฐ ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์ private ํด๋์ค ํ๋๋ V8 v7.2์ Chrome 72์์ ์ ๊ณต๋๊ณ ์์ต๋๋ค. private ํ๋ ์ ์์ ๊ตฌํํ ๊ณํ์ด ์์ต๋๊น?
@ChrisBrownie55 ๊ณต๊ฐ ํ๋๊ฐ ๋ฐฐ์ก๋ฉ๋๋ค. ๊ฐ์ธ์ ์๋๋๋ค.
@jhpratt ๋ด ์๋ชป์ด์ง๋ง Chrome ํ์ด ๊ฐ๊น์ด ์์ผ ๋ด์ ๋น๊ณต๊ฐ๋ก ๋ฐฐ์กํ ๊ณํ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ฐธ๊ณ : https://v8.dev/blog/v8-release-72#public -class-fields
V8 7.2๋ถํฐ ๊ณต๊ฐ ํด๋์ค ํ๋๋ฅผ ์ ๊ณตํ๊ณ ์๋ค๊ณ ๋ฌธ์ํํ์ง๋ง ๊ฐ์ธ ํ๋(๊ฐ์กฐ ๊ด์ฐ)์ ๋ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํฉ๋๋ค.
๊ฐ์ธ ํด๋์ค ํ๋์ ๋ํ ์ง์ ์ ํฅํ V8 ๋ฆด๋ฆฌ์ค์์ ๊ณํ๋ฉ๋๋ค .
@isiahmeadows ์ค์ ๋ก Google ๊ฐ๋ฐ์ ๋ธ๋ก๊ทธ์ ๋ค๋ฅธ ๊ฒ์๋ฌผ์ ์ฐธ์กฐํ์ต๋๋ค.
๊ฒฐ๋ก
๊ณต๊ฐ ํด๋์ค ํ๋๋ V8 v7.2 ๋ฐ Chrome 72์์ ์ ๊ณต๋ฉ๋๋ค. ๋น๊ณต๊ฐ ํด๋์ค ํ๋๋ ๊ณง ์ ๊ณตํ ์์ ์ ๋๋ค.
์ด ๊ธฐ์ฌ๋ @mathiasbynens ์ Andreas Haas๊ฐ ์์ฑํ์ผ๋ฉฐ ํ์ํ ๊ฒฝ์ฐ ์ค๋ช ์ ์์ฒญํ ์ ์์ต๋๋ค(๊ฐ ๊ฒ์๋ฌผ์ด ๊ฝค ๋ช ํํ๋ค๊ณ ์๊ฐํ์ง๋ง). cc @gsathya ์ @joyeecheung ์ V8 ๊ตฌํ์ ๋ง๋ฌด๋ฆฌ ์์ ์ ํ๊ณ ์์ต๋๋ค.
์ด์จ๋ , 2019๋ 1์ TC39 ํ์๋ ์ ์์ ๋ํ ํฉ์๋ฅผ ๋ค์ ํ ๋ฒ ์ฌํ์ธํ๋ฉด์ ๋ฏผ๊ฐ ๋ถ์ผ ๋ฐ ๋ฐฉ๋ฒ ์ ์์ ๋ํ ๋์์ ์ฌ๊ณ ํ๋ 1๋ ๋ฐ์ ๋ง๊ฐํ์ต๋๋ค. ํ์ฌ ๋ฒ์ ์ด ์์ ์ ์ด๊ณ TypeScript๋ฅผ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์๋ค๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
Chrome์์ ๋น๊ณต๊ฐ ํด๋์ค ํ๋๋ฅผ ์ถ์ํ์ต๋๋ค ๐
ํ์ฌ _canary_ ๋น๋๋ก ์ถ์๋ Chrome 74์๋ง ์์ต๋๋ค.
๋ฐฉ๊ธ Chrome 74์์ ๊ฐ์ธ ํด๋์ค ํ๋๋ฅผ ์ ๊ณตํ์ต๋๋ค! ์ง๊ธ Chrome ์นด๋๋ฆฌ์์์ ์ฌ์ฉํด ๋ณด์ธ์!
โ Twtiter๋ฅผ ํตํ Sathya Gunasekaran
๊ฐ์ธ ํด๋์ค ํ๋์ ๋ํ ํน์ ๊ตฌํ(๋๋ ๊ตฌํ)์ ์ ํํ๋ ๋ฐ ์์ด ์ฐ๋ฆฌ๊ฐ ์ด๋์ ์๋์ง ์๋ ์ฌ๋์ด ์์ต๋๊น? @trusktr ์ด ๋ณด์์ง๋ง "_Private Inheritance_"๊ฐ ์ฌ์์ ์ผ๋ถ์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ทธ๊ฒ์ ๊ฒฐ์ ์ ์ผ๋ก ์๋๋๋ค. private ํ๋๋ ํ๋กํ ํ์ ์ฒด์ธ์ ๊ฑท์ง ์์ต๋๋ค(๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋ณผ ์ ์์ผ๋ฏ๋ก private๊ฐ ์๋๋ฏ๋ก).
๊ฐ์ธ ํ๋๊ฐ WeakMaps(ํ๋๋น ํ๋์ WeakMap, Babel์ด ์ํํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์)๋ก ๋ณํ๋๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ํ #
๊ตฌ๋ฌธ์ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋
์ ์ ์ผ๋ก ๋์์ผ๋ก ํ๋ ์ฌ์ฉ์๋ฅผ ์ํด ์ต์ข
์ถ๋ ฅ์
์ฑ๋ฅ์์ ์ด์ ๋ก ๊ฐ๋ฐ์๊ฐ ํฅํ ํธํ์ฑ์ ์ํด #
๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ง๋ง(๋ ๋ง์ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ๋ ๊ฒฝ์ฐ) ์ค์ ๋ก __ts#
์ ๊ฐ์ ํน์ ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต์ฉ ์์ฑ์ผ๋ก ๋ณํํ ์ ์๋ ์ต์
์ ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์์ต๋๋ค #
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ปดํ์ผ ํ์๊ณผ ๋ฐํ์ ํ๋ผ์ด๋น ๋ชจ๋๋ฅผ ์์ํ๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ๊บผ์ ธ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐํ์ ์ฑ๋ฅ์ ์ต๋ํํ๊ณ ๊ทธ ๋์ ์ปดํ์ผ ์๊ฐ ์ ์ฉ์ผ๋ก ๋ง์กฑํ๋ ์ฌ๋๋ค์๊ฒ๋ ์ ์ฌ์ ์ผ๋ก ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํค์ง ์๊ณ ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์์ํ๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค.
๊ตฌํ ์งํ ์ํฉ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ํ ์คํธํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ธฐ ์ํด ๊ตฌ์ถํ ์ ์๋ PR์ด ์๋๊น์?
@jhpratt ํ์คํ! ์ด PR ์ ๋ถ๊ธฐ๋ฅผ ํ์ธํ๋ฉด ํ๋ผ์ด๋น ์ด๋ฆ์ ์ธ์คํด์ค ํ๋๋ฅผ ํ ์คํธํ ์ ์์ต๋๋ค. ๋ฉ์๋ ๋ฐ ์ ๊ทผ์๊ฐ ์งํ ์ค์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ด ์์ ์ ์ ์คํธ๋ฆผํ๊ธฐ๋ฅผ ํฌ๋งํฉ๋๋ค. ์ด ์ฌ์ ์๊ตฌ ์ฌํญ PR์ด ๋ณํฉ๋๋ ์ฆ์ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ(Microsoft/TypeScript)์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ PRํ ์ ์์ต๋๋ค: https://github.com/Microsoft/TypeScript/pull/30467.
ํผ๋๋ฐฑ์ ๊ฐ์ฅ ํ์ํฉ๋๋ค.
"๊ฐ์ธ ์์"์ด ์ฌ์์ ์ผ๋ถ์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
Sidenote, 100% ์ง์ ํ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ์ ๊ธ์์ ํด๋น ๊ธฐ๋ฅ์ ์ญ์ ํ ๊ณํ์ ๋๋ค. ๋๋ ์ค์ ๋ก ๊ทธ๊ฒ์ ํ์๋กํ์ง ์์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ ๋ง์ ์คํ์ด์์ต๋๋ค.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , "๊ฐ์ธ ์์"์ ๋ํ ์ด๋ก ์ด ์ ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ฌ๊ธฐ์ ๊ฒ์ํ๊ณ ์ถ์ต๋๋ค.
๊ด์ฌ์ด ์๋ ๊ฒฝ์ฐ:
"๋น๊ณต๊ฐ ์์"(ํ์ฌ ๋ฒ์ ์ ๋ก์ฐํด๋์ค์์ ๋ณผ ์ ์์)์ ํ์ ํด๋์ค๊ฐ ์ํผํด๋์ค์์ ์์๋ ๋น๊ณต๊ฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ํด๋น ๋ฉ์๋๊ฐ ํด๋น ํ์ ํด๋์ค์ ๋ฒ์ ๋ด์์ ์ธ์คํด์ค์ ๋น๊ณต๊ฐ ์์ฑ ์๋ง ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ์ ํด๋์ค์๋ ์์ฒด ์ ์์์ ์ ์ฉ ๋ฉ์๋๋ก ์ ์๋ ๋ฉ์๋๊ฐ ์์ง๋ง ํ์ ํด๋์ค๋ ์์ ๋๋ ํ์ ํด๋์ค ๋ฒ์์์ ์ธ์คํด์ค์ ์ ์ฉ ์์ฑ์ ์์ ํ ์ ์์ต๋๋ค.
์ด์ ๋นํด "๋ณดํธ๋ ์์"์์ ํ์ ํด๋์ค๋ ์์ฒด ์ธ์คํด์ค ๋๋ ์์ ํด๋์ค ์ธ์คํด์ค์ ์์ฑ์ _can_ ์์ ํ ์ ์์ง๋ง ์ฌ์ ํ ํ์ ํด๋์ค์ ์์ฑ์ ์์ ํ ์๋ ์์ต๋๋ค. ๋ณดํธ๋ ์์์์ ํ์ ํด๋์ค๋ ๋ชจ๋ ์์ ํด๋์ค๊ฐ ๋ณผ ์ ์๋ ์์ฑ์ ์์ ํฉ๋๋ค(์ํผ ํด๋์ค๋ ๋ชจ๋ ๋์ผํ ์์ฑ์ ๋ํด ์ฝ๊ธฐ/์ฐ๊ธฐ).
๋ค์ ๋งํด์ "๋น๊ณต๊ฐ ์์" ๊ฐ๋ ์์ ๊ฐ ํด๋์ค์๋ ๋น๊ณต๊ฐ ๋ฒ์๊ฐ ์๊ณ ์์๋ ๋ชจ๋ ๋น๊ณต๊ฐ ๋ฉ์๋๋ ๋ก์ปฌ ํด๋์ค ๋ฒ์์์๋ง ์๋ํฉ๋๋ค. ๋ฐ๋ฉด ๋ณดํธ๋ ๋ฉ์๋๋ ์ ์ฒด ํด๋์ค ๊ณ์ธต์ ๋ํ ๋จ์ผ ๋ฒ์์์ ์๋ํฉ๋๋ค.
์ด๊ฒ์ด ์๋ฏธ๊ฐ ์๋์ง ํ์คํ์ง ์์ผ๋ฏ๋ก ํ์ฌ ecma proposal-class-fields private field ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์์ฑํ ๊ฒฝ์ฐ "๋น๊ณต๊ฐ ์์"์ด ๋ฌด์๊ณผ ์ ์ฌํ์ง ์ค๋ช ํ๋ ๊ฐ๋จํ ์ฝ๋ ์์ ๊ฐ ์์ต๋๋ค.
์์ ์ฝ๋๊ฐ ๋ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
Proposal-class-fields์๋ "๊ฐ์ธ ์์"์ด ์์ผ๋ฏ๋ก ๋ค์์ ์๋ํ์ง ์์ต๋๋ค(์ง์ ํ ๊ฐ์ธ ์ ๋ณด๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ด๊ฒ์ด ๋ฐ๋์งํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค).
class Foo {
test() {
this.#privateMethod()
}
#foo = 'foo'
#privateMethod() {
console.log(this.#foo)
}
}
class Bar extends Foo {
test() {
// This does not work, no private inheritance:
this.#privateMethod()
}
// #foo is private only inside Bar code, it is NOT the same #foo as in Foo
// scope.
#foo = 'bar'
}
๋ฎ์ ํด๋์ค์์ "๋น๊ณต๊ฐ ์์"์ ํธ์ง๊ธฐ์์ ์ผ๋ถ ๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ๊ฒ์ ์๋ฎฌ๋ ์ดํธํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋น DRY ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
class Foo {
test() {
this.#privateMethod()
}
#foo = 'foo'
#privateMethod() {
console.log(this.#foo)
}
}
class Bar extends Foo {
test() {
// This does not work, no private inheritance:
this.#privateMethod()
}
// #foo is private only inside Bar code, it is NOT the same #foo as in Foo
// scope.
#foo = 'bar'
// copy the method over by hand (because there's no private inheritance):
#privateMethod() {
console.log(this.#foo)
}
}
๋ ์์์ #foo
๋ณ์๋ ๊ฐ ํด๋์ค์ ๋ํ ํน์ ๋ณ์์
๋๋ค. #foo
๋ณ์๋ ํ๋๊ฐ ์๋๋ผ ๋ ๊ฐ์
๋๋ค. ๊ฐ๊ฐ์ ๋์ผํ ํด๋์ค ์ ์์ ์ฝ๋๋ก๋ง ์ฝ๊ณ ์ธ ์ ์์ต๋๋ค.
์๊ธฐ ๋ฐฉ๋ฒ์ ์๊ธฐ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋๋ ๋ฒ์์์ ๋์ _but_ lowclass์์ ๊ฐ์ธ ์์, ์ฌ์ฌ์ฉ ์ ์ฉ ์ํผ ๋ฐฉ๋ฒ์์๊ฒ ํด์ค๋ค. ๋ฐ๋ผ์ ์์ ์์ ๊ฐ์ด ์ํผํด๋์ค ๋ฉ์๋๋ฅผ ์๋ธํด๋์ค์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ์ ํ ๊ฐ ํด๋์ค์ ๋ํด ๋ ๊ฐ์ ๋ณ๋ #foo
๋ณ์๊ฐ ์์ต๋๋ค.
๋ก์ฐํด๋์ค์์ ์ํผํด๋์ค์์ #someMethod
๋ฅผ ์ฌ์ฉํ๋ฉด ์ํผํด๋์ค์ #foo
์์ ๋์ํ๋ค. ๊ฒฝ์ฐ #someMethod
์๋ธ ํด๋์ค์ ๋ฒ์์ ์ฌ์ฉ๋๋, ๊ทธ๊ฒ์์์ ์๋ #foo
๊ฐ ์๋ ์๋ธ ํด๋์ค์ #foo
์ํผ ํด๋์ค์!
๊ทธ๊ฒ์ด ๊ฐ๋ ์ ์ค๋ช ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ์ฌ์ฉ๋์ง ์๋๋ผ๋ ์ด๋ค ์ข ๋ฅ์ ์์ด๋์ด๋ฅผ ์ด๋ฐ์ํค๋ ๋ฐ ํฅ๋ฏธ๋กญ๊ฑฐ๋ ์ ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด์ Chrome ์์ ์ ์ธ ์ฑ๋์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ๋ ๋๋ถ๋ถ VSCode ๋๋ฌธ์ ์ด ๋ฌธ์ ์ ๊ด์ฌ์ด ์์ต๋๋ค. ๋ฐ๋๋ผ .js
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ๋ VSCode๋ ์ด๋ฅผ ์ค๋ฅ๋ก ํ์ํฉ๋๋ค. VSCode์์ Vanilla JS์ private ํด๋์ค ํ๋์ ๋ํ ์ง์์ Typescript์ ์ถ๊ฐํ ์ง ์ฌ๋ถ์ ๋ํ ํ ๋ก ๊ณผ ๋ณ๋๋ก ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
๊ฐ์ธ์ ์ผ๋ก, ๋๋ TS๊ฐ 4๋จ๊ณ์ ๋๋ฌํ๊ธฐ ์ ์ ์ง์์ ์ถ๊ฐํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. TS๋ ์ด๋ฏธ ํ์ฌ ์ถฉ๋ถํ ์ ์๋ํ๋ ๋น๊ณต๊ฐ ์ปดํ์ผ ์๊ฐ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. 4๋จ๊ณ์ ๋๋ฌํ ํ์๋ ๊ทธ๊ฒ์ด ์๋ฏธ๊ฐ ์๋ค๋ ๋ฐ ๋์ํ ๊ฒ์ ๋๋ค. (ํ ๋ก ์์ ๋๋๋ก ์ ๋์ ์ธ ์ํฉ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ ์ฌ์ ํ ๊ทธ๊ฒ์ด ํฉ๊ธ ์๊ฐ๋์ ์ค๋น๋์๋ค๊ณ ์๊ฐํ์ง ์์ ๊ฒ์ ๋๋ค.)
์
๋ฐ์ดํธ: Node 12 ์์ ๋ฒ์ ์์๋ ์ง์๋ฉ๋๋ค. ๋ํ Babel์๋ ์ด ๊ตฌ๋ฌธ์ ๋ณํํ๋ ํ๋ฌ๊ทธ์ธ์ด ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ข
์ข
4๋จ๊ณ ์ ์์ด ๋๊ธฐ ์ ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค. Vanilla JS(non-ts)์์ ์ด ๊ตฌ๋ฌธ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋๊ฑฐ๋ jsconfig.json
ํตํด ํ์ฑํํ์ฌ VSCode๋ฅผ ์ฌ์ฉํ ๋ ์ค๋ฅ๊ฐ ํ์๋์ง ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค. VSCode ๋ฆฌํฌ์งํ ๋ฆฌ๋ JS ์ง์์ด TypeScript์์ ์ง์๋๋ฉฐ ์ด ๋ฌธ์ ๋ฅผ ์ธ๊ธํ๋ค๊ณ ๋งํฉ๋๋ค.
TypeScript๊ฐ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์ Node.js์ ํ๋ก๋์ ํ๊ฒฝ์ ์ด๋ฏธ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด ๊ธฐ๋ฅ์ ์ ํ ์ง์ํ์ง ์๋ ๊ฒ์ ์๋ฏธ๊ฐ ์๋ค๊ณ ๋งํด์ผ ํ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ TypeScript๊ฐ ์ง๊ธ ๋ชจ๋ ๊ฒ์ ์์ ํ ๊ตณํ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ผ๋ก ์ถ์ํด์ผ ํ๋ค๋ ๋ง์ ์๋๋๋ค.
TypeScript๋ ์ด ๊ธฐ๋ฅ์ด ์คํ์ ์ด๋ฉฐ 3๋จ๊ณ์ 4๋จ๊ณ ์ฌ์ด์ ๋ณ๊ฒฝ๋ ์ ์์์ ๋ํ๋ด๋ ํ๋๊ทธ ์๋ ๊ฐ์ธ ํ๋๋ฅผ ๋์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์๋ฏธ ์์ด ๊ตฌ๋ฌธ ์ง์์ ๋จผ์ ๊ตฌํํ ์ ์์๊น์?
์๋ฏธ ์์ด ๊ตฌ๋ฌธ ์ง์์ ๋จผ์ ๊ตฌํํ ์ ์์๊น์?
์ ํ ๊ฒ์ฌ/์ธํ
๋ฆฌ์ผ์ค์ ๊ฒฝ์ฐ ์ผ์ข
์ ์๋ฏธ ์ฒด๊ณ๊ฐ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง BigInt
์ ๊ฐ์ ํ์ ๋ณํ ์ง์์ ํ ์ ์์ต๋๋ค( esnext
์ ํจ๊ป๋ง ์ฌ์ฉํ ์ ์์).
fwiw, ๊ตฌํ ํผ๋๋ฐฑ์ผ๋ก ์ธํด 3๋จ๊ณ์์๋ง ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํฌ๋กฌ์ด ๋ฐฐ์ก ์ค์ด๋ผ๋ ์ ์ ๊ฐ์ํ ๋ ์ด๋ค ๋ณํ๋ ๊ฑฐ์ ์์ ๊ฒ์ ๋๋ค.
@ChrisBrownie55 ์ด ๊ธฐ๋ฅ์ด ์์ง ๊ตฌํ๋์ง ์์๋ค๋ ๊ฒ์ ๋ง์ด ๋์ง ์์ต๋๋ค.
์งํ ์ค์ธ ๊ฒ ๊ฐ์ต๋๋ค.
https://github.com/microsoft/TypeScript/pull/30829
(๋ถ๋ช
ํ https://github.com/microsoft/TypeScript/pull/30467์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค)
๋ง์ต๋๋ค. #30829๋ ๋ฆฌ๋ฒ ์ด์ค ํ ๋ณํฉํ ์ค๋น๊ฐ ๋์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ํ๊ณ ์ถ์ ์ผ๋ถ ๊ธฐ๋ฅ ๊ฒ์ดํ ์ ๋ชจ๋ํํ์ฌ private-named ๋ฉ์๋์์ ํญํ์ํต๋๋ค.
์ฌ๋ฌ๋ถ, ์ฃผ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ณ ํด์(๋๋์ ํ์ธํ๊ณ ์ฌ์ฉํ๋ ๋ฑ) ๋ชจ๋ ์ฌ๋์ด ๊ทธ๋์ผ ํ๋ ๊ฒ์ ์๋๋๋ค.
ํ ๋ก ์์ ๊ฐ๋ ์ ๋์ ์ธ ์ํฉ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ํฉ๊ธ ์๊ฐ๋์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
@isiahmeadows๊ฐ ์ธ๊ธํ๋ฏ์ด ํด๋์ค ํ๋ ์ ์์ ๋ ผ๋์ด
๋ด๊ฐ ์ธ์ด ๊ตฌํ์๋ผ๋ฉด ์ด์ ๋ํด ๊ฑฑ์ ํ ๊ฒ์ด๋ฉฐ ์์ฒ ๋ช ์ (์์ง ๋ชปํ๋) ๊ฐ๋ฐ์๊ฐ ๋ฌธ์ ๊ฐ ์๋ ํ๋ก๋์ ์ฝ๋์ ๊ธฐ๋ฅ.
Private ํ๋๋ ์๋ง๋ ES6 ์ดํ ๋์ ๋ ๋ชจ๋ ๊ธฐ๋ฅ ์ค ๊ฐ์ฅ ๋ ผ๋์ ์ฌ์ง๊ฐ ์์ ๊ฒ์ ๋๋ค. ์ธ์ด๋ฅผ ๊ตฌํํ๋ ์ฌ๋์ด ํด๋น ๊ธฐ๋ฅ์ ํ์ ํ๋ ๋ฐ ๋์์ ์ฃผ๊ธฐ ์ ์ ์ซ์ดํจ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ํ๋ช ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@trusktr ๋ ผ๋์ ์ฌ์ง๊ฐ ์๋ ๊ธฐ๋ฅ์ผ ์๋ ์์ง๋ง ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ ๋๊ตฌ๊ฐ ์๋๋ผ ๊ฐ๋ฐ์์๊ฒ
๋ ธ๋์์๋ ๋ฐฐ์ก๋์์ต๋๋ค.
Node์ JS ์์ง์ ์ ์ง ๊ด๋ฆฌํ๋ Chrome ๋ฆด๋ฆฌ์ค์ ๋ถ์์ฉ์ผ ๋ฟ์ ๋๋ค.
๋ ผ๋์ ์ฌ์ง๊ฐ ์๋ ๊ธฐ๋ฅ์ผ ์ ์์ง๋ง ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ ๋๊ตฌ๊ฐ ์๋ ๊ฐ๋ฐ์์๊ฒ ๋งก๊ฒจ์ผ ํฉ๋๋ค.
๊ทธ๊ฒ์ ๋น์ ๊ณผ ๊ฐ์ ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ์ผ ์ ์์ต๋๋ค(์ด์ฉ๋ฉด ๋น์ ์ ๋จ์ง ์ ํ์ ์ถ์ํด์ผ ํ๊ณ ๋น์ ์ด ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ ๋๊ตฌ๋ก ์์ ํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ฌ์ค ์ด๊ฒ์ ๋น์ ์ด ์ด์ ๊ด๋ จํ์ฌ ํด์ผ ํ๋ ์ผ์ด๋ฉฐ ๋ง์ ๊ณ ์ฉ๋ ๊ฐ๋ฐ์๊ฐ ํ๋ ์ผ์ ๋๋ค).
๋ํ ํด๋์ค ํ๋์ ๊ด๋ จ๋ ๋ฐ ์ด์ ๋ํด ์์ง ๋ชปํ๊ณ ์ ๊ณต๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ๋ ๋ง์ ๊ฐ๋ฐ์๊ฐ ์์ต๋๋ค.
๋ํ ์ธ์ด ์์ฒด์ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฝ๋์ ๋ฏธ๋์ ๊ด์ฌ์ ๊ฐ๊ณ ํน์ ์ค์๋ฅผ ์ทจ์ํ๊ธฐ์๋ ๋๋ฌด ๋ฆ๊ธฐ ์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐ์ ํ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๊ฐ๋ฐ์๋ ์์ต๋๋ค.
์ข์ ์ ์ ์ ๊ฐ์ธ ํ๋๊ฐ #
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ private
ํค์๋๋ฅผ ๋์์ผ๋ก ์ฌ์ฉํ์ฌ ์์ ํ ์ฌ์ง๊ฐ ์ฌ์ ํ ์๋ค๋ ๊ฒ์
๋๋ค.
TS๋ ์ ๋ง ํ์ค์ 100% ๋ฐ๋ผ์ผ ํฉ๋๊น? ์ฐ๋ฆฌ๋ ์์ํ๊ฐ thisGlobal
๋๋ #privateLol
์ปค๋ฎค๋ํฐ์ ๋ฐ๋ํ๋ค๋ ๊ฒ์ ์ด๋ฏธ ์๊ณ ์์ผ๋ฏ๋ก ๋๋ฌด ๋ฆ๊ธฐ ์ ์ Google์ด JavaScript์ ๋ํด ๋
์ ๊ถ์ด ์๋ค๊ณ ๋งํ ๋์
๋๊น?
@TeoTN ๋น๊ณต๊ฐ ํ๋๋ Google์ด ์๋๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ์ต์ ํ์ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก TC39๋ฅผ ํตํด ์งํ๋์์ต๋๋ค.
๋ช ํ์ฑ์ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ์ฌํญ:
@RyanCavanaugh ์ค๋ช ๊ณผ ๋ชจ๋ ๋ฉ์ง ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์์ ์ ์: ES๋ ์ง์์ ์ผ๋ก ๋ฐ์ ํ๊ณ ์๊ณ ๋ง์ ๊ธฐ๋ฅ์ด ์์ ์ค์ ๋๋ค. ์ด๋ค ๋จ๊ณ์์ - 4๋จ๊ณ?๋ผ๋ ๊ท์น์ ๊ฐ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. 3๋จ๊ณ? ์๋๋ฉด ๊ทธ ์ฌ์ด ์ด๋๊ฐ? - ES ๊ธฐ๋ฅ์ ํฌํจํ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ผ๋ก ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ํด ์ด๋ฌํ ์ข ๋ฅ์ ๋ ผ์๊ฐ ๊ณ์ํด์ ๋ฐ๋ณต๋ ์ ์์ต๋๋ค.
ํ๋ผ์ด๋น ํ๋๋ ์์ ํ ๊ตฌ์์ก๋ค๊ณ ํฉ๋ฆฌ์ ์ผ๋ก ๋งํ ์ ์์ต๋๋ค.
@kkimdev Stage 4๋ ์ฌ๊ธฐ๊น์ง์ ๋๋ค. ํ์ค์ ์ผ๋ถ๊ฐ ๋์๋ค๋ ์๋ฏธ์ ๋๋ค.
์์ ํ ๊ตฌ์์ง์ง ์์ ES ๊ธฐ๋ฅ
์์ ํ ๊ตฌ์ด ES ๊ธฐ๋ฅ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค. ์ด ์์์ "์์ ํ ๊ตฌ์์ก๋ค"๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
์น์ธ๋ ES ๊ธฐ๋ฅ ๊ตฌํ ๋ฐ ๋ฐฐ์ก์ ์ ํ ์ฌํญ์ด ์๋๋๋ค.
์ด๊ฒ์ TypeScript์ ๋ชฉํ๊ฐ ๋ฐ๋๋ผ JS๋ณด๋ค ๋จ์ํ ์ ํ์ด๋ผ๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์์ ํ ํฉ๋ฆฌ์ ์
๋๋ค(๋ฐ๋ผ์ namespace
์ ๊ฐ์ ๊ฒ์ ํ์ฌ ๋ชฉํ์ ๊ด๋ จํ์ฌ ์๋ชป๋ ์ ํ์ด์๊ณ enum
๋ ๋
ผ์์ ์ฌ์ง๊ฐ ์์).
TypeScript๋ ๋ชจ๋ ์ฃผ์ ์์ง์ด ์ง์ ๋ ๊ธฐ๋ฅ์ ๋ง์ฅ์ผ์น๋ก ์ ๊ณตํ ๋๊น์ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ ๊ธฐ๋ค๋ฆฌ์ง ์์์ผ๋ก์จ ์ธ์ด ์ฌ์์ด ํ๋ค๋ฆฌ๋ ์ปค๋ฎค๋ํฐ๋ฅผ ๋๊ฑฐ๋ ๋์ง ์์ ์ ์์ต๋๋ค.
TS ํ ๊ตฌ์ฑ์์ด TC39์ ์๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋์ ๊ทธ๋ค์ ๋๊ตฐ๊ฐ๊ฐ ์ฒ์์ ๊ธฐ๋ฅ์ ์ถ์ํ๊ธฐ ์ ์ ์ด๋ฏธ 3๋จ๊ณ์ธ ๊ธฐ๋ฅ์ ๋ํ ํฉ์์ ์ผ๋ถ์์ต๋๋ค(์ด ๊ธฐ๋ฅ์ด ํฌํจ๋จ).
๋๋ TypeScript์ ๋์์ธ ๊ฒฐ์ ์ด ๊ทธ๋ค์ด ์ ๊ณตํ๋ ๊ฒ์ ๋ํด ๋ณด์์ ์ด๋ผ๋ ๊ฒ์ ์ ๋ง ์ค์ํ๊ฒ ์๊ฐํฉ๋๋ค. ๋ง์ ๊ฒฝ์ฐ ๊ฐ๋ฐ์์๊ฒ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์กฐ๊ธ ๋ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค. ์ ๋ ๊ฐ์ธ ํ๋์ ๊ด๋ จ๋ ์ ์ฑ ๊ฒฐ์ ์ ๋งค์ฐ ๋ง์กฑํ์ผ๋ฉฐ ์ด์ ๋ํด
์ด๋ฌํ ์ธ์ด ๋์์ธ ๊ฒฐ์ ์ ๋ํด ๋ ผ์ํ ์ ์๋ ๊ฐ์ฅ ์ข์ ์ฅ์๋ ์ ์ ์ ์ฅ์, TC39 ํ์ ๋ฐ ์ด ์์ ์ ์ ๋ ํ๋ ๋ค๋ฅธ ์ปจํ ์คํธ์์์ผ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ @trusktr ๊ณผ ํจ๊ป private ํ๋์ ๋ฉ์๋ ์ ์์ ๋ํด ๊ด๋ฒ์ํ๊ฒ
๊ถ๊ทน์ ์ผ๋ก TC39๋ ์ธ์ด ์ค๊ณ๋ฅผ ๊ณ์ํด์ผ ํ๋ ๊ณณ์ด๋ฉฐ TypeScript ์ ์ฅ์๋ ๊ธฐ๋ฅ์ ์ฐ์ ์์ ๋ฐ ๊ตฌํ ์ธ๋ถ ์ฌํญ, ๊ธฐ๋ฅ์ด ์ธ์ ํ์ํ์ง ํ๋จํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ธก๋ฉด์ ๋ ผ์ํ๋ ๊ณณ์ด ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ถฉ๋ถํ ์์ ์ ์ผ๋ก ๋ฐฐ์ก๋ฉ๋๋ค.
TypeScript Intellisense๋ VS Code์์ JavaScript ๊ตฌ๋ฌธ ๊ฐ์กฐ ํ์๋ฅผ ๊ฐํํ๊ณ VS Code ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ฐพ์ ๋ ๊ฐ์ง ๊ตฌ๋ฌธ ๊ฐ์กฐ ๋ฌธ์ (Microsoft/vscode#72867 ๋ฐ Microsoft/vscode#39703)๋ฅผ ์ฌ๊ธฐ๋ก ๋ฆฌ๋๋ ์ ํ๋ฏ๋ก TypeScript๋ก์ ๊ตฌํ์ ๋ํด ์ค๋ช ํฉ๋๋ค. ์ด๊ฒ์ด JavaScript ํ์ผ์ ์ค๋ฅ๊ฐ ์๋ ๊ฒ์ด ๋ฉ์ง ๊ฒ์ด๋ผ๊ณ ๋งํจ์ผ๋ก์จ ๊ธฐ์ฌํ๊ฒ ์ต๋๋ค.
๋ค๋ฅธ ์ธ์ด์ ๋ํ ์ปดํ์ผ๋ฌ๊ฐ ๊ตฌ๋ฌธ์ ์ง์ํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ณผ์ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฒฝํ๊ฒ ์ ํจํ JavaScript๋ VS Code์์ ์๋ชป๋ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค. :-)
TypeScript๊ฐ ์ด์ ๋ํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ ์ ์๊ฐ์ ๋ค์ด๋ ๋ฐ๋ ๋ฌธ์ ๊ฐ ์์ง๋ง(์ฌ์ค ์ ๋ ๊ทธ๊ฒ์ ์ง์ํฉ๋๋ค!), ์ด๊ฒ์ ์ฝ๊ฒ ๊ณ ์น ์ ์๋ ๋ฐฉ์์ผ๋ก JavaScript ๊ตฌ๋ฌธ ๊ฐ์กฐ ํ์์ ์ํฅ์ ๋ฏธ์น๊ฑฐ๋ ๋ก์ปฌ์์๋ ์๋ํ ์ ์์ต๋๋ค. ๋๋ ์๋ค) ๊ตฌ๋ฌธ ํ๊ดํ ๋ฌธ๋ฒ ํ์ผ์ ํจ์นํจ์ผ๋ก์จ ํจ์นํ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์(AFAIK).
์ ๊ฐ TypeScript ํ์ ์์ง๋ ์์ง๋ง, ๊ทธ๋ค์ ์ด๊ฒ์ ๊ตฌํํ๊ธฐ ์ํด ์ ๊ทน์ ์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์์ผ๋ฉฐ ์ด ์์ ์์ ๊ฐ์ธ ํ๋๊ฐ ์ง์๋ ๊ฒ์ด๋ผ๋ ๋ฐ๋ ์์ฌ์ ์ฌ์ง๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. https://github.com/microsoft/TypeScript/pull/30829๋ฅผ ์ฐธ์กฐ
์์ ์ค์์ ํ์ธํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ TS ํ๊ณผ ํ๋ ฅํ๊ณ ์์ผ๋ฉฐ ํ์ฌ ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ณ ์์ต๋๋ค. TS(๋ฐ ํ์ฅ์ ๋ฐ๋ผ Language Server)์ private-named ํ๋์ ๋ํ ๊ธฐ๋๊ฐ ๋์ต๋๋ค.
https://github.com/microsoft/TypeScript/pull/30829 ์์ ์ด๋ฅผ ๊ตฌํํ Bloomberg์ ๊ณต๋ ์์ ์์๊ฒ ํฐ ๊ฐ์ฌ๋ฅผ ๋๋ฆฝ๋๋ค
์๋
ํ์ธ์. ์ด์ ๋ํ ๋ณ๋์ ๋ฌธ์ ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ๊ทธ๋ ๊ฒ ๋ง์ํด ์ฃผ์ญ์์ค. ๋๋ ๊ทผ๊ฑฐ๊ฐ ๋ฐ๊ด์ ์ํด ๋ฌด์์ ํ์ต์ ๊ด์ฌ์ด์์ด ํน๋ณํ #private
PropertyDeclaration
์ ์ฃผ๋ํ๋ ๊ฒ์ด ์ด ๋ฌธ์ .
์๋ฅผ ๋ค์ด ๋ค์ ์ ์ธ์ด ์์ฑ๋ฉ๋๋ค.
// index.d.ts
declare class Foo {
#private;
// ...
}
...์ ๋ ฅ์ด ์ฃผ์ด์ง๋ฉด:
// index.ts
class Foo {
#name: string;
}
๋๋ ๊ทธ๊ฒ์ด ๊ฑฐ๊ธฐ์ ์์ด์ผ ํ๋ ์ด์ ๋ฅผ ๋จผ์ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ง๋ง, ์ ์ธ ์์ฑ์ ์ค์ฌ์ผ๋ก ๋๊ตฌ๋ฅผ ๋ง๋ค๊ณ ์๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์๋ตํ ์๋ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๊ฑฐ๊ธฐ์ ์์ด์ผ ํ๋ ์ด์ ๋ฅผ ๋จผ์ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ง๋ง, ์ ์ธ ์์ฑ์ ์ค์ฌ์ผ๋ก ๋๊ตฌ๋ฅผ ๋ง๋ค๊ณ ์๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์๋ตํ ์๋ ์์ต๋๋ค.
private์ ์กด์ฌ๋ ์ฐ๋ฆฌ์ ๋ถ์์์ ํด๋์ค๋ฅผ ๋ช
๋ชฉ์ ์ผ๋ก ๋ง๋ค๋ฏ๋ก ์ ์ธ ํ์ผ์์ ์ด๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. dts-downlevel
์ ๊ฐ์ ์ฌํ ๋ฐฉ์ถ ์ ์ธ ๋ณํ๊ธฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์ด์ TS์ ๋ํ ๊ฐ์ธ ์ ์ธ์ ์์ค์ ๋ฎ์ถ ์ ์์ต๋๊น? (์์ง #privates์ ๋ํ ํ์ ๋ ๋ฒจ์ด ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค)
Wesley๊ฐ ๋งํ ๊ฒ์ ์ถ๊ฐํ๋ ค๋ฉด: downlevel-dts ๋ ์ด์ ๋ฒ์ ์ TypeScript์์ ํธํ์ฑ์ ์ํด #private๋ฅผ private
์์ ์๋ก ๋ณํํฉ๋๋ค.
private์ ์กด์ฌ๋ ์ฐ๋ฆฌ์ ๋ถ์์์ ํด๋์ค๋ฅผ ๋ช ๋ชฉ์ ์ผ๋ก ๋ง๋ค๋ฏ๋ก ์ ์ธ ํ์ผ์์ ์ด๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํด๋์ค๋ฅผ ๋ช
๋ชฉ์ ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์ค๋ช
ํ ์ ์์ต๋๊น? ๐ ์ฌ๋ฌ ๊ฐ์ธ ์์ฑ #foo
๋ฐ #bar
์ฃผ์ด์ง๋ฉด ์ฌ์ ํ ํ๋์ ํน๋ณํ #private
์ฐ๋น์ธํธ ์ ์ธ #private
์์ฑ ์ ์ธ์ผ๋ก ๋์ฒด๋๊ธฐ ๋๋ฌธ์
๋๋ค. #foo
๋ฐ #bar
์ด๋ฆ์ ๋ณด์กดํ๋ค๋ฉด ๋ ์ ์ดํดํ ๊ฒ์
๋๋ค. ํนํ LanguageService๊ฐ #private
์์ฑ์ด ์ฌ์ฉ๋์ง ์๋๋ค๊ณ ๋ถํํ๋ค๋ ์ ์ ๊ณ ๋ คํ ๋ ์ฝ๊ฐ ์ด์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋์๊ฒ ๋ฒ๊ทธ์ฒ๋ผ ๋ณด์
๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ์ํฉ์์ private ํ๋๋ ํ์์ public ์์ฑ์ ์ผ๋ถ๊ฐ ์๋๋ฉฐ ํด๋์ค ์ธ๋ถ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ก ์ ์ผ๋ก ์ ๊ทธ๋ค์ด ์ ์ธ์ ์ผ๋ถ๊ฐ ๋์ด์ผ ํ๋์ง ์ ์ ์์ต๋๋ค. KeyOf
์ ํ์ด ์๋๊ณ ์ฐ๋น์ธํธ ์ ์ธ์ ์ผ๋ถ๊ฐ ์๋ public
์ด์ธ์ ๋ค๋ฅธ ์ก์ธ์ค ์์ ์๋ก ์ฃผ์์ด ๋ฌ๋ฆฐ ํ๋ ๋ฐ ๋ฉ์๋์ ๋์ผํ ์์น์ด ์ ์ฉ๋์ด์ผ ํ์ง ์์ต๋๊น?
Wesley๊ฐ ๋งํ ๊ฒ์ ์ถ๊ฐํ๋ ค๋ฉด: downlevel-dts ๋ TypeScript์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํด #private๋ฅผ
private
์์ ์๋ก ๋ณํํฉ๋๋ค.
์ข์ ์๋ฃจ์
์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ ๊ฒ ํ๋ฉด private
์์ ์๋ฅผ ์ ๊ณตํ๋ ์์ฑ์ด ์ ํ์ ๊ณต์ฉ ์์ฑ์ ์ผ๋ถ๊ฐ ์๋ ๊ฒฝ์ฐ .d.ts
ํ์ผ์ ์ผ๋ถ๊ฐ ์๋๋๋ค. ์ ๋ ํนํ ๊ฐ์ฅ ๋จ์ํ ์์ ์์๋ #private
๋ผ๋ ์ฌ์ฉ๋์ง ์๋ ์์ฑ์ ๋ํ ์ง๋จ์ ์์ฑํ๋ ์ ์ธ์ ๊ด์ฌ์ด ์์ต๋๋ค.
@wessberg ์์น ์๋ ์ธ์ด ์๋น์ค ๊ฒฝ๊ณ ๋ก ๋ฐ๊ฒฌํ ๋ฒ๊ทธ๋ฅผ ๋ณด๊ณ ํ์ผ๋ฉฐ ์๋ง๋ ์๋ฃจ์ ์ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ์ง๋ฌธ์ ๋ค์:
ํด๋์ค๋ฅผ ๋ช ๋ชฉ์ ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์ค๋ช ํ ์ ์์ต๋๊น?
๋๊ตฐ๊ฐ ์ ์ ๊ทธ๊ฒ์ ๋ํด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ต๋๋ค .
์ด๋ฌํ ๊ฒฝ์ฐ์ ๋ช ๋ชฉ์์ ๋ง๋๋ ํ ๊ฐ์ง ์ด์ ๋ ํด๋์ค์ ๊ตฌํ์๊ฐ private ํ๋ ๊ฐ์ ์จ๊ฒจ์ง ๋ถ๋ณ์ฑ์ ์ ์งํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํญ์ ์ ๋ ฌ๋จ" ๋๋ "์ง๊ฒฝ์ 2 * ๋ฐ๊ฒฝ์ ๋๋ค."
๋ ๋ค๋ฅธ ์ด์ ๋ ๋ฐํ์์ "์ฌ๋ฐ๋ฅธ ์์ ์ ์ํ"ํ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ์ ํ ๊ฒ์ฌ์ ์คํจํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
class A {
#foo = getFoo();
bar = "bar";
equals(other: A) {
return this.#foo === other.#foo && this.bar === other.bar;
}
}
new A().equals({ bar: "bar" }); // error: missing property '#foo'
์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ฐ๋ฆฌ๊ฐ #private
๊ตฌ๋ฌธ์ ๊ฐ์ง๊ณ ์๋ค๋ ์ฌ์ค์ด ๋๋ฌด ๊ธฐ์ฉ๋๋ค! ๊ทธ๊ฒ์ ๊ต์ฅ!
๊ทธ๋ฌ๋ ๋๋ ์ฐ๋ฆฌ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์๊ธฐ ๊ตฌ๋ฌธ(์ ์ ์ฐธ์กฐ)์ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ ๊ฒ์ด ์ ๋ง ๋ถ๋๋ฝ๋ค๋ ๊ฒ์ ์ธ์ ํด์ผ ํฉ๋๋ค.
class Counter {
#count = 0
increment() {
return #count++
}
}
์คํ์ ๊ธฐ๋ฅ์ผ๋ก ์๊ธฐ ๊ตฌ๋ฌธ์ ํ์ฑํํ๊ธฐ ์ํด typescript ํ๋ฌ๊ทธ์ธ์ด๋ tsconfig ์ต์ ์ ๊ฐ๋ฐํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๋ถํ์ํ this.
๋ฐ๋ณต์ ํผํ๊ธฐ ์ํด ๋งค๋๋ฌ์ด ์ธ์ฒด ๊ณตํ์ ๊ฐ์ ์ ์ํด ์ฃฝ์ด ๊ฐ๊ณ ์์ต๋๋ค. ์ ์์์์ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด ์ฝ์ ๊ตฌ๋ฌธ์ ๋จ์ ์ ์ ๊ฐ ๊ฑฑ์ ํ ์ค์ํ ๋ฌธ์ ๋ก ๋ณด์ด์ง ์์ต๋๋ค. ๊ทธ๋์ ๋๋ ํ์คํ ๋ด ์์ ์ ํ๋ก์ ํธ์์ "experimentalPrivateShorthand": true
๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์ค์ ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
์ด๊ฒ์ด ๊ฐ๋ฅํฉ๋๊น? ์๋ง๋ ๋ถ๊ฐ๋ฅํ ์ด์ ๊ฐ ์์ต๋๊น? ๊ด๋ จ๋ ์์ ์ ๋ฌด์์ ๋๊น? ๊ฑด๋ฐฐ!
:์จ์ด๋ธ:์ถ๊ฒฉ
@chase-moskal TypeScript๋ ECMAScript ํ์ค ์ด์ธ์ ์ ํ์ ์ ์ธํ๊ณ ๋ ๊ตฌํํ์ง ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ๊ฐ์ธ ํ๋์ ๋ฐ์ฝ๋ ์ดํฐ์์ ์ ์ ์๋ฏ์ด ์๋ฏธ ์ฒด๊ณ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
@chase-moskal this
ํญ์ ์
๋ ฅํ์ง ์๋ ๊ฐ์ฅ ์ค์ฉ์ ์ธ ๋ฐฉ๋ฒ์ ์์งํ IDE์์ ๋ฐ๋ก ๊ฐ๊ธฐ๋ฅผ ์ง์ ํ๋ ๊ฒ์
๋๋ค(์: F3). TS ํ์ ๋๋ Babel ํ์๋ฅผ ๋ถ๊ธฐํ๊ณ ํ๋ฌ๊ทธ์ธ์ ์์ฑํ์ฌ ๋ง์ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง ๋ชจ๋ ๋ง์ ์์
์ด ํ์ํ๋ฉฐ ๊ณต์ ๋๊ตฌ์ ๋๊ธฐํ๋์ง ์์ต๋๋ค. ๊ทํ์ ์ง๋ฌธ์ ๋ฌผ๋ก ๊ณต์ ์ง์์ ๊ดํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๋จ์ง ์ ์๊ฐ์ ๊ณต์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
@jhpratt โ ๋ด๊ฐ ํํ ์ํ๋ฅผ ์ ์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์ดํ์คํฌ๋ฆฝํธ. ์์ ์ ๋ฐ์ฝ๋ ์ดํฐ์ ํ์ดํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ต๋๋ค! ์ ์ด๋ ์ง๊ธ๋ณด๋ค๋ babel๊ณผ ๊ฒฝ์์ ์ด์์ต๋๋ค.
์์งํ ๋งํด์, ๋๋ 1๋ ์ ์ ๋ด babel์ ์ฌ์ฉํ๋ ์๋๋ฐฉ์ฒ๋ผ ๋ฉ์ง ๋ฏธ๋๋ฉ๋ฆฌ์ฆ ํด๋์ค๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ babel์๋ ๋ด๊ฐ ๊ฐ๋งํ๋ ๋ชจ๋ ์ข ์๋ฆฌ์ ํํ๋์ด ์์ต๋๋ค!
@mbrowne โ ๊ฐ๋
์ฑ ๋งํผ ์ค์ํ ๊ฒ์ ์ฝ๋์ "์ฐ๊ธฐ ๊ฐ๋ฅ์ฑ"์ด ์๋๋ฏ๋ก ํค ๋๋ฆ ๊ณ์ฐ์ ๋ํด ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค. ๋ด ์์ ์ ์๋ฐ ์คํฌ๋ฆฝํธ this
๋ฐ๋ณต์ด ๋๋ฌด ์์ฃผ ๋ถํ์ํ ๋ถํ์ํ ํผ๋์ด๋ผ๋ ๊ฒ์
๋๋ค.
์ด์ ๊ฐ๋
์ฑ์ ์ํด ์ด๊ฒ์ ์๊ฐํด ๋ณด์ญ์์ค. #private
๊ตฌ๋ฌธ์ด ์ฝ์์ผ๋ก ํ์๋๋ฉด this
๊ฐ ํ์๋ ๋๋ง๋ค ๊ณต๊ฐ ๋ฉค๋ฒ ์ ์์ต๋๋ค. ๊ฐ๋
์ฑ!
์ด์จ๋ , ๋๋ typescript๊ฐ ์์ง private ๋ฉ์๋๋ฅผ ์ง์ํ์ง ์๋๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๊ทธ๋์ ์ด ๋ชจ๋ ๊ฒ์ ๋ ๋ง์ ์์ ๊ณผ ์๊ฐ์ด ํ์ํฉ๋๋ค. ๋ถ๋ช ํ ๋ธ๋ฃธ๋ฒ๊ทธ ์ฌ๋๋ค์ด
ํ๋๋ฅผ ์ผ์น์ํค๋ ๊ฐ์ธ ๋ฉ์๋๊ฐ ์์ผ๋ฉด ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค(์๋ฌด๋ ๊ฐ์ ํด๋์ค์์ ๋ฏธ์ณ๋ฒ๋ฆฌ์ง ์๊ณ typescript-privates์ ํด์ํ๊ทธ-privates๋ฅผ ํผํฉํ์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค!)
๊ทธ๋์, ์ฌ๊ธฐ์์ ํ์ดํ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ํํ๋ ๊ฒ์ ๋ธ๋ฃธ๋ฒ๊ทธ ํ์ด๊ณ , 1๋ ์ ์๋ babel์ ์ํ ๋์ผํ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๊ธฐ๋ฅ์ ์ฐธ์ฌํ์ต๋๊น? ๊ทธ๋ค์ ์ ์ ์ผ์ ํ๊ณ ์๋๋ฐ ์ ๊ทธ๋ฐ์ง ๊ถ๊ธํฉ๋๋ค! ๊ทธ๊ฒ์ ์ ์ง! ๊ฑด๋ฐฐ!
:์จ์ด๋ธ:์ถ๊ฒฉ
์, TypeScript๋ ๋ช ๋ ์ ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ ๊ณตํ์ต๋๋ค. ๋ญ์ง ๋ง์ถฐ๋ด? ์๋ฏธ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ํฐ ์๊ฐ์ ๋๋ค. ์ด์ TypeScript๋ ๊ฐ๊น์ด ์ฅ๋์ ๋ ๊ฑฐ์ API๋ฅผ ์ง์ํ์ง ์๊ณ ์์ผ๋ฉฐ ์ ๊ฑฐํ๊ธฐ๋ก ๊ฒฐ์ ํ ๋๋ง๋ค ์์ฒญ๋ ์์์ ์ผ์ผํฌ ๊ฒ์ ๋๋ค. ํ์ดํ ํจ์๋ ECMAScript ์ฌ์์ ์ผ๋ถ์ด๋ฏ๋ก ์ด๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค.
TypeScript๋ ํ์ฌ 3๋จ๊ณ์ ๋๋ฌํ๊ธฐ ์ ์ ECMAScript ์ ์์ ๊ตฌํํ์ง ์์ต๋๋ค. ๋ฐ๋ก ์ฌ๊ธฐ์์ TS๊ฐ ๊ด์ฌ์ ๊ฐ๊ธฐ ์ ์ ์ฝ์ด๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
์, TypeScript๋ ๋ช ๋ ์ ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ ๊ณตํ์ต๋๋ค. ๋ญ์ง ๋ง์ถฐ๋ด? ์๋ฏธ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ํฐ ์๊ฐ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ด์์ ์ธ ์ธ์์ ์ด๊ณ ์์ง ์์ผ๋ฉฐ ํ์ฌ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ฝ๋ ์ดํฐ ์ ์์ ์์ง 2๋จ๊ณ์ด์ง๋ง ์ผ๋ถ ๋ํ ํ๋ก์ ํธ(Angular)์์๋ ์ค๋ซ๋์ ์ด๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ ๋ค๋ฅธ ์: ECMAScript๋ ์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ ์ฉํ ํด๋์ค ๋ฉค๋ฒ์ ๋ํด protected
์์ ์๋ฅผ ์ง์ ํ์ง ์์ต๋๋ค.
์ด์ TypeScript๋ ๊ฐ๊น์ด ์ฅ๋์ ๋ ๊ฑฐ์ API๋ฅผ ์ง์ํ์ง ์๊ณ ์์ผ๋ฉฐ ์ ๊ฑฐํ๊ธฐ๋ก ๊ฒฐ์ ํ ๋๋ง๋ค ์์ฒญ๋ ์์์ ์ผ์ผํฌ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ์ธ์ด๋ ์ปดํ์ผ๋ฌ ํ๋๊ทธ ์๋์ ์คํ์ ๊ธฐ๋ฅ์ ๋์ ํฉ๋๋ค.
TypeScript๊ฐ 1๋จ๊ณ ๋๋ 2๋จ๊ณ์์ ๊ฐ ์ ์์ ๊ตฌํํด์ผ ํ๋ค๊ณ ๋งํ์ง๋ ์์ง๋ง TS์ ๋ํ ๋ง์ ํฅ๋ฏธ๋ก์ด ์ ์์ด ๋งํ์ต๋๋ค. ECMAScript์๋ ์ด์ ์์ํ๋ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค(์: https://github.com/microsoft/TypeScript/issues/2000).
@ikokostya TypeScript๊ฐ ๊ตฌํํ ํ ์๋ฏธ ์ฒด๊ณ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์ ์๋ก ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ์ด ์๊ธฐ๊ฐ "์ง๊ธ ๋น์ฅ ํ์ํ๋ค"๋ ๋ง์์ด์ ๊ฐ์? ์ ๋ฅผ ๋ฏฟ์ผ์ธ์. ์ถ๊ฐ๋ก 5๋ช ์ ์บ๋ฆญํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๋น์ ์๊ฒ ์ค์ํ๋ค๋ฉด ์ปดํ์ผ๋ฌ๋ฅผ ์์ ๋กญ๊ฒ ํฌํฌํ ์ ์์ต๋๋ค.
TypeScript๋ ํ๋๊ทธ ์๋์์๋ 3๋จ๊ณ ์ด์ ์ ์ด๋ค ๊ฒ๋ ๊ตฌํํ์ง ์๋ ๊ฒ์ ๋ํด ํ๊ณ ํฉ๋๋ค. ์ด๊ฒ์ ์ด์ ์ ๋ค์ํ ๋ค๋ฅธ ๋ฌธ์ ์์ ์ฒ ์ ํ ๋ ผ์๋์์ต๋๋ค.
๋น๊ธ๋น๊ธ ๋๋ ๊ฒ ์ธ์๋ ์๋ฌด๊ฒ๋ ๋ณด์ด์ง ์์ผ๋ฏ๋ก ์ฃผ๋ชฉํ ๋งํ ์ผ์ด ๋ฐ์ํ์ง ์๋ ํ ๋ ์ด์ ์๋ตํ์ง ์๊ฒ ์ต๋๋ค.
@jhpratt ๋ด ์์ ์ ์๊ธฐ์ ๊ดํ ๊ฒ์ด ์๋๋๋ค. ์ ๋๊ธ์ ๋๊น์ง ์ฝ์ด์ฃผ์ธ์.
ํฌํฌ์ ๋ํ ์ ์์ ์ ๋์ ์ผ๋ก ๊ด๋ จ์ด ์์ต๋๋ค.
๋ชจ๋ ์ฌ๋์ด ๋์ํ๋ ๊ฒ์ ์๋๋ฉฐ TC39 ์์ํ์ ๋ชจ๋ ์ฌ๋์ด ๋์ํ๋ ๊ฒ์ ์๋๋๋ค. ์ด ์๊ธฐ๋ ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์ง๊ด์ ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค. ์ด์ ๋ํด ๋ง์ ๋ ผ์๊ฐ ์์๊ณ ์ด๋ฌํ ์ฐ๋ ค ๋๋ฌธ์ ๋จ์ถ ๊ตฌ๋ฌธ์ ๋ณ๋์ ์ ์์ผ๋ก ์ฎ๊ฒจ์ก์ต๋๋ค. (๋๋ง์ ๋ช ํํ ์๊ฒฌ์ ํ์ฑํ ๋งํผ ์ถฉ๋ถํ ์๊ฐํ์ง ์๊ณ ์์ฝ๋ง ๋๋ฆฌ๊ฒ ์ต๋๋ค.) ์ด ์ ์์ ์ถ์งํ๊ณ ์ถ๋ค๋ฉด ์งํ ๋ฐฉ๋ฒ์ TC39์ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. TS๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ณ 3๋จ๊ณ์ ๋๋ฌํ ๋ชจ๋ ์ ์์ ๊ตฌํํ๋ ๋ฐ ์ด๋ฏธ ๋ง์ ์์ ์ด ํฌํจ๋์ด ์๋ค๊ณ ํ์ ํฉ๋๋ค. ๋ฐ๋ผ์ TC39์์ ๋ ๋ฐ์ ํ์ง ์๋ ํ ์ด๊ฒ์ด TS์ ๋ํด ๊ณ ๋ ค๋๊ธฐ๋ฅผ ์์ํ๊ธฐ ์ด๋ ต์ต๋๋ค.
๊ทธ๋ฌ๋ ๋๋ ์ฐ๋ฆฌ๊ฐ ์๊ธฐ ๊ตฌ๋ฌธ์ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ ๊ฒ์ด ์ ๋ง ๋ถ๋๋ฝ๋ค๋ ๊ฒ์ ์ธ์ ํด์ผ
๊ทธ ์๊ธฐ๋ #
์ฌ์ฉํ ์๋ ์๋ ํ์ดํ๋ผ์ธ ์ ์๊ณผ ํธํ๋์ง ์์ผ๋ฉฐ ์ด๋ฏธ 2๋จ๊ณ ์ ์์ด ๋๋ ๊ฒ์ผ๋ก ๋
ผ์๋์์ต๋๋ค. ์ด๋ ๊ฒ ์ผ์ฐ ์ ์์ ๊ตฌํํ ๋ค์ ํ๊ธฐ์ ์ธ ๋ณ๊ฒฝ์ ์ํํ๋ ๊ฒ์ ์ ๋ง ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์ด๊ธฐ ๋จ๊ณ์์๋ ์ด๋ค ์ ์์ด ์น๋ฆฌํ ์ง์กฐ์ฐจ ์ ์ ์์ต๋๋ค.
ํธํ๋๋ ๊ฒ์ผ๋ก ํ๋ช
๋๋๋ผ๋ ์ ๋์ฌ #
์ฐ์ฐ์์ ๋ํ ๋ช ๊ฐ์ง ์ถ๊ฐ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์๊ฐํ ์ ์์ต๋๋ค. ์ด ์ฐ์ฐ์๋ 5๊ฐ์ ์ถ๊ฐ ๋ฌธ์๋ฅผ ์
๋ ฅํ๊ธฐ ์ํ ์ฝ์๋ณด๋ค ๋ ์ ์ฉํฉ๋๋ค.
... ํนํ ๊ฐ์ธ ํ๋์ ๋ํ ์ฌ์ฉ ์ฌ๋ก์ ์๋น ๋ถ๋ถ์ด this
์ ์ ํ ์๋ ๊ฒฝ์ฐ(์: static isMe(obj) { try { obj.#x; return true; } catch { return false; } }
, ํ ๊ฐ์ง ์๋ฅผ ๋ค์๋ฉด).
@phaux โ ์๊ธฐ ๋ ํ์ดํ๋ผ์ธ์ ๋ํ ์ ๋ง ์ข์ ์ ๋ณด์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
@jhpratt
TypeScript๋ ํ๋๊ทธ ์๋์์๋ 3๋จ๊ณ ์ด์ ์ ์ด๋ค ๊ฒ๋ ๊ตฌํํ์ง ์๋ ๊ฒ์ ๋ํด ํ๊ณ ํฉ๋๋ค.
์ถฉ๋ถํ ๊ณตํํ์ง๋ง ๊ฐ์ธ์ ๋ฐฉ๋ฒ์ ์ฌ์ค 3๋จ๊ณ ์ด์ง๋ง ์์ง ํ์ดํ์คํฌ๋ฆฝํธ ์ง์์ด ์๋ค๋
๋๋ ๋ธ๋ฃธ๋ฒ๊ทธ ํ์ด 1๋ ์ babel์์ ํ๋ ๊ฒ์ฒ๋ผ ํ์ดํ์คํฌ๋ฆฝํธ์์ ์ ์ ์ผ์ ๊ณ์ํ๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค(๊ธฐ๋)? ๊ทธ๋ ๋ค๋ฉด ์ ๋ง ์ธ๋ด์ฌ์ ๊ฐ๊ณ ์ชผ๊ทธ๋ ค ์์๋ง ์์ผ๋ฉด ๋ฉ๋๋ค. :)
ecmascript ๊ธฐ๋ฅ์ ๋ํด babel ๋ฐ ๋ธ๋ผ์ฐ์ ์ ๋น๊ตํ์ฌ ํจ์ฌ ๋ ๊ฒฝ์๋ ฅ์ด ์์๋ typescript์ฒ๋ผ ๋ณด์ด์ง๋ง ์ด์ ๋ ์ค์ ๋ก ๋๋ฌด ๋ณด์์ ์ ๋๋ค. ์ฐ๋ฆฌ๋ babel ๊ณผ chrome ์ด ๋ชจ๋ 1๋ ์ ์ ๋น๊ณต๊ฐ ํ๋(ํ๋๊ทธ ์์)๋ฅผ ์ ๊ณตํ ์ํฉ์ ์์ต๋๋ค. ๋ธ๋ฃธ๋ฒ๊ทธ๊ฐ ์ฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฌ ์๋ค
์ ๋ ํ์ดํ์คํฌ๋ฆฝํธ์ babel ๊ธฐ๋ฅ ์งํฉ ์ฌ์ด์ ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ๋ถ์ํฉ๋๋ค. ์ babel ์น๊ตฌ๋ค์ ์๋ ์ ์๋ฆ๋ต๊ฒ ๋งค๋๋ฌ์ด ์ฝ๋๋ฅผ ์์ฑํด ์์ง๋ง ์ ๋ ์ฌ์ ํ ์ฌ๊ธฐ์ ํ์ดํ์คํฌ๋ฆฝํธ ํจ๋ํฐ๋ฅผ ์ง๋ถํ๊ณ ์์ต๋๋ค. ๊ทธ๋ค์ ์ ๋ฅผ ๋น์๊ณ ์์ต๋๋ค!
๋๋ ์คํ์ ์ธ ํ๋๊ทธ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์ดํ์คํฌ๋ฆฝํธ๊ฐ ๋ง์์ ๋ค์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฏธ๋์ ๋ฆฌํฉํ ๋ง์ ์ํ์ ๊ฐ์ํ ์ํฅ์ด ์๋ ๊ฒ์ ๊ฒฐ์ ํ ์ ์์์ต๋๋ค. ์ด์ ํ์ดํ์คํฌ๋ฆฝํธ์ ์ ์ฅ์ ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ์ํ์ ๊ฒฐ์ ํ๋๋ก ํ๋ ๊ฒ์ด ๋๋ฌด ์ํํ์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ์๊ธฐ๋ ์ด์ ๋ด ์ ๋ชจ์ ๋๊น?
์ ์ ๋ ๋ฉ์ง ๊ธฐ๋ฅ์ด๋ ์ ์ ์ ํ์ ์ ํํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ์ง๊ธ์ ๋ ์ธ๊ณ์ ์ฅ์ ์ ๋ชจ๋ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋ด ์์ ์ธ์ง ๋ถ์กฐํ๊ฐ ์ปค์ง๊ณ ์์ต๋๋ค.
์ ๋ ์ฌ๊ธฐ์ ์ญํ์ด ์ ๋ง ๊ถ๊ธํฉ๋๋ค. ๋ธ๋ฃธ๋ฒ๊ทธ๊ฐ ๋น๋๋ ๊ฐ์ท์ ์ ์ ๊ธฐ์ฌ์ฒ๋ผ ๋์์ง ์์๋ค๋ฉด ํ์ดํ์คํฌ๋ฆฝํธ๊ฐ ์ค์ค๋ก ๋์ ํ๊ธฐ๊น์ง ์ผ๋ง๋ ๊ฑธ๋ ธ์๊น์? ์๋๋ฉด ์ด๊ฒ์ typescript ์คํ์ ๋๊น: "๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์ด๋ฌํ ์๋ก์ด ๊ธฐ๋ฅ์ ํผํ๋ค๋ฉด.. ์ปค๋ฎค๋ํฐ๊ฐ ์ฐ๋ฆฌ๋ฅผ ์ํด ๊ทธ๊ฒ์ ํ ์ ์๊ธฐ๊น์ง ์ผ๋ง๋ ๊ฑธ๋ฆด๊น์?", ํ, ๊ทธ๊ฒ์ ๋ด๊ฐ ๊ถ๊ธํดํ๊ธฐ์๋ ๊ฝค ๋์์ ์ ๋๋ค! ์๋๋ฉด ์คํ ์์ค์ ๋ํ ์๊ธ ์ง์๊ณผ ์ง์์ ์ํ ์๋ก์ด ๊ธธ์ ๋ชจ์ํ๋ ์ ๋ง ๋ฉ์ง ์๋น๋ก์ด ํ์ ์ธ๋ฐ ์์๋ณด๋ค ์กฐ๊ธ ๋ ๋๋ ธ์๊น์? ์๋๋ฉด ํ์ดํ์คํฌ๋ฆฝํธ์ ์ฒ ํ์ด ์์ ๋ณด๋ค ํจ์ฌ ๋ณด์์ ์ด์์ต๋๊น? ์ด ์คํํธ๋ผ์์ ์ฐ๋ฆฌ๋ ์ด๋์ ์์ต๋๊น?
3๋จ๊ณ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด typescript์ ๋์ญํญ์ด ๋ถ์กฑํ๊ฑฐ๋ ์ฐ์ ์์๊ฐ ๋ถ์กฑํ๊ฐ์?
์์ค์ ํผ๋ถ์ด์ ์ฃ์กํฉ๋๋ค. ์ ๋ ์ฌ๊ธฐ์์ ๋ฌด๋กํ๊ฑฐ๋ ์ฌ๊ฐํ ๋น๋์ ํ๋ ค๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์ธ์ ๊ด์ ์์ ์๊ฐ์ ๋์ง๋ ๊ฒ๋ฟ์ ๋๋ค. ๋๋ ๋จ์ง ์ฌ์ฉ์์ด๊ณ ์ฌ๊ธฐ์์ ๋ ์ ์๋ ์ฌ๋๋ค์ด ๋ด๊ฐ ๊ทธ๋ฆฐ ์ด ๊ทธ๋ฆผ์ ์ด๋ป๊ฒ ๋ฐ์ํ ์ง ์ ๋ง ๊ถ๊ธํฉ๋๋ค. ํฅ๋ฏธ๋ก์ด ํ ๋ก ์ ๋๋ค. ๋ชจ๋ ๊ฐ์ฌํฉ๋๋ค!
:์จ์ด๋ธ:์ถ๊ฒฉ
๋๋ ์คํ์ ์ธ ํ๋๊ทธ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์ดํ์คํฌ๋ฆฝํธ๊ฐ ๋ง์์ ๋ค์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฏธ๋์ ๋ฆฌํฉํ ๋ง์ ์ํ์ ๊ฐ์ํ ์ํฅ์ด ์๋ ๊ฒ์ ๊ฒฐ์ ํ ์ ์์์ต๋๋ค. ์ด์ ํ์ดํ์คํฌ๋ฆฝํธ์ ์ ์ฅ์ ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ์ํ์ ๊ฒฐ์ ํ๋๋ก ํ๋ ๊ฒ์ด ๋๋ฌด ์ํํ์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ์๊ธฐ๋ ์ด์ ๋ด ์ ๋ชจ์ ๋๊น?
๋น์ ์ ์ ๋ชจํ๋ ๊ฒ์ด ์๋๋๋ค. ์ ์์ ์๋ฏธ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ถ๊ฐํผํ๊ฒ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ด ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ ์๊ฐ์ ์๋นํ๊ณ ์ถ์ง ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ค์ TS ๊ตฌํ๊ณผ ์ถฉ๋ํ ๋ ๋ณ๊ฒฝ๋ ์๋ฏธ๋ฅผ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๋ฐ ์๊ฐ์ ๋ณด๋ด๊ณ ์ถ์ง ์์ต๋๋ค. ๊ทธ๋ค์๊ฒ๋ ๋ ๋์ ์ผ์ด ์์ต๋๋ค. ํด๊ฒฐํด์ผ ํ ์ ํ ๊ด๋ จ ๋ฌธ์ ๋ ์ฌ์ ํ ์ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ ํ๋ ์์์ ์ฌ์ฉํ๊ณ ์ ํ ์์คํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ ์ธ์ TC39์ ์์ ์ ์ํํ๋ ค๊ณ ํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ฐ์ธ ๋ฉ์๋ ๋ฐ ์ ๊ทผ์์ ๊ดํด์๋: V8์์๋ ๊ตฌํ๋์ง ์์ต๋๋ค. ํด๋์ค ๋ฉ์๋์ ์ธ์คํด์ค ํ๋๋ ์๋ก ๋ค๋ฅด๋ฉฐ... ์ค์์น๋ฅผ ์ผ์ ์ง์ํ๋ ๊ฒ์ ์๋๋๋ค. ๊ตฌํํ๋ ๋ฐ๋ ์ค์ ์๊ฐ์ด ํ์ํ๊ณ ์ด๋ฏธ ์๋ ๊ทธ๋๋ก์ ์์ ์ผ๋ก ๊ฐ๋ ์ฐจ ์๊ณ ์์ ํ์ ๋๋ค. ๋ํ, ๊ท์น์ ์ ์์ด 3๋จ๊ณ์ ์์ด์ผ ํ๋ค๋ ๊ฒ๋ง์ด ์๋๋๋ค. ๋ํ ์ ์์ ์๋ฏธ๊ฐ ์ต์ข ์ ์ด๋ผ๋ ํ์ ์ ๊ฐ๊ณ ์ถ๋ค๊ณ ๋ช ์์ ์ผ๋ก ๋งํฉ๋๋ค. ๋๋ฌผ๊ธฐ๋ ํ์ง๋ง ์๋ฏธ ์ฒด๊ณ๋ 3๋จ๊ณ์์ _can_ ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํฉ๋นํ ์ด์ ์์ด V8์์ ๊ตฌํ๋์ง ์์ต๋๋ค. ๊ทธ๋๋ ์คํดํ์ง ๋ง์ธ์. ์ ๋ ๊ทธ ์ ์์ด ๊ตฌํ๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ๊ณ ๋นจ๋ฆฌ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ธฐ ๋จ๊ณ์ ์ ์์ ๊ตฌํํ๋ ๊ฒ์ ์๊ฐ ๋ญ๋น์ด๋ฉฐ TS ํ์ ์๊ฐ์ ๋ค๋ฅธ ๊ณณ์์ ๋ณด๋ด๋ ๊ฒ์ด ์ข์ต๋๋ค. _์ค๋_ ์ฌ์ฉํ๊ณ ์ถ์ 2, 1, 0๋จ๊ณ ์ ์์ด ์ ์ ์์ด ๋ง์ง๋ง ์์ง ๊ฐ์ง ์ ์๋ ์ด์ ๋ฅผ ์ดํดํฉ๋๋ค. ์น๊ตฌ์ผ ์ฐธ์.
๋ํ babel์์ ์ฌ์ฉํ ์ ์๋ ์ต์ ์ ์ ํธํ๋ ๊ฒฝ์ฐ babel์ ๋ ์ ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ํ์ดํ์คํฌ๋ฆฝํธ๋ฅผ ๋ณํํ ์ ์์ต๋๋ค.
@0kku โ ์ฒ ํ์ ๋ฌธ์ ๋ผ๊ธฐ ๋ณด๋ค๋ ๋จ์ง ๋์ญํญ/์ฉ๋ ๋ฌธ์ ๋ผ๊ณ ๋ง์ํ์๋ ๊ฒ์ ๋๋ค โ ์ด์ ๋ฒ๊ทธ ๋ฐฑ๋ก๊ทธ๊ฐ 3๋จ๊ณ ๊ธฐ๋ฅ์ ๊ตฌํ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ง๋ง typescript์ ์ด๊ธฐ ์ญ์ฌ๋ก ๋์๊ฐ๋ฉด ์๋ง๋ ๋ฒ๊ทธ๊ฐ ๋ ์ ์์ ๊ฒ์ ๋๋ค. , ๊ทธ๋์ ์คํ์ ๊ตฌํ์ ์ฉ๋์ ํ ๋นํ๋ ๊ฒ์ด ๋ ์ฌ์ ์ต๋๊น? ๋๋ ์ด ์ด๋ก ์ ์ด ์ ์๊ณ ์ฐ๋ฆฌ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ ๊ธฐ์ฌํด์ผ ํฉ๋๋ค
@ljharb โ ์ค, ์ด์ ๋งค์ฐ ํฅ๋ฏธ๋กญ์ต๋๋ค โ ์ค์ ๋ก ๊ทธ๋ฐ ๋ฐฉ์์ผ๋ก typescript์ babel์ ํจ๊ป ์คํํ ์ ์์ต๋๊น? ๋ ์ธ๊ณ์ ์ต๊ณ ๋ฅผ ๋ฌ์ฑํ๋ ค๋ฉด?
ํ์ง๋ง vscode ts ์ธ์ด ์๋น์ค๊ฐ ์ต์ํ์ง ์์ ๊ตฌ๋ฌธ(์: ๊ฐ์ธ ๋ฉ์๋)์ ์ฌ์ฉํ์ง ์๊ณ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ์ ์์ต๋๊น? Intellisense๊ฐ ๋ถ์กฑํ๋ฉด typescript์ ๊ฐ์น ์ ์์์ ๋๋ฌด ํฐ ๋ฉ์ด๋ฆฌ๊ฐ ์๊น๋๋ค. Intellisense๋ฅผ ์์ ํ ๋นํ์ฑํํด์ผ ํ๋ ๊ฒฝ์ฐ ์ ๋ต์ ์์์ด ์๋๋๋ค.
์ด๊ฒ์ ์ฅ๊ธฐ์ ์ผ๋ก ์ด๋ป๊ฒ ๊ณ ์น ์ ์์ต๋๊น? ๊ฐ ์คํ ๊ธฐ๋ฅ์ ๊ตฌ๋ฌธ์ ๋ํด ํน์ ํ์ดํ์คํฌ๋ฆฝํธ ์ค๋ฅ๋ฅผ โโ๊ตฌ๋ถํ๊ณ ๋ํ ํ์ดํ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ๊ฐ tsconfig ์์ค์์ ์ด๋ฌํ ํน์ ์ค๋ฅ๋ฅผ ๋นํ์ฑํํ ์ ์๋ค๋ฉด โ babel ๊ธฐ๋ฅ๊ณผ typescript ๊ธฐ๋ฅ์ ๋ชจ๋ ํ์ฉํ ์ ์๋ ๊ธฐํ๊ฐ ์์ ๊ฒ์ ๋๋ค. ๋์์ - ์ ๋ง ๋ฉ์ง ์ฌ๋์ด๊ณ ๋ชจ๋ ์ข ๋ฅ์ ๋ถ๋ง์ ๋ น์ด๋ ์ฌ๋์ ๋๋ค. ๊ฑด๋ฐฐ!
:์จ์ด๋ธ:์ถ๊ฒฉ
@ljharb
๋ํ babel์ ๋ ์ ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ํ์ดํ์คํฌ๋ฆฝํธ๋ฅผ ๋ณํํ ์ ์์ต๋๋ค.
๋ ๋น์ ์ด (๋ค๋ฅธ ๋ชจ๋ ๊ฒ๋ค์ ์ข
๋ฅํ์ง๋ง ํด๊ฐ) ๋จ์ง ๊ฐ์ธ ๋ฐ๋ฒจ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ transpile๊ณผ ํจ๊ป ๊ทธ ์ฝ๋์ ์ ํ ๊ฒ์ฌ ์๋ ์ ํ ๊ฒ์ฌ ๊ณผ์ ์ ์ค์ ํ ์ ์์ต๋๋ค ๊ฐ์ tsc
. (์ ํ ๊ฒ์ฌ๋ฅผ ํต๊ณผํ ํ ๋น๋ ์คํฌ๋ฆฝํธ๋ Babel๋ง ์ฌ์ฉํฉ๋๋ค.) ํ์ง๋ง IDE์์ ๋ง์ ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ๋ฌด์ํด์ผ ํฉ๋๋ค. ์ด๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์๊ฒ ๋ฌธ์ ๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@chase-moskal @0kku๊ฐ ๋งํ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก
์ฐ๋ฆฌ๊ฐ ์คํ์ ๊ธฐ๋ฅ์ ๋ฐ์ด๋ค์ง ์๋ ์ด์ ๊ฐ ๊ถ๊ธํ๋ค๋ฉด --useDefineForClassFields
์์ฒญ๋ ๋ณต์ก์ฑ clusterfoxtrot ๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ์๋ฏธ ์ฒด๊ณ๋ฅผ ๊ฐ์ง ๊ฐ๋ฅํ TC39 ์ ์์ด ๊ทธ๋ด๋ฏํ๊ฒ ์กด์ฌํ ์ ์๋ค๋ ๊ฐ์ ํ์ ๋งค์ฐ ์ผ์ฐ ํด๋์ค ์์ฑ ์ด๊ธฐํ๋ฅผ ๊ตฌํํ์ผ๋ฉฐ ์ฐ๋ฆฌ๋ ๋งค์ฐ ํ๋ ธ์ต๋๋ค.
๋ฐ์ฝ๋ ์ดํฐ๋ ๊ฐ์ ๋ฐฐ๋ฅผ ํ๋ ๊ฒฝํฅ์ด ์์ผ๋ฉฐ, ์ฐ๋ฆฌ๊ฐ ์ด์ ์๋ฏธ ์ฒด๊ณ์ ๋ํ ์ง์์ ์์ ํ ์ค๋จํ ์ ์๋ค๊ณ ์๊ฐํ๋ค๋ฉด ๊น์ง ๋๋ผ๊ฒ ๋ ๊ฒ์
๋๋ค. ์ฌ๋ฌ ๋๊ธฐ์
์ด ์ด๋ฅผ ์ค์ฌ์ผ๋ก ์ ์ฑํ๋ ๋๊ท๋ชจ ํ๋ ์์ํฌ๋ฅผ ๊ตฌ์ถํ์ต๋๋ค. "ํ๋๊ทธ ์ด๋ฆ์ด experimental
ํ์ผ๋ฏ๋ก ์ง๋ 5๋
๋์ ์ง์๋์๋ ์ด ๊ธฐ๋ฅ์ด ์ธ์ ๊ฐ๋ ๊ฐ์๊ธฐ ์ฌ๋ผ์ง ์๋ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ด์ผ ํฉ๋๋ค."๋ผ๊ณ ๋งํ ์ ์๋ค๋ ๊ฒ์ ์์ ํ ๋นํ์ค์ ์
๋๋ค.
๊ทธ ๋ชจ๋๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ์ ์ถ์ ๋๋จธ์ง ์ฌ๊ธฐ์ด ๋ฏธ๋ฌํ๊ฒ ๋ค๋ฅธ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ์ ์ง ๋ถ์ด์์๊ฑฐ์ผ ๊ธฐ๋ฅ, ๊ทธ๋ฆฌ๊ณ ์ง์ฆ,ํ์ง๋ง ํธ๋ ์ด๋ ์คํ์ ๋๋ค - ์ฐ๋ฆฌ๋ ๋งค์ฐ ์ ์ง ๋น๋ ๊ฐ ํ์ดํ์ ์ต์ ์ ๋คํ๊ณ ์์ต๋๋ค ์ฝ๋์ ๋ฐํ์ ๋์์ ์ค๋จํ์ง ์๊ณ ๊ฐ๋ฅํ ์ ๋ฐ์ดํธ; ์ด ์ ์ถฉ์์ ์ฌ์ฉ์์๊ฒ ์ ๋ฆฌํ ๋(์: ํ๋ก๊ทธ๋จ์ด ๊ณ์ ์๋ํ๋ ๊ฒฝ์ฐ ) ๋ณด์ด์ง ์์ง๋ง ์ด์ฑ์ ์ธ ๊ธฐ๋ฅ ์ฑํ ์ธก๋ฉด์์ ๋จ์ ์ ๋ณด๋ค ์ฝ๊ฒ โโ๋ณผ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ์ ๊ด์ ์์, ๋น์ ์ ๋ถ์ฃผ์์ ๋ํ ์ฑ ์์ ํฌ๊ธฐํ ์ ์๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฒ์ ๊ฐ ๋ฐํ์ ํธํ์ฑ์ ๋ถ์ธํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ํ ๋๊ท๋ชจ ์ปค๋ฎค๋ํฐ์ ๋ฐ๋ฐ์๋ ๋ถ๊ตฌํ๊ณ ์ ํ์ ์ฒด์ธ์ ์กฐ๊ธฐ ์ฑํ์ ๋ณด๋ฅํ์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ "๊ธ์, ๊ทธ๋ฅ ๊น๋ฐ ๋ค์ ๋์ญ์์ค"๋ผ๊ณ ๋งํ ๋๋ง๋ค ๋ด๊ฐ ๋์ผ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ๋๋ ์ด๊ฒ์ ๋ณดํธ์์ ํ์ดํํ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ณ์ ์ผ์ด์์ต๋๋ค. ์๋ํ๋ฉด ์ฐ๋ฆฌ๋ (null)?.prop
์์ฐํ๋์ง ์ถ์ธกํด์ผ ํ๊ณ null
( undefined
์๋)๋ฅผ ์ ๋์ ์ผ๋ก ์ถ์ธกํ์ ๊ฒ์ด๊ณ ์ฐ๋ฆฌ๋' d ๊ทธ๊ฒ์ ์์๋ด๊ธฐ ์ํด ๋ ๋ค๋ฅธ ์ง์์ ์ธ ๋ณต์ก์ฑ ๋ถ๋ด์ ์๊ณ ์ด์๊ฐ์ผ ํฉ๋๋ค. ๊ฐํ ์ค์ ์ธ์ ์๋ฌด๋ ๊ฐ๋ 300 ๋ง ๊ฐ ๋ผ์ธ์ ์ฝ๋๋ฒ ์ด์ค์ ๋ถ์ด ์์ ์๋ค๋ ์ฌ์ค์ ๊ฑฐ๊พธ๋ก ์ฌ๊ธฐ๊ฐ ?.
๊ทธ๋ค์ด ๊ทธ ์์ฐ์ ์์กดํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ด null
๋๋๋ก์ ์ด๋ค ๋ฐฉ์์ผ๋ก, ๋ค๋ฅธ undefined
๋์์ผ๋ก ์ ํํ๋ ๋ฐฉ๋ฒ๋ ์์๋ณด์ธ์.
Bloomberg๋ ์ด ๊ธฐ๋ฅ์ ๊ฐ๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ๋ปค๊ณ TypeScript์ ๊ธฐ์ฌํ๊ธฐ๋ฅผ ์ด๋งํ๊ธฐ ๋๋ฌธ์ ๋น๊ณต๊ฐ ํ๋๋ฅผ ๊ตฌํํ์ต๋๋ค. ๊ทธ๋ค์ด ์ด ์ํฉ์ ์์ง ์์๋ค๋ฉด ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํ์ ๊ฒ์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์๋ผ์ธ์ ๋งค์ฐ ๊ธธ๊ณ , ํ์ค์ ์ผ๋ก 2020๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ง ์๊ณ 2016๋ ์ ํ๋ฅญํ๊ณ ์ธ์ฒด๊ณตํ์ ์ธ JS๋ฅผ ์์ฑํ ์ ์๋ ๊ฒ์ฒ๋ผ 2024๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ง ์๊ณ ๋ 2020๋ ์ ํ๋ฅญํ๊ณ ์ธ์ฒด๊ณตํ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ์์ง ์ต์ข ์ ์ผ๋ก ๊ฒฐ์ ๋ ์๋ฏธ๊ฐ ์๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค๋ ์ด์ ๋ก ์ฐจ๋จ๋ ์ฌ๋์ ์์ต๋๋ค. ๊ทธ ์์ ์์ ๊ทธ๊ฒ์ ๋จ์ง ์์์ ํ๋ก๊ทธ๋๋ฐ์ ๋๋ค.
๋ฟ๋ง ์๋๋ผ ํ์ฌ ํด๋์ค ํ๋ ์ ์ ๋ฐ ๋ชจ๋ ์ธ๋ถ ์ ๋ณด๊ฐ ํ์ฌ ํ์์ผ๋ก 4๋จ๊ณ์ ๋๋ฌํ ์ง ์ฌ๋ถ๋ 100% ํ์ ํ ์ ์์ต๋๋ค(ํนํ ์ง๊ธ์ ์ ์์ ์์ ํ ํ๊ธฐํ๊ณ ๋์ฒดํ๊ธฐ ์ํด ์ ๋ํ๋ TC39 ํ์์ฌ๊ฐ ์๊ธฐ ๋๋ฌธ์) ๋ค๋ฅธ ๊ฒ์ผ๋ก). ๋๋ 95%์ ํ์ค์ฑ์ ์ถ์ธกํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก 3๋จ๊ณ ์ ์์ ๊ตฌํํ๋ ๊ฒ์กฐ์ฐจ ์ํ์ด ์์ ํ ์๋ ๊ฒ์ ์๋๋๋ค. ๋ค๋ง 3๋จ๊ณ ์ดํ ์ถ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ๋งค์ฐ ๋ฎ์์ ํ์ฌ์ TS ์ ์ฑ ์ด ์ข์ ๋ฐฉํฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด์ [class fields] ์ ์์ ์์ ํ ํ๊ธฐํ๊ณ ๋ค๋ฅธ ์ ์์ผ๋ก ๋์ฒดํ๊ธฐ ์ํด ์ ๋ํ๋ TC39 ํ์์ฌ๊ฐ ์์ต๋๋ค.
ํฅ๋ฏธ๋กญ๋ค์. ๊ทธ ๋งํฌ๊ฐ ๋ง์์ ๋์๋์?
์ฌ๊ธฐ์ ์์ด๋์ด๊ฐ ์์ต๋๋ค. ์๋ง๋ TS ํ์ ํ๋ฌ๊ทธ์ธ ์์ฑ์์๊ฒ ์ปดํ์ผ ์๊ฐ๊ณผ ์ธ์ด ์๋ฒ ํ๋กํ ์ฝ ์ธํ ๋ฆฌ์ผ์ค ์๊ฐ์ ์ฐ๊ฒฐ๋๋ ๋ช ํํ API๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ํ๋ฌ๊ทธ์ธ ์์คํ ์ ๊ฐ์ ํ๋ ๋ฐ ์๊ฐ์ ํ ์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ 3์๋ ์๋ก์ด ๊ตฌ๋ฌธ์ ํฌํจํ์ฌ ์ํ๋ ์คํ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ IDE ๋ฐ ํ ์คํธ ํธ์ง๊ธฐ ๋ด์์ ์ฌ์ ํ ์๋ํ๋ ์ธํ ๋ฆฌ์ผ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ํ์ธํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ttypescript ๋ tsconfig.json
์์ TypeScript ๋ณํ๊ธฐ๋ฅผ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ์ง ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๋ฉฐ IDE์ ์ธํ
๋ฆฌ์ผ์ค์ ์ฐ๊ฒฐ๋์ง ์์ผ๋ฏ๋ก ํ์ฌ์์ ๋ค์๊ณผ ์ ํตํฉ๋๋ ์๋ฏธ ์๋ ๊ธฐ๋ฅ์ ๋ง๋ค ์ ์์ต๋๋ค. VS Code์ ๊ฐ์ ๊ธฐ์กด ๋๊ตฌ๋ ์์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ttypescript
๋ก ์ ํํ๊ณ VS Code๊ฐ ๊ตฌ๋ฌธ์ ์ดํดํ์ง ๋ชปํ๊ณ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ๋์ ํฐ๋ฏธ๋ ์ถ๋ ฅ์ ์์กดํด์ผ ํ๋ ์ข์ VS Code ๊ฒฝํ์ ํฌ๊ธฐํ๊ณ ์ถ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด TypeScript๋ ์์ ์ ์ธ ๊ธฐ๋ฅ์ ์ด์ ์ ๋ง์ถ๊ณ ์ 3์๊ฐ ์ํํ ์คํ ๊ธฐ๋ฅ์ ๋ง๋ค๊ฑฐ๋ ์ฌ์ฉํ๋๋ก ํ ์ ์์ต๋๋ค(Babel ์ํ๊ณ์์์ฒ๋ผ ์ฝ์ต๋๋ค).
ํฅ๋ฏธ๋กญ๋ค์. ๊ทธ ๋งํฌ๊ฐ ๋ง์์ ๋์๋์?
https://github.com/microsoft/TypeScript/pull/30829#issuecomment -541338266
Babel ํ๋ฌ๊ทธ์ธ์ผ๋ก ํ ์ ์๋ ๊ตฌ๋ฌธ์ ์์
์ ๋งค์ฐ ์ ํ์ ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ์๋ ์ด๋ฏธ ์ง์ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด do
ํํ์ "ํ๋ฌ๊ทธ์ธ"์ ์ฌ์ ํ โโBabel ์์ฒด์ ํต์ฌ์ ๋
ผ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. https://github.com/babel/babel/blob/master/packages/babel-parser/src/parser /expression.js#L991 ์ปค๋งจ๋๋ผ์ธ ์ค์์น์
๊ฐ์ธ ํด๋์ค ๋ฉ์๋ ๋ฐ ์ ๊ทผ์์ ๋ํด ๋ฐ๋ฅผ ์ ์๋ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
@RyanCavanaugh
์ด ๋ ๊ฐ์ง ๊ธฐ๋ฅ ๋ชจ๋์ ๋ํด ์ฐ๋ฆฌ๋ ํ์ ๋์ ๋ฏธ๋ฌํ๊ฒ ๋ค๋ฅธ ๋ ๊ฐ์ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค.
์ด๋ฐ ์์ผ๋ก ์งํ๋์ด์๋ ์ ๋๋ฉฐ ์ ์ฒด ์ปค๋ฎค๋ํฐ์ ํผํด๋ฅผ ์ค ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ์ฝ๋ ์ดํฐ๊ฐ 3๋จ๊ณ์ ๋๋ฌํ๋ฉด ์ ๋ฒ์ ์ ๋ฐ์ฝ๋ ์ดํฐ๋ก ์ ๊ทธ๋ ์ด๋ํ ์๊ฐ์ ์ฃผ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ๋์ ๋ ๋ค ์ง์๋ ์ ์๊ณ TypeScript 4+์์ ํ๋ ์ค์์น๋ฅผ ๋ง๋ค๊ณ ๋ ๊ฑฐ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๋ค์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด์ ๋ฐ์ฝ๋ ์ดํฐ์ ์ ๋ฐ์ฝ๋ ์ดํฐ์ ์ฐจ์ด์ ์ ๋ชจ๋ฆ ๋๋ค(์, ์คํ์ ๊ธฐ๋ฅ). ๊ทธ๋ฌ๋ ์ ์์ด ๊ทธ๋ค์ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค์ง ๋ชปํ๋ค๋ฉด ์ํฅ์ ๋ฐ๋ ํ๋ก์ ํธ๊ฐ ์ ์์ ๋ํด ์์ ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋์๊ฒ ๋ ์ข์ต๋๋ค. TypeScript๋ ๋ ๊ฑฐ์ ๋ฐ ์คํ ๊ธฐ๋ฅ์ ๋ํ ์ ์์ ์ผ์ผํค๊ธฐ์๋ ์๋ชป๋ ๊ณณ์ ๋๋ค.
์ฌ๊ธฐ์ ์ฐฉ๋ฅํ ๊ฒ์ ํํํฉ๋๋ค :/
@RyanCavanaugh
Babel ํ๋ฌ๊ทธ์ธ์ผ๋ก ํ ์ ์๋ ๊ตฌ๋ฌธ์ ์์ ์ ๋งค์ฐ ์ ํ์ ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ์๋ ์ด๋ฏธ ์ง์ํด์ผ ํฉ๋๋ค.
์ง์ค. ๊ทธ๋ฌ๋ TypeScript์ ๋น๊ตํ๊ธฐ ์ํด Babel์์๋ ํ์๋ฅผ ๋ถ๊ธฐํ๊ณ babel.config.js
๋ฅผ ์ค์ ํ์ฌ ์ฌ์ฉ์ ์ ์ ํ์์ ์ฌ์ฉ์ ์ ์ ๊ตฌ๋ฌธ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์, ๋ง์ ์์
(ํนํ ์ฒ์์ผ๋ก ์ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๊ธฐ)์ด์ง๋ง TS์ ํด๋นํ๋ ์ต์
์ ์์ง ๋ชปํฉ๋๋ค. ๋ฌผ๋ก Babel์์๋ ๊ธฐ์กด ๊ตฌ๋ฌธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ณํ ํ๋ฌ๊ทธ์ธ์ ์์ฑํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค. TypeScript์์ ์ฌ์ฉ์ ์ ์ ์ต์
์ ํ์ฌ ์ํ๊ฐ ์ด๋ค์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ช ๋
์ ์ ๋ง์ง๋ง์ผ๋ก ๊ฒํ ํ์ ๋ ์ ์ฒด๋ฅผ ๋ถ๊ธฐํ๋ ๊ฒ ์ธ์๋ ํ์ฅํ ์ ์๋ ์ต์
์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค.
์ด๊ฒ์ ์๋ํ์ญ์์ค : https://github.com/dsherret/ts-morph
private IMO์ ํด์๋ ์ถํ๊ณ ํผ๋์ค๋ฝ์ต๋๋ค. ๋ฌ๋ฆฌ ๊ตฌํํ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์ํํ๊ธฐ ์ด๋ ต์ต๋๋ค. TS์ ๊ฐ์ ๋น๋ ๋จ๊ณ๊ฐ ์์ต๋๋ค. ๊ทธ ํจ๊ณผ๋ ๋ง์ ์ฌ๋๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ธ์ฉ์ด์ด์ผ ํ๋ค๊ณ ๊ฐ๋ฅด์นจ์ ๋ฐ์๊ธฐ ๋๋ฌธ์ JS๋ฅผ ์์ฑํ๋ '์ฌ๋ฐ๋ฅธ' ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ์ฌ๋๋ค๊ณผ ํจ๊ป "ํ๋ ๊ฐ์ธ์ฉ"์ ์์ฃผ ์ฝ๊ฐ์ ์ด๋์ ์ํด ๊ธฐํธ๋ก ์ฝ๋๋ฅผ ๋ง๋ ๊ฒ์
๋๋ค.
ํนํ ๋ฌธ์ ์ ๋ํด ๋ช
๋ฐฑํ ๋ถ์ผ์น๊ฐ ์๋ ๊ฒฝ์ฐ ํ์ค์ผ๋ก ๋ฐ์ด๋ฃ๊ธฐ ์ ์ ๋ ๋ง์ ์ ์์ด ์์ด์ผ ํฉ๋๋ค.
@robot56 ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๊ณต๊ฐ ์ฌ์ผ ํฉ๋๋ค . ๊ทธ๋ค์ ๋ชจ๋ ๊ฒ์ด ๋ฆฌํ๋ ์ ์ ํตํด ์ ๊ทผํ ์ ์์ด์ผ ํ๋ค๊ณ ๋ฐฐ์ ์ต๋๋ค . ์ด๋ ์ฌ์ค ๋๊ตฌ์๊ฒ๋ ์ข์ ๊ฒ์ด ์๋๋๋ค.
@ljharb ์, this.#x = this.#something();
์ ๊ฐ์ ๊ฒ์ ๋ณด๊ณ ํด๋์ค์์ ์ ์ธ์ ํ์ ๋ ๋ด ์ฒซ ๋ฒ์งธ ์๊ฐ์ ํด์๊ฐ ๋ณ์ ์์ฒด์ ๋ณ๊ฐ๋ผ๋ ๊ฒ์ด์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์์ ์๋ผ๊ณ ๊ฒฐ์ฝ ์๊ฐํ์ง ์์์ ๊ฒ์
๋๋ค. ๋์ค์ ์ํ ๋ฐ์ค, ๊ทธ๊ฒ๋ ๊ฑฐ๊พธ๋ก ๋ณด์ธ๋ค. ์ด๊ฒ์ TS์ ์ค์ ๋ก ๊ด๋ จ์ด ์์ง๋ง ์ฑ๊ฐ์ ์์ค ์ผ ๊ฒ์
๋๋ค.
์, ์ต์ํด์ง๋ฉด ์๋ก์ด ๊ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ด ์ ์์ด ๋ ์ ์์ต๋๋ค. ์ ๋ JS ์ปค๋ฎค๋ํฐ๊ฐ ๊ณ์ํด์ ๋ฐฐ์ธ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค!
(ํด์ ๋ ๋ณ์ ์์ฒด์ ์ผ๋ถ์ด๋ฉฐ this.#x
์ ์ด๋ฆ์ "x๊ฐ ์๋๋ผ private"์ด์ง๋ง ์ค์ ๋ก๋ ํด๋น ์ดํ ๋ฒ์์์ ๊ณ ์ ํ ๊ฐ์ธ #x
.)
์, ์ต์ํด์ง๋ฉด ์๋ก์ด ๊ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ด ์ ์์ด ๋ ์ ์์ต๋๋ค. ์ ๋ JS ์ปค๋ฎค๋ํฐ๊ฐ ๊ณ์ํด์ ๋ฐฐ์ธ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค!
๋น์ ์ด ๊ทธ๊ฒ์ ํํํ๋ ๋ฐฉ์์ผ๋ก, ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ์ ํ๋ก๊ทธ๋๋ฐ ์งํ์ ์ถ๊ฐ๋๋ ๊ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง, ์ด๊ฒ์ ์๊ธฐํด์ผ ํ๋ JS์ ๋ ๋ค๋ฅธ ํน์ง์ผ ๋ฟ์ ๋๋ค.:D
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ์ฌ๋๋ค์ด "๋น๊ณต๊ฐ" ํค์๋ ๊ธฐ๋ฐ ์๋ฃจ์ ์ ๋ง์กฑํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.