ํด๋์ค๋ฅผ ์์ฑํ๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋์์ด ํด๋์ค์ ์์ฑ์๊ฐ ๋น๊ณต๊ฐ์ด๋ฏ๋ก ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ์๋ ํ ํด๋์ค๋ฅผ ์ธ์คํด์คํ ํ ์์๋ ๊ฒ์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ํจํด์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ชจ๋ "ํด๋์ค"๋ ์ค์ ๋ก ํจ์์ผ ๋ฟ์ด๋ฉฐ ํธ์ถ ํ ์์๋ ํจ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ํด๋์ค๊ฐ ๋ณด์ด๋ ๋ชจ๋ ๊ณณ์์ new
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํด๋์ค๋ฅผ ๊ณต๊ฐํ์ง ์๊ณ (์ : ๋ชจ๋์์) ํด๋์ค์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ธํฐํ์ด์ค๊ฐ ํด๋์ค๋ฅผ ํ์ฅ ํ ์ ์๋ค๋ ์ฌ์ค์ ๋จ์ฉํ์ง๋ง ์ง์ ์ธ์คํด์คํํ๊ฑฐ๋ ํ์ฅ ํ ์๋ ์์ต๋๋ค.
ํด๋์ค์ ๊ฐ์ธ ํจ์์๋ ๋๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ธ ์์ฑ์์ ์ก์ธ์ค ํ ๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋ ์ด์ ๋ฅผ ์ ์ ์์ต๋๋ค.
@billccn "JS๊ฐ ํ์ฉํ๋ฉด ์จ๊ธธ ์ ์๊ฒ๋ฉ๋๋ค"๋ผ๋ ์์ฒญ์ ์ฃฝ์ด๊ณ ์ถ์ง ์์ต๋๋ค.
์ฌ๋ฌผ์ TS ๋ฐ ์์ฑ JS์์ ์์ ํ ๋ณดํธํ๊ณ ๋ค๋ฅธ ๊ฒ์ JS ์์ฑ ์ง์ ๊น์ง ๋ณดํธํ๋ ๊ฒ์
๋๋ค. ์ค๋ช
ํ๋ฏ์ด ์์ ํ ๋ณดํธ๋ ๋ถ๊ฐ๋ฅํ์ง๋ง ์ปดํ์ผ๋ฌ์์ ๋ค๋ฅธ ๊ฐ์์ฑ์ ํ์ธํ๋ ๊ฒ์ ๊ฐ๋ฅํด์ผํฉ๋๋ค.
๊ฐ์์ฑ ์์ ์๊ฐ ๋ง์์ ๋ค์ง ์์ผ๋ฉด ๋ชจ๋ ๊ณณ์์ ๊ธฐ๋ณธ ๊ณต๊ฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ๊ฐ๋
์ด ์ ์ฉํ๋ค๊ณ ์๊ฐํ๋ ๋ค๋ฅธ ๋๊ตฌ๊ฐ ์์ต๋๋ค.
์, ๊ฐ์ธ ํ๋๊ฐ ์ปดํ์ผ๋ฌ ๊ฒ์ฌ๋ก๋ง ๊ตฌํ๋๋ฉด ์์ฑ์๋ก ํ์ฅ ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ธํฐํ์ด์ค ๊ธฐ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ด๋ฏธ ์๋ํฉ๋๋ค.
: +1 : ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฝ๋ ๊ฐ๋ ์ฑ์ ์ํด ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ก ๊ฐ์ ํ๊ณ ์ถ์ ๋๊ฐ ์์ต๋๋ค. ์ธํฐํ์ด์ค ๊ธฐ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฝ๋์ ๋ง์ ๋ ธ์ด์ฆ๋ฅผ ์์ฑํฉ๋๋ค.
๋๋ ์ปดํ์ผ๋ฌ ๊ฒ์ฌ๊ฐ ๊ฐ ๊ธธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋ฝ ๋จ, PR ์๋ฝ
๋ช ํํํ๊ธฐ ์ํด private ์์ฑ์๊ฐ์๋ ํด๋์ค๋ฅผ ํ์ฅ ํ ์ ์์ต๋๊น?
์ฆ ์ด๊ฒ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๊น?
class A {
private constructor() {
}
}
class B extends A { // Should there be an error at A saying: "Cannot extend private class 'A'"?
}
๊ทธ๋ ๋ค๋ฉด ๋ค์์ ํ์ฉํ ๊น์?
class A {
protected constructor(a?: any)
private constructor() {
}
}
class B extends A { // No error since 'A' has a non-private constructor
}
๋น JS ๊ฐ๋ฐ์ ๊ฒฝํ์์ ์์๋๋ ๋์์ ๋๋ค.
์ฒซ ๋ฒ์งธ ์์์ B
๋ ์์ ์ ์ํผ ํธ์ถ์ด ๋ถ๋ฒ์ด๋ฏ๋ก ์ค๋ฅ ์ฌ์ผํฉ๋๋ค. ๋ฐ๋ผ์ private constructor
๊ฐ์๋ ํด๋์ค๋ ์ฌ์ค์ sealed
/ final
์
๋๋ค.
๋ ๋ฒ์งธ ์์ ์์ A
์ ์ ์ธ์ ์์ฑ์์ ๋ชจ๋ ์ค๋ฒ๋ก๋์ ๊ทธ ๊ตฌํ์ด ๋์ผํ ๊ฐ์์ฑ์ ๊ฐ์ ธ์ผํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ ์ฌ์ผํฉ๋๋ค (๋ฉ์๋์ ๋ํ ๋์ผํ ๊ท์น).
# 471๋ ์ฐธ์กฐํ์ญ์์ค. ์์ฑ์๋ฅผ ๋น๊ณต๊ฐ๋ก ํ์ฉํ๋ ๊ฒ์ด ์ ๋ง๋ก ํ์ํฉ๋๊น, ์๋๋ฉด ๋ณดํธ ๋ ๊น์?
@benliddicott ๋๋ก๋ ๋ ์๊ธฐ ๋๋ฌธ์ ๋จ์ผ ํญ๋ชฉ์ ๊ฐ์ ๋ก ์ฌ์ฉํ๊ฑฐ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ ์ ๋ฉ์๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋๋ก ๊ฐ์ ํ๋ ๊ฒ์ด ์ ์ฉํฉ๋๋ค.
@dsherret protected
๋ ์ด๋ฌํ ๋ชจ๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ค์ด ์คํธ๋ฆผ ์ฌ์ฉ์๊ฐ ํด๋์ค์์ ์์ํด์ผํ๋ ํฉ๋ฒ์ ์ธ ํ์์ฑ์ด ์ ํ ์๋ค๋ ๊ฒ์ ํ์ ํ ์ ์์ต๋๋ค. private
์ ์ ์ผํ ํจ๊ณผ๋ ๋ค์ด ์คํธ๋ฆผ ์ฌ์ฉ์๊ฐ ์์์น ๋ชปํ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ์ง ๋ชปํ๋๋กํ๋ ๊ฒ์
๋๋ค.
@benliddicott ๋๋๋ก ๋น์ ์ด ์ํ๋ ์ ์ผํ ๊ฒ์ ํด๋์ค๊ฐ ํ์ฅ
"2. ํด๋์ค๋ฅผ ํ์ฅ ํ ์ ์๋์ง ํ์ธํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ๋ถ์ฃผ์ํ๊ฑฐ๋ ์ ์์ ์ธ ํ์ ํด๋์ค๊ฐ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ์ฒ๋ผ ๋์ํ์ฌ ํด๋์ค์ ๋ถ๋ณ์ ๋์์ ์์์ํค๋ ๊ฒ์ ๋ฐฉ์ง ํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค๋ฅผ ์ต์ข ํด๋์ค๋ก ์ค์ ํ์ฌ ํ์ ํด๋์ค ์ง์ ์ ๋ฐฉ์งํฉ๋๋ค. ๋์ค์ ๋ ผ์ ํ ๋์์ ๋๋ค.
ํ์ฌ TypeScript์๋ final
/ sealed
์ง์์ด ์์ผ๋ฏ๋ก private ์์ฑ์๋ ์ ํ ์์คํ
์ ๊ด์ ์์ ๋ณ๊ฒฝํ ์์๋ ํด๋์ค๋ฅผ ๋ง๋๋ ์ ์ผํ ๋ฐฉ๋ฒ์
๋๋ค. (ํ์ง๋ง ์์ฑ์์์ ๊ฐ์ฒด๋ฅผ ๊ณ ์ ํ๋ ๊ฒ๋ ๊ถ์ฅํฉ๋๋ค.)
@billccn , ๊ทธ ์ ์์ ์๊ฒฌ์ ํฅ๋ฏธ ๋กญ์ต๋๋ค. ๋์๊ด ์์ฑ์์ ์๊ฒฌ์ด ๋์๊ด ์ด์ฉ์์ ์๊ฒฌ๋ณด๋ค ์ฐ์ ํด์ผํ๋ค๋ ์๊ฐ๋ ๊ทธ๋ ์ต๋๋ค. ๋ด ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ๋์๊ด ์์ฑ์๋ ๋น๊ณต๊ฐ๋ก ์ฌ์ฉํ ๋๋ฅผ ๋ชจ๋ฅด๊ณ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ ๋ฐํฉ๋๋ค. ์ค์ ๋ก ์ฌ์ฉํ์ง ์์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ ๋ ์ง ์๊ณ ์๋ค๊ณ ๋ฏฟ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฌ๋ Java์ ๊ฐ์ ์ ์ ์ธ์ด๋ณด๋ค ๋ ์ ์ ํ ๋น๊ต๋ ๋ค๋ฅธ ๋์ ์ธ์ด ์ธ Perl์ ๋๋ค. http://www.perlmonks.org/?node_id=437623
perl์ public, private, protected์ ๊ฐ์ ์ก์ธ์ค ์์ ์๊ฐ์๋ ์ด์ ์ค ํ๋๋ ์ข ์ข ์์ ์ ์ํํ๋ ๋ฐ ๋ฐฉํด๊ฐ๋๋ ๊ฒ์ผ๋ก ์ธ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ ๋์์ด๋๊ฐ ๊ตฌ์ ํ ๊ฒ์ ์๋ฌด ๊ด๋ จ์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ผ๋ก ๋ฌด์์ํ๊ณ ์ถ์์ง. ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ฐ์ฑ์ ๊ณ ๋ คํ ์ค๊ณ-์ง๊ธ์ ํ์ํ์ง ์์ ์๋ ์์ง๋ง ๋ค์ ์ฌ๋์ ์๋ก์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋งค์ฐ ํธ๋ฆฌํ๋ค๋ ๊ฒ์ ์ ์ ์์ผ๋ฉฐ ์ ์ฐ์ฑ์ ๊ฐ๋ฐ ํ ์ฒ์ฌ์ฑ์ ์ถ๋ณต ํ ๊ฒ์ ๋๋ค ;-)
๊ณผ:
Perl์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ์ ์ด๊ดํ์ง ์์ต๋๋ค. ์ฐํ ์ด์ด์์ด์๊ฐ ์๋๋ผ ์ด๋๋ฐ์ง ์์๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ค์์ ๋๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
http://www.perlmonks.org/?node_id=1096925
์ฌ์ค JavaScript๋ ๋์ผํ๋ฉฐ-์-TypeScript๋ ๊ฑฐ์ ๋ชจ๋ ๋ฉด์์ ๋์ผํฉ๋๋ค. typescript์์๋ ์ ์ ํ ์ด๋ฆ์ escape-hatch : obj["propertyName"]
์ฌ์ฉํ์ฌ ๊ฐ์ธ ๋ฉค๋ฒ์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๋ก์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฑฐ๋ ๊ฐ์ฒด์์ ์์ํ๋ ๊ฒ์ด ํ๋ช ํ์ง ์๋ค๊ณ ์๊ฐ๋๋ฉด ์ฌ์ฉ์์๊ฒ ํ๋ช ํ์ง ์๋ค๊ณ ๋งํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ ๋ง์ง ๋ง์ญ์์ค. ๊ทธ๋ค์ ๊ฒฐ๊ตญ ๋น์ ๋ณด๋ค ๋ ์ ์ ์ ์์ต๋๋ค.
๋๋ "์ถฉ๋ถํ ๋ณดํธ"์ ๋ํ ๋ ผ์๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค. TS์ ๊ฐ์์ฑ์ ๊ฐ๋ ์ด ์๊ณ ์ด ๊ฐ๋ ์ ์์ฑ์์๊ฒ ์ ์ฉ ํ ์ ์๋ค๋ฉด ๋๋ต์ "์ถฉ๋ถํ์ง ์์ต๋๋ค"์ ๋๋ค.
์์ฑ์์์ ์ก์ธ์ค ์์ ์๊ฐ ํ์ฉ๋๋ฉด ๋ค๋ฅธ ์์ ์์ ์ผ๊ด๋ ๋์์ ๊ฐ์ ธ์ผํ๊ณ ๋น๊ณต๊ฐ๋ฅผ ํ์ฉํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ธ ํ์์ ํ์คํ ์ ์ฉํฉ๋๋ค. ํด๋์ค ์ธ๋ถ์ ๋ถ์์ฉ์ ๊ฑฑ์ ํ์ง ์๊ณ ํด๋์ค์ ๊ตฌํ ์ธ๋ถ ์ ๋ณด๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ฆฌํฉํ ๋ง ํ ์ ์์ต๋๋ค.
๊ฐ์ธ ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ ๊ฐ๋ฐ์๊ฐ ํน์ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋๋ก ๊ฐ์ ํ๊ณ ์ถ์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์ด ํด๋์ค๋ฅผ ํ์ฅํ์ง ์๋๋ก ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์์ ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ก ๊ฐ์ ํ๊ณ ์ถ์ ์ ์์ต๋๋ค.
class Currency {
private constructor(private value: number, private type: CurrencyType) {
}
static fromNumberAndType(value: number, type: CurrencyType) {
return new Currency(value, type);
}
static fromString(str: string) {
const value = ...,
type = ...;
return new Currency(value, type);
}
// ... omitted ...
}
// error:
const badCurrency = new Currency(5.66, CurrencyType.USD);
// ok:
const goodCurrency1 = Currency.fromNumberAndType(5.66, CurrencyType.USD);
const goodCurrency2 = Currency.fromString("5.66 USD");
๊ฐ์ธ ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ ๊ฐ๋ฐ์๊ฐ ํน์ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋๋ก ๊ฐ์ ํ๊ณ ์ถ์ ์ ์์ต๋๋ค.
์ด๋ ์ธ์ด ๋์์ธ ๋ฌธ์ ๊ฐ ์๋ ๊ด๋ฆฌ ๋ฌธ์ ์ ๋๋ค.
@benliddicott ๋ณ์์ ๋ํ ์ ํ ์ค๋ช
์์ ๋ํด ๋น์ทํ ๋ง์ ํ ์ ์์ต๋๋ค. :) ๊ธฐ๋ฅ์ด ๋ง์์ ๋ค์ง ์์ผ๋ฉด ์ผ๋ฐ JS๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋๋
TS๋ฅผ ์ฌ์ฉํ๊ณ ์์ฑ์์์ private ์ฌ์ฉ์ ๊ธ์งํ๋ ๋ฆฐํธ์ ์ ์ฌํ ๊ท์น์ ๋ง๋ญ๋๋ค. ๋ง์ง๋ง ์ฃผ์์ ๋ค๋ฅธ ๋ง๋ก ๋ฐ๊พธ๋ ค๋ฉด "์ธ์ด ๋์์ธ ๋ฌธ์ ๊ฐ ์๋๋ผ ๋๊ตฌ ๋ฌธ์ ์
๋๋ค".
@benliddicott ๋ญ๊ฐ ํ ์ ์๋ค๋ฉด ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ ํ ์๋ชป๋์์ ๋ ๋ค์ ๋ณด๋ผ ํ์๊ฐ ์์ต๋๋ค. ์๊ฐ์ด ์ ์ฝ๋ฉ๋๋ค.
์ฝ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ปดํ์ผ๋ฌ์๊ฒ ์ ํํ ์๋ ค์ฃผ๋ ๊ฒ์ ๊ฐ๋ฐ์๊ฐ ํ๋ก๊ทธ๋๋ฐ ํ ๋์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์์๊ฒ ์ ์ ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ์์ฐ์ ๋๋ค.
@dsherret ์๋์ Architecture astronauts
๊ถํ์ ๋ถ์ฌํ๋ ์์์ ์ ์ฝ ์กฐ๊ฑด์
๋๋ค. : -1 :
@jbondc ์ด "๊ฑด์ถ ์ฐ์ฃผ ๋นํ์ฌ"๊ฐ ํฉ๋ฆฌ์ ์ธ ์ฃผ์ฅ์ ๋๊น? ์ด ๊ธฐ๋ฅ์ ์ํ๋ ์ฌ๋๋ค์ ๋ถ์พํ๊ฒํ๊ฑฐ๋ ์นญ์ฐฌํ๋ ค๊ณ ํฉ๋๊น?
@jbondc "๊ฑด์ถ ์ฐ์ฃผ ๋นํ์ฌ"๋ผ๋ ์ฉ์ด๊ฐ ์ฌ๊ธฐ์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ์ํคํ ์ฒ์ ๋ํด ์๊ฐ ํ๋ ๋ฐ
๋ํ ์ฝ๋์ ์ค์ฉ์ ๋ฐฉ์ง ํ ์ ์๊ธฐ ๋๋ฌธ์ "์์"๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์๋ง๋ ๋๋ ๋ ์์ ์ด๋ ์ฐ๋ฆฌ ํ์ด ์์ฑ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋์ ์ ์ ๋ฉ์๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๊ธ ํค์ ๊ฐ์ ๋ก ์ฌ์ฉํ๋๋ก ์๊ธฐ์ํค๊ณ ์ถ์ ๊ฒ์ ๋๋ค. ๋น ๋ฅด๊ณ ๊ฐ๋จํ๋ฉฐ ์ปดํ์ผ๋ฌ๋ก๋ถํฐ ์ ์ ํ ํผ๋๋ฐฑ์๋ฐ์ต๋๋ค. ๊ทธ๊ฒ์ด ์์์ ์ด๋ผ๋ฉด ์ธ์ด์ ๋ง์ ์ธก๋ฉด์ด ์์์ ์ด๋ผ๊ณ ์ฃผ์ฅ ํ ์ ์์ต๋๋ค. ์๊ฒฌ์ ํํํ์ง ์์ ๊ฒ์ด ์์์ ์ด๋ผ๋ ์ ์ ๋ํด ๋ ๋ง์ด ๋งํ ํ์๊ฐ ์์ต๋๊น?
์ด๊ฒ์ ์ฌ๋๋ค์ด ์ซ์ดํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๊ฐ๋จํ ์ธ์ด ๊ธฐ๋ฅ์ ๋๋ค.
@dsherret ๋ค๋ฅธ ์ ์ฝ์ ์ ์ฉํ๋ ๋์ ๋ฌธ์ํํ๊ธฐ์ ์ถฉ๋ถํ์ง ์์ต๋๊น?
๋ค์ค ์์์ ์๋นํ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค. # 4805๋ฅผ ์ฐธ์กฐํ์ญ์์ค (์ง๊ธ ๋น์ฅ์ ๋์ค์ ์๊ฐํ ๊ฒ ๊ฐ์ต๋๋ค). ๋๋ ์ด๋ฏธ # 3578์์ ๋ด ์๊ฐ์ ์ผ๋ถ๋ฅผ ํํ ํ์ผ๋ฏ๋ก ๋ค์๋ ๊ทธ๊ฒ์ ๊ท์ฐฎ๊ฒํ์ง ์์ ๊ฒ์
๋๋ค. astronaut
๋ก ์ฝ๊ฐ ๊ฐํ๊ฒ ๋์์ผ๋, ๋๊ตฌ์๊ฒ๋ ๊ธฐ๋ถ์ ์ํ๊ฒํ์ง ๋ง์ญ์์ค.
๊ฐ์ธ ์์ฑ์๊ฐ์๋ @jbondc ํด๋์ค๋ ์์ ๋ ์ ์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ณธ์ง์ ์ผ๋ก ๋ด์ธ๋์ด ์์ผ๋ฏ๋ก ๋ค์ค ์์์ ๋งํ ๊ฒ๋์๊ณ ์์๋ ์ด๊ฒ๊ณผ ํจ๊ป ์๋ํด์๋ ์๋ฉ๋๋ค.
์ฝ๋๋ฅผ ์ธ๋ถ ์ ์ผ๋ก ์์ฑํ๊ฑฐ๋ ์ฃผ์์ผ๋ก ์์ฑํ๋ ๊ฒ๋ณด๋ค ์์ฒด ๋ฌธ์ํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ์ข์ต๋๋ค. ์ด๊ฒ์ด ์ ๊ฐ TypeScript์ ๋ชจ๋ ์ ํ ์ฌํญ์ ์ข์ํ๋ ์ด์ ์ค ํ๋์ด๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก์ด ๊ธฐ๋ฅ์์ ์ฐ๋ฆฌ๊ฐ ์๊ตฌํ๋ ๊ฒ์ ์ธ์ด ์์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋ฌธ์ํํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋๋ค.
์ฌ๊ธฐ์ ์์ ๋ฅผ ์์ฑํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
module Currency {
export enum Type {
CAD = 1.3,
USD = 1,
}
class PrivateCurrency {
constructor(private value: number, private type: Type) { }
}
export function fromNumberAndType(value: number, type: Type) {
return new PrivateCurrency(value, type);
}
export function fromString(str: string) {
let value = 10;
let type = Type.CAD;
return new PrivateCurrency (value, type);
}
}
๋ OO-ish์ด์ง๋ง ์ค์ ๋ก '์ง์ง'์ค์ ๊ฐ์ธ ์์ ์ด ์์ต๋๋ค.
@jbondc ๊ฐ์ธ ์์ ์์ํ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์ (๊ฐ์ธ ์์ฑ์๊ฐ์๋ ๋ด๋ณด๋ด๊ธฐ ๊ฐ๋ฅํ ํด๋์ค)์ ์ฌ์ฉํ๋๋กํฉ๋๋ค. ์ด์ ๊ทธ๋ฃน A์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๊ณ ๊ทธ๋ฃน B ์์ ์ ๋ฐฉํดํ์ง ์๋ ๊ธฐ๋ฅ์ด ์์์ ํ์ธํ ์ ์์ต๋๋ค. :)
+1
+1
์ฌ์ ํ ๋ ์ด๋์ ์์ต๋๊น? ํ๋ณด๋ ์ ๋ง ์ค๋๋์์ต๋๋ค!
+1
+1
+1
: +1 : ํฉํ ๋ฆฌ ๋์์ธ ํจํด์ ์ ์ฉ ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ณต๋๊ฑฐ๋ ํํฐ์ ๋ฆ๋ ๊ฒฝ์ฐ ์ฌ๊ณผํ์ง๋ง ๊ฐ์ธ ์์ฑ์๋ฅผ ์ป๊ธฐ ์ํด ๋ค์ ํจํด์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
interface ExampleBuilder {
Instance(): Example;
}
export interface Example {
Val(): number;
}
export let Example: ExampleBuilder = class ExampleImpl {
constructor(v: number) {
}
Val(): number {
return 42;
}
static Instance(): Example {
return new ExampleImpl(2);
}
};
let x = Example.Instance(); // OK: x has type Example
let y = new Example(5); // ERROR: Cannot use 'new' with an expression whose type lacks a call or construct signature.
์ต๊ทผ์ ๋ณํฉ ๋ readonly
์์ ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ง์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
@myitcv ์ง๊ธ์ ๊ทธ๊ฒ์ ์ํํ๊ธฐ์ ๊ฝค ๋ฉ์ง๋ค ... ์๋ง๋ ๋ด ์๊ฐ์ ์ธ๊ธ ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋๋ ์ฌ์ ํ ๋๋ฌด ์ฅํฉํ๊ณ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํดํ๋ ๋ฐ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋ฏ๋ก ์ก์ธ์ค ์์ ์๊ฐ ์์ฑ์์์ ์ฌ์ ํ ๋งค์ฐ ์ข์ ๊ฒ์ ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก, ๋๋ ์์ฑ์๋ฅผ ํธ์ถํ์ง ์๊ณ // todo: make private once supported
์ฃผ์์ผ๋ก ๋ฏธ๋์ ๋ชจ๋ ๊ฐ์ธ ์์ฑ์๋ฅผ ํ์ํ๊ณ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ด ์ ๊ณต๋๋ฉด ์ก์ธ์ค ์์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ถ ์ํ ๋ฐ ๋ ๋์ ๋ฌธ์ํ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋ฟก๋ฟก
๊ทธ๋๋ ์ฌ์ ํ ๋๋ฌด ์ฅํฉํ๊ณ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํดํ๋ ๋ฐ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
๋์ํฉ๋๋ค. ์ด๋ฌํ ํด๋์ค๋ ์ฝ๋๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์์ธ์ง ๋ถํ๋ก ์ธํด ํฐ ๊ณ ํต์๋ฐ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋จธ์ ๋ํ ์ธํฐํ์ด์ค๋ ์ค์ ๋ก ํ๋ฅญํ๊ณ ๊ฐ๋จํฉ๋๋ค.
https://github.com/Microsoft/TypeScript/pull/6885์ ์ํด ์์ ๋์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค @AbubakerB!
์๋
ํ์ธ์,์ด ๊ธฐ๋ฅ์ ํฅํ ๋ฒ์ ์ typescript์์ ์ถ์ ๋ ์์ ์
๋๊น?
ํ์ฌ ๊ฐ์ธ ๋๋ ๋ณดํธ ์์ฑ์๋ฅผ ์ ์ธํ๋ ค๊ณ ํ๋ฉด typescript 1.8.10์์์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ค๋ฅ TS1089 : 'private'์์ ์๋ ์์ฑ์ ์ ์ธ์ ๋ํ๋ ์ ์์ต๋๋ค.
์, ์ ๊ฒฝ ์ฐ์ง ๋ง. ์ด ๊ธฐ๋ฅ์ด typescript 2.0์ ํฌํจ๋ ๊ฒ์ด๋ผ๋ ๋ก๋๋งต์ ๋ฐฉ๊ธ ๋ฐ๊ฒฌํ์ต๋๋ค.
์, ์ ๊ฒฝ ์ฐ์ง ๋ง. ์ด ๊ธฐ๋ฅ์ด typescript 2.0์ ํฌํจ๋ ๊ฒ์ด๋ผ๋ ๋ก๋๋งต์ ๋ฐฉ๊ธ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋ํ ๋ง์ผ์คํค์ด TypeScript 2.0
๋ก ์ค์ ๋๊ณ ๋ ์ด๋ธ Fixed
๋ ํฌํจ๋์์์ ๋ํ๋
๋๋ค. ๋ ์ด๋ธ์ด Fixed
์ผ๋ฐ์ ์ผ๋ก ๋ง์คํฐ์ ํฌํจ๋๋ฉฐ npm install typescript@next
๋ฅผ ํตํด ์ฌ์ฉํ ์ ์์ต๋๋ค.
TypeScript 2.0.2 RC๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ private
์์ฑ์๋ฅผ ๋ง๋ค๋ ค๊ณ ํ ๋ ์ฌ์ ํ TS1089๋ฅผ ์ป์ต๋๋ค. ๋ด๊ฐ ์๋ชปํ๊ณ ์์ต๋๊น? ์๋๋ฉด ๋จ์ํ ์์ ๋์ง ์์์ต๋๊น?
TypeScript 2.0.2 RC๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๊ฐ์ธ ์์ฑ์๋ฅผ ๋ง๋ค๋ ค๊ณ ํ ๋ ์ฌ์ ํ TS1089๋ฅผ ์ป์ต๋๋ค. ๋ด๊ฐ ์๋ชปํ๊ณ ์์ต๋๊น? ์๋๋ฉด ๋จ์ํ ์์ ๋์ง ์์์ต๋๊น?
๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์ผํ๊ณ ์์ต๋๋ค. ๋ช ๋ น ๋ณ์นญ์ด ์ฌ๋ฐ๋ฅธ ๋ฒ์ ์ ๊ฐ๋ฆฌํค๊ณ ์๋์ง, ํธ์ง๊ธฐ๊ฐ ์ต์ TS ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ์ ๋ฐ์ดํธ๋์๋์ง ํ์ธํ์ญ์์ค.
๋๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ค. ๊ทธ๊ฒ์์ ์๋ชป gulp-typescript
์ ์๋ชป๋ ๋ฒ์ ์ฌ์ฉ ๋ tsc
๋ด ์ฌ์์๋ ๋ถ๊ตฌํ๊ณ package.json
์ ๋ฌด์์ ํด๊ฒฐ ๋ PATH
.
์ด ๋ฌธ์ ๊ฐ์๋ ๋ค๋ฅธ ์ฌ๋์ ์ํด ๋ด ํด๊ฒฐ์ฑ
์ gulpfile.js
๋ฅผ ํธ์งํ๋ ๊ฒ์ด ์์ต๋๋ค.
require
TypeScript :// Tool-Chain: Scripts
var tsc = require("typescript");
var typescript = require('gulp-typescript');
// Task(s): Build TypeScript Outputs
var tsconfig = typescript.createProject("path to tsconfig", { typescript: tsc });
gulp.task('build:scripts', function () {
let ts = tsconfig.src()
.pipe(sourcemaps.init())
.pipe(typescript(tsconfig));
return ts.js.pipe(sourcemaps.write(".")).pipe(gulp.dest(path.join(outputs.root, outputs.scripts)))
});
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํด๋์ค์ ๊ฐ์ธ ํจ์์๋ ๋๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ธ ์์ฑ์์ ์ก์ธ์ค ํ ๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋ ์ด์ ๋ฅผ ์ ์ ์์ต๋๋ค.