์ด์ ํฌ์คํ ๋งํ์ ์บก์ํ๋ฅผ ํตํด์ ์ปคํผ๋จธ์ ๋ด๋ถ ๋ณ์๊ฐ์ ์ธ๋ถ์์ ์๋ก ์ฐ๋ ๊ฒ์ ๋ง์์ฃผ์ด์ผ ํ๋ ํ์์ฑ์ ๋ํด์ ๊ฐ์กฐํ์๋ค.
//public,
//private,
//protected
๋ฑ์ ํค์๋๋ค์ ์ด์ฉํด์ ๋ค์ํ ๋ ๋ฒจ์ ์ ๋ณด๋ค์ ์๋ํํ ์ ์๋ค.
์บก์ํ๋
๋ด๋ถ์ ์ผ๋ก๋ง ๊ฐ์ ธ์ผ ํ๋ ๊ฐ,
์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ ์์๋ค์ ๋ถ๋ณํด์ฃผ๋ ์์ ์ด๋ค.
type CoffeeCup = {
shots: number;
hasMilk: boolean;
};
class coffeeMachine {
private static BEANS_GRAMM_PER_SHOT: number = 7;
private coffeeBeans: number = 0;
constructor(coffeeBeans: number) {
this.coffeeBeans = coffeeBeans;
}
static makeMachine(coffeeBeans: number): coffeeMachine {
return new coffeeMachine(coffeeBeans);
}
makeCoffee(shots: number): CoffeeCup {
if (this.coffeeBeans < shots * coffeeMachine.BEANS_GRAMM_PER_SHOT) {
throw new Error("Not enough coffee beans!");
}
this.coffeeBeans -= shots * coffeeMachine.BEANS_GRAMM_PER_SHOT;
return {
shots,
hasMilk: false,
};
}
addCoffeeBeans(shots: number) {
if (shots < 0) {
throw new Error("value for shots should be grater than 0");
}
this.coffeeBeans += coffeeMachine.BEANS_GRAMM_PER_SHOT * shots;
}
}
const coffeeMaker1 = new coffeeMachine(24);
const coffeeMaker2 = new coffeeMachine(32);
const coffeeMaker3 = new coffeeMachine(7);
console.log(coffeeMaker1); //coffeeMachine { coffeeBeans: 3 }
console.log(coffeeMaker2); //coffeeMachine { coffeeBeans: 32 }
console.log(coffeeMaker3); //coffeeMachine { coffeeBeans: 7 }
const coffeeMaker4 = coffeeMachine.makeMachine(2);
console.log(coffeeMaker4); //coffeeMachine { coffeeBeans: 2 }
ํ๋์ฉ ์ดํด๋ณด์๋ฉด,
//public : ์ธ๋ถ์์ ๋ณผ ์ ์์, ๊ณต๊ฐ ์ค์ .
//private : ์ธ๋ถ์์ ์ ๋ ๋ณผ ์ ์์, ๋น๊ณต๊ฐ ์ค์
//protected : ์ธ๋ถ์์๋ ์ ๊ทผํ ์ ์์ง๋ง, ํด๋์ค๋ฅผ ์์ํ ์์ ํด๋์ค์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ํ ์ ์๋ค.
+ ์ถ๊ฐ๋ก, ๋ณดํต ์๋์ ๊ฐ์ด
static์ ๋ถ์ฌ์ ๋ฌด์ธ๊ฐ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค ์ ์๋ ํจ์๋ฅผ ์ ๊ณตํ๋ค๋ผ๋ ๊ฒ์
ํ ๊ฐ๋ฐ์๊ฐ ์์ฑ์๋ก ์์ฑํ๋ ๊ฒ์ ๊ธ์งํ๊ธฐ ์ํ ์ฉ๋์ผ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
static makeMachine(coffeeBeans: number): coffeeMachine {
return new coffeeMachine(coffeeBeans);
}
์ด๋ด ๊ฒฝ์ฐ์๋
type CoffeeCup = {
shots: number;
hasMilk: boolean;
};
class coffeeMachine {
private static BEANS_GRAMM_PER_SHOT: number = 7;
protected coffeeBeans: number = 0;
private constructor(coffeeBeans: number) {
this.coffeeBeans = coffeeBeans;
}
static makeMachine(coffeeBeans: number): coffeeMachine {
return new coffeeMachine(coffeeBeans);
}
makeCoffee(shots: number): CoffeeCup {
if (this.coffeeBeans < shots * coffeeMachine.BEANS_GRAMM_PER_SHOT) {
throw new Error("Not enough coffee beans!");
}
this.coffeeBeans -= shots * coffeeMachine.BEANS_GRAMM_PER_SHOT;
return {
shots,
hasMilk: false,
};
}
addCoffeeBeans(shots: number) {
if (shots < 0) {
throw new Error("value for shots should be grater than 0");
}
this.coffeeBeans += coffeeMachine.BEANS_GRAMM_PER_SHOT * shots;
}
}
const coffeeMaker1 = coffeeMachine.makeMachine(21);
const coffeeMaker2 = coffeeMachine.makeMachine(7);
const coffeeMaker3 = coffeeMachine.makeMachine(14);
console.log(coffeeMaker1);
console.log(coffeeMaker2);
console.log(coffeeMaker3);
์์ ๊ฐ์ด ์์ฑํ๊ฒ ๋๋ฉด ํ ๊ฐ๋ฐ์๋ new ()๋ก ์์ฑ์ด ์๋จ, ์ฆ constructor๊ฐ private๋ก ๋งํ๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ณ
ํด๋์ค ๋จ์ผ๋ก ์ ๊ทผ์ ์๋ํ ๋ค์ ๋จ๋ ํจ์ ์ค์์ ํ๋๋ก ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด์ผ ํจ์ ์ถ์ธกํ ์ ์๋ค.
'TypeScript > ํ์ ์คํฌ๋ฆฝํธ TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ ์คํฌ๋ฆฝํธ] this ๊ด๋ จ ์ค๋ฅ (0) | 2022.04.19 |
---|---|
[ํ์ ์คํฌ๋ฆฝํธ] class์ getter์ setter (0) | 2022.04.18 |
[ํ์ ์คํฌ๋ฆฝํธ] ์ ์ฐจ์งํฅ์ ์ปคํผ๋จธ์ vs ๊ฐ์ฒด์งํฅ์ ์ปคํผ๋จธ์ (0) | 2022.04.18 |
[ํ์ ์คํฌ๋ฆฝํธ ์ ์ฉ ์์] ๊ฐ์ฒด์งํฅ 4๊ฐ์ง ์์น (0) | 2022.04.17 |
ํ์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ์ํ ํ์ ์์ (0) | 2022.04.17 |