<์ ์ฐจ์งํฅ์ ์ปคํผ๋จธ์ ์ค๊ณ>
type CoffeeCup = {
shots: number;
hasMilk: boolean;
};
const BEANS_GRAMM_PER_SHOT: number = 7;
let coffeeBeans: number = 0;
function makeCoffee(shots: number): CoffeeCup {
if (coffeeBeans < shots * BEANS_GRAMM_PER_SHOT) {
throw new Error("Not enough coffee beans!");
}
coffeeBeans -= shots * BEANS_GRAMM_PER_SHOT;
return {
shots,
hasMilk: false,
};
}
function addCoffeeBeans(shots: number) {
coffeeBeans = coffeeBeans += BEANS_GRAMM_PER_SHOT * shots;
}
addCoffeeBeans(2);
let coffee = makeCoffee(2);
console.log(coffee);
console.log("๋จ์ ์ปคํผ์ฝฉ: " + coffeeBeans + "๊ฐ");
<๊ฐ์ฒด์งํฅ์ ์ปคํผ๋จธ์ ์ค๊ณ>
- ์ปคํผ๋จธ์ ํด๋์ค ํ์ (ํ๋กํผํฐ: ์ปคํผ๋น์ฆ, ํจ์: makeCoffee)
- ํด๋์ค ์ ํ๋กํผํฐ์๋ let, const, function ํค์๋ ๋ถํ์
- ํด๋์ค ๋ฐ๋ก ์์ ์๋ ๋ฉค๋ฒ ๋ณ์์ ์ ๊ทผํ ๋๋ this.
- ํด๋์ค์ construtor๋ ์ธ์ ๋ ์์ด์ผ ํ๋ค. ํด๋์ค๋ก ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋, ํญ์ ํธ์ถ๋๋ ํจ์์ด๋ค.
const coffeeMaker = new coffeeMachine(); //์ด ๊ดํธ๊ฐ ๋ฐ๋ก ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ฒ.
<์์1>
type CoffeeCup = {
shots: number;
hasMilk: boolean;
};
class coffeeMachine {
BEANS_GRAMM_PER_SHOT: number = 7;
coffeeBeans: number = 0;
constructor() {
//
}
makeCoffee(shots: number): CoffeeCup {
if (this.coffeeBeans < shots * this.BEANS_GRAMM_PER_SHOT) {
throw new Error("Not enough coffee beans!");
}
this.coffeeBeans -= shots * this.BEANS_GRAMM_PER_SHOT;
return {
shots,
hasMilk: false,
};
}
addCoffeeBeans(shots: number) {
this.coffeeBeans += this.BEANS_GRAMM_PER_SHOT * shots;
}
}
const coffeeMaker = new coffeeMachine();
console.log(coffeeMaker); //coffeeMachine { BEANS_GRAMM_PER_SHOT: 7, coffeeBeans: 24 }
coffeeMaker.addCoffeeBeans(2);
let order1 = coffeeMaker.makeCoffee(2);
console.log(order1); //{ shots: 2, hasMilk: false }
let order2 = coffeeMaker.makeCoffee(2);
console.log(order2); //Error: Not enough coffee beans!
<์์2>
type CoffeeCup = {
shots: number;
hasMilk: boolean;
};
class coffeeMachine {
BEANS_GRAMM_PER_SHOT: number = 7;
coffeeBeans: number = 0;
constructor(coffeeBeans: number) {
this.coffeeBeans = coffeeBeans;
}
makeCoffee(shots: number): CoffeeCup {
if (this.coffeeBeans < shots * this.BEANS_GRAMM_PER_SHOT) {
throw new Error("Not enough coffee beans!");
}
this.coffeeBeans -= shots * this.BEANS_GRAMM_PER_SHOT;
return {
shots,
hasMilk: false,
};
}
addCoffeeBeans(shots: number) {
this.coffeeBeans += this.BEANS_GRAMM_PER_SHOT * shots;
}
}
const coffeeMaker = new coffeeMachine(24);
console.log(coffeeMaker); //coffeeMachine { BEANS_GRAMM_PER_SHOT: 7, coffeeBeans: 24 }
let order1 = coffeeMaker.makeCoffee(2);
console.log(order1); //{ shots: 2, hasMilk: false }
let order2 = coffeeMaker.makeCoffee(2);
console.log(order2); //Error: Not enough coffee beans!
๊ทธ๋ฐ๋ฐ, ์์ ์์๋ค์ ๋ฐ๋ฅด๋ฉด
BEANS_GRAMM_PER_SHOT: number = 7; //ํด๋์ค ๋ด์์ ๋ณ์น์์ ๊ณ ์ ๊ฐ
ํด๋์ค ๋ด๋ถ์ ๋ณ์น์์ ๊ณ ์ ๊ฐ์ด ์๋๋ฐ, ์ด๋ฌํ ๊ฒ๋ค์ ๋ฉค๋ฒ ๋ณ์๋ก ์์ฑํ๊ฒ ๋๋ฉด
ํด๋์ค๋ฅผ ์ด์ฉํด์ ์ฐ์ด๋ด๋ ์ค๋ธ์ ํธ๋ง๋ค ์ฌ๋ฌ ํด๋์ค๋ฅผ ์ฐ์ด๋ผ ๋๋ง๋ค ๋๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ค๋ณตํด์ ๋ค์ด๊ฐ๊ฒ ๋๋ ์ ์ด๋ค.
<์์>
console.log(coffeeMaker1); //coffeeMachine { BEANS_GRAMM_PER_SHOT: 7, coffeeBeans: 24 }
console.log(coffeeMaker2); //coffeeMachine { BEANS_GRAMM_PER_SHOT: 7, coffeeBeans: 32 }
console.log(coffeeMaker3); //coffeeMachine { BEANS_GRAMM_PER_SHOT: 7, coffeeBeans: 7 }
์ด์ฒ๋ผ ํด๋์ค์์ ํ๋ฒ ์ ์๋์ด ์ง๊ณ , ํด๋์ค๋ฅผ ์ด์ฉํ ์ค๋ธ์ ํธ ์ฌ์ด์์ ๋ค... ๊ณต์ ๊ฐ ๋ ์ ์๋ ํ๋กํผํฐ๋ ํ๋ฒํ ๋ฉค๋ฒ ๋ณ์๋ก ๋๊ฒ๋๋ฉด ์ค๋ธ์ ํธ๋ฅผ ์ฐ์ด๋ผ ๋๋ง๋ค ์ค๋ณต์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ๋ค.
์ด๋ด ๋, static ํค์๋๋ฅผ ๋ถ์ด๊ฒ ๋๋ฉด class level๋ก ์ง์ ๋๋ค. (ํด๋์ค level์ด๋ผ๊ณ ํ๋ ๊ฒ์ ํด๋์ค์ ์ฐ๊ฒฐ์ด ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ค๋ธ์ ํธ๋ง๋ค ์์ฑ๋์ง ์๋๋ค~) ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ๋ค์ ์ฌ์ฉํ ๋๋ this.(์ค๋ธ์ ํธ ๋ ๋ฒจ) ์ด ์๋๋ผ ํด๋์ค ๋ ๋ฒจ์ ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ this.๋ฅผ ์ฐ์ง ์๊ณ ๋์ ์ ํด๋์ค์ด๋ฆ. ์ ์ด๋ค.
(static ํค์๋๋ฅผ ๋ถ์ด์ง ์์ผ๋ฉด inctance(object) level๋ก ์ง์ ๋๋ค.)
type CoffeeCup = {
shots: number;
hasMilk: boolean;
};
class coffeeMachine {
static BEANS_GRAMM_PER_SHOT: number = 7;
coffeeBeans: number = 0;
constructor(coffeeBeans: number) {
this.coffeeBeans = 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) {
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: 24 }
console.log(coffeeMaker2); //coffeeMachine { coffeeBeans: 32 }
console.log(coffeeMaker3); //coffeeMachine { coffeeBeans: 7 }
์ฆ, coffeeMachine.BEANS_GRAMM_PER_SHOT ๋ผ๊ณ ์ง์ ํด์ค์ผ๋ก์จ,
ํด๋์ค๋จ์ ์๋ BEANS_GRAMM_PER_SHOT์ ์ ๊ทผํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
console.log(coffeeMaker1); //coffeeMachine { coffeeBeans: 24 }
console.log(coffeeMaker2); //coffeeMachine { coffeeBeans: 32 }
console.log(coffeeMaker3); //coffeeMachine { coffeeBeans: 7 }
๊ทธ๋์ ์ฝ์๋ก๊ทธ๋ฅผ ์ดํด๋ณด๋ฉด BEANS_GRAMM_PER_SHOT: 7๋ผ๋ ๋ฐ์ดํฐ๊ฐ ๋์ด์ ์ค๋ณต ์์ฑ๋์ง ์๋๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด์ฒ๋ผ ํด๋์ค๋ ๊ด๋ จ๋ ์์ฑ๋ค๊ณผ ํจ์๋ค์ ๋ฌถ์ด์ ์ด๋ค ๋ชจ์์ ๋ฐ์ดํฐ๊ฐ ๋ ๊ฒ์ธ์ง ์ ์ํ๋ ๊ฒ์ด๋ค.
์ด ์ ์๋ ํด๋์ค๋ฅผ ํตํด ์ธ์คํด์ค(๊ฐ์ฒด)๋ฅผ ์ฐ์ด๋ผ ์ ์๋ค.
์ด๋ ์ค๋ธ์ ํธ๋ง๋ค ๋ฌ๋ผ์ง ๋ณ์๋ค์ ์ค๋ธ์ ํธ๋ ๋ฒจ๋ก,
๊ฐ์ ํด๋์ค ์ถ์ ์ด๋ฉด ๋ณ์น์๊ณ ๊ณตํต๋ ๋ณ์๋ค์ ํด๋์ค๋ ๋ฒจ(static ํค์๋ ๋ถ์ฌ์ฃผ๊ธฐ)๋ก ์ค์ ํด์ค ์ ์๋ค.
์ด๋ฌํ static ํค์๋๋ ๋ฉค๋ฒ ๋ณ์ ๋ฟ๋ง์ด ์๋๋ผ ํจ์์์๋ ์ ์ฉ๋๋ค.
type CoffeeCup = {
shots: number;
hasMilk: boolean;
};
class coffeeMachine {
static BEANS_GRAMM_PER_SHOT: number = 7;
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) {
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: 24 }
console.log(coffeeMaker2); //coffeeMachine { coffeeBeans: 32 }
console.log(coffeeMaker3); //coffeeMachine { coffeeBeans: 7 }
console.log(coffeeMachine.makeMachine(2)); //coffeeMachine { coffeeBeans: 2 }
<๋๋ณด๊ธฐ>
constructor์ ํธ์ถํ์ง ์๊ณ ์ปคํผ๊ธฐ๊ณ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด,
static makeMachine(coffeeBeans: number): coffeeMachine {
return new coffeeMachine(coffeeBeans);
}
console.log(coffeeMachine.makeMachine(2)); //coffeeMachine { coffeeBeans: 2 }
์์ ๊ฐ์ ํจ์๋ค์ ํด๋์ค ๋ด๋ถ์ ์ด๋ ํ ์์ฑ๊ฐ๋ ํ์์น์๊ธฐ ๋๋ฌธ์ static์ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ธ๋ถ์์๋ ํด๋์ค๋ฅผ ๋ง๋ค์ง ์๊ณ
coffeeMachine.makeMachine(2)
์ด์ฒ๋ผ ํด๋์ค ๋จ์์ ํธ์ถํ์ฌ ๊ฐ๋จํ๊ฒ ์ปคํผ๋จธ์ ์ ๋ง๋ค ์ ์๊ฒ ๋๋ค.
static ํค์๋๊ฐ ์์ผ๋ฉด ๋น์ฐํ ํด๋์ค ๋จ์์ ํธ์ถํ ์๊ณ ์ฐ์ด ๋ง๋ ์ค๋ธ์ ํธ ๋จ์์ ํธ์ถํด์ผํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ Math ํด๋์ค๊ฐ ์ข์ ์์์ด๋ค.
const math = new Math(); ๋ผ๊ณ ๊ตณ์ด ์ฐ์ด๋ด์ง ์๊ณ
๋ฐ๋ก
Maht.abs๋ผ๊ณ ๋ถ๋ฅผ ์ ์๋ ์ด์ ๋ ํด๋์ค ๋จ(๋ ๋ฒจ)์ด๊ธฐ ๋๋ฌธ์ด๋ผ๋ ๊ฒ์ ์ ์ถํ ์ ์๋ค.
<์ต์ข ์ฝ๋>
๊ทธ๋ฌ๋ ์ด ์ฝ๋์์ ํด๋์ค๋ ์์ง
type CoffeeCup = {
shots: number;
hasMilk: boolean;
};
class coffeeMachine {
static BEANS_GRAMM_PER_SHOT: number = 7;
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) {
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: 24 }
console.log(coffeeMaker2); //coffeeMachine { coffeeBeans: 32 }
console.log(coffeeMaker3); //coffeeMachine { coffeeBeans: 7 }
const coffeeMaker4 = coffeeMachine.makeMachine(2);
console.log(coffeeMaker4); //coffeeMachine { coffeeBeans: 2 }
์บก์ํ๊ฐ ๋์ด ์์ง ์๋ค.
const coffeeMaker1 = new coffeeMachine(24);
coffeeMaker1.coffeeBeans = -1000;
console.log(coffeeMaker1); //coffeeMachine { coffeeBeans: -1000 }
์์ ๋ณด์ด๋ค์ถ์ด, ํด๋์ค ์ธ๋ถ์ ์ฐ์ด๋ธ ์ค๋ธ์ ํธ ๋จ์์ ํด๋น ์ค๋ธ์ ํธ ๋ด๋ถ ๋ณ์๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
-1000์ด๋ผ๋ ์ด์ํ ๊ฐ์ ๋ฃ์ด๋ ์ ์ฝ์ฌํญ์ด ์์ด์ ๋ณ๊ฒฝ์ด ๊ทธ๋๋ ์ ์ฉ๋ ๋ชจ์ต.
์ด์ฒ๋ผ ์ธ๋ถ์์ ๋์ ์ค๋ธ์ ํธ ์ํ๋ฅผ ์ ํจํ์ง ์์ ์ํ๋ก ๋ง๋ค์ด๋ฒ๋ฆฐ ์ํํ ์ํฉ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก, ์บก์ํ๋ฅผ ํตํด์ ์ธ๋ถ์์ ์๋ก ์ฐ๋ ๊ฒ์ ๋ง์์ฃผ์ด์ผ๋ง ํ๋ค.
//private,
//private,
//protected
๋ฑ์ ํค์๋๋ค์ ์ด์ฉํด์ ๋ค์ํ ๋ ๋ฒจ์ ์ ๋ณด๋ค์ ์๋ํํ ์ ์๋ค.
์ด๋ฌํ ์บก์ํ, ์๋ํ ์ฒ๋ฆฌ๋ ๋ค์ ํฌ์คํ ์์ ๋ค๋ฃจ๋๋ก ํ๋ค.
'TypeScript > ํ์ ์คํฌ๋ฆฝํธ TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ์ ์คํฌ๋ฆฝํธ] class์ getter์ setter (0) | 2022.04.18 |
|---|---|
| [ํ์ ์คํฌ๋ฆฝํธ] ๊ฐ์ฒด์งํฅ์ ์ปคํผ๋จธ์ ๋ง๋ค๊ธฐ : encapsulation (0) | 2022.04.18 |
| [ํ์ ์คํฌ๋ฆฝํธ ์ ์ฉ ์์] ๊ฐ์ฒด์งํฅ 4๊ฐ์ง ์์น (0) | 2022.04.17 |
| ํ์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ์ํ ํ์ ์์ (0) | 2022.04.17 |
| ํ์ ์คํฌ๋ฆฝํธ ์ขํ ์ด๋ ์์ (0) | 2022.04.17 |