[TypeScript] class type
- -
๐ฃ ๋ค์ด๊ฐ๊ธฐ ์ ์!
์ด๋ฒ ์๊ฐ์๋ class ํ์ ์ ๋ํด ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋น!_! ๋น์ฐํ ๋ง์ด์ง๋ง class๋ ํ์ ์ด ์กด์ฌํ๋ค. ํน์ฌ class์ ๋ํด์ ๊ฐ๋ ํ ์ ์๊ฐ ์๋๋ค๋ฉด object ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ๋ ์ด๋ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋ผ class type๋ ๊ผฌ์ฐ๊ผฌ์ฐ!
๐ฃ class type
1. class field ํด๋์ค ํ๋๊ฐ
class์ object๋ค์ด ์ฌ์ฉํ ์ ์๋ ๊ฒ๋ค์ ๋ง๋ค ์ ์๋๋ฐ, ์๋์ฒ๋ผ ํ์ ์ ์ง์ ํ ์ ์์.
class์ ํ๋ ํ์ ์ ์ง์ ํ ์๋ ์๊ณ , ์ง์ ํ์ง ์์๋ ์๋์ผ๋ก ํ์ ์ด ์ง์ ๋จ.
์ผ๋ฐ ๋ณ์์ฒ๋ผ ํ์ ์ง์ ํด์ฃผ๋ฉด ๋จ
class Person2{
data = 0; // class ํ๋๊ฐ(constructor์ ๋๊ฐ์ ์ญํ ) / ์์๋คํํ
์ ์ถ๋ ฅ๊ฐ๋ฅ (์ฌ๋1.data ์ถ๋ ฅ ๊ฐ๋ฅ)
data1: number = 0; // class ํ๋ ํ์
์ง์ ๊ฐ๋ฅ(์์์ฒ๋ผ ์ํด๋ number๋ก ์๋ ํ์
์ง์ ๋๊ธฐ๋ ํจ)
}
let ์ฌ๋1 = new Person2();
console.log(์ฌ๋1.data)
2. class constructor type
class๋ object๋ฅผ ๋ณต์ ํ๋ ์ด๋ ํ ๊ฒ์ด๋ผ๊ณ ํ๋๋ฐ, ES6๋ถํฐ๋ constructor ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ.
๋ค์ ์ฝ๋์์ type error๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ this๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด์ ์ field ๊ฐ์ ๋ฏธ๋ฆฌ ์ค์ ํด์ผํ๊ธฐ ๋๋ฌธ.
class Person3{
constructor() {
// this.name = "ham"; //๊ทธ๋ฅ this.nameํ๋ฉด name์ property๊ฐ ์๋ค๊ณ ๋์ด
}
}
field ๊ฐ ์ง์ ์ ๋ค์๊ณผ ๊ฐ์ด 1๋ฒ์์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณ์ ์ค์ ํ๋ฏ ๋ฏธ๋ฆฌ ์ค์ ํด๋๋ฉด ๋จ.
์ด๋ ๊ฒ constructor ์์์ ์ฌ์ฉํ๋ this ๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด field ๊ฐ์ ๋ฏธ๋ฆฌ ์ง์ ์ ํด๋์ผ ํจ!_!
class Person4{
name: string; //ํ๋๊ฐ์ ๋ฏธ๋ฆฌ ์ง์ ํด๋์ผ ๋ฐ์์ this.name ์ฌ์ฉ๊ฐ๋ฅ
constructor() {
this.name = "ham" // constructor ์์์ ๋ฏธ๋ฆฌ name ํ๋๊ฐ ์ ํ๊ธฐ์, this.name ์ฌ์ฉ ๊ฐ๋ฅ
}
}
์ด์ this.name ์ฌ์ฉ ๊ฐ๋!!!
ํ๋ผ๋ฏธํฐ๋?
์ฐธ๊ณ ๋ก ์ด์ constructor ํ๋ผ๋ฏธํฐ๋ ํ์ ์ง์ ์ด ๊ฐ๋ฅํ๋ฐ, ์๋ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ํ ๋ ์๋์ฒ๋ผ ํ๋ฉด ๋จ. return ํ์ ์ ์ง์ ํ ํ์๋ ์์. ์๋ ์๋จ. ์๋ํ๋ฉด constructor์ ๋ณต์ ๋๋ ๊ฒ์ด ํญ์ object ์ด๊ธฐ ๋๋ฌธ.
// constructor ํ๋ผ๋ฏธํฐ ํ์
์ง์ ๊ฐ๋ฅ
class Person5{
name: string;
constructor(a : string) { //ํ๋ผ๋ฏธํฐ ํ์
์ง์ / return ํ์
๋ ์ง์ ? => ๋ณต์ ๋๋๊ฒ ํญ์ object์ด๊ธฐ์ return ํ์
์ง์ ํ ์ด์ ๋ ์์
this.name = a;
}
}
let ์ฌ๋2 = new Person5("ham");
let ์ฌ๋3 = new Person5("hailey");
console.log(์ฌ๋2.name);
console.log(์ฌ๋3.name);
// ๋น์ฐํ ํจ์ ๊ด๋ จ ํ๋ผ๋ฏธํฐ ๋ชจ๋ ๊ฐ๋ฅ
// rest parameter, default parameter ๋ฑ ๊ฐ๋ฅ
3. prototype ํจ์ ์ด๋์? methods type
class์๋ prototype์ ์ถ๊ฐํ ์ ์์. prototype์ class ๋ด๋ถ์ ํจ์๋ฅผ ์ ๋ ฅํ ์ ์๋๊ฑด๋ฐ, ํจ์๋ช () {} ์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์์.
์๋ ์ฝ๋๋ก ์ดํด๋ณด๋ฉด, person6๋ผ๋ class์ ํจ์(){}๋ผ๋ prototype์ ์ถ๊ฐํ์. ์ฌ๋4๋ผ๋ ๋ณ์๊ฐ person6 class๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ์ฌ๋4(person6์ ์์ ๊ฐ๋ )์ ํจ์๋ฅผ ํธ์ถ ๊ฐ๋ฅํจ(๋ฉ์๋๋ฅผ ์์๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ person6์ ํ๋กํ ํ์ ์ ์ ์๋ ํจ์๋ฅผ ํธ์ถ ๊ฐ๋ฅํ ๊ฒ)
์ฐธ๊ณ ๋ก ํ๋กํ ํ์ ์ ํจ์๋ ํจ์์ ํ์ ์ง์ ๊ณผ ๊ฐ์ด ํ๋ผ๋ฏธํฐ์ return ํ์ ์ง์ ์ด ๊ฐ๋ฅํจ.
class Person6{
name: string;
constructor(a:string) {
this.name = a;
}
ํจ์(a: string) { // ํ๋กํ ํ์
ํจ์ ์ถ๊ฐ ์ด๊ณณ์ / ํ๋กํ ํ์
ํ๋ผ๋ฏธํฐ ํ์
์ง์ ๊ฐ๋ฅ / ๋ชจ๋ ์์๋ค์ ์ฌ์ฉ ๊ฐ๋ฅ
// ํจ์๋ ๋๊ฐ์ด ํ๋ผ๋ฏธํฐ & retrun ํ์
์ง์ ๊ฐ๋ฅ
console.log("์๋
~! " + a);
return "a"
}
}
// Person6.prototype.ํจ์๋ค = function(){} //์ฌ๊ธฐ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์์ constructor ๋ฐ์๋ค๊ฐ ์ถ๊ฐํ๋ฉด ๋จ
let ์ฌ๋4 = new Person6("toto");
์ฌ๋4.ํจ์("๋ฐ๊ฐ์ ํ ํ "); // ์ฌ๋4์์ Person6์ ํ๋กํ ํ์
์ถ๋ ฅ ๊ฐ๋ฅ
4. Quiz 1
[Car ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ]
1. { model : '์๋ํ', price : 3000 } ์ด๋ ๊ฒ ์๊ธด object๋ฅผ ๋ณต์ฌํด์ฃผ๋ class๋ฅผ ๋ง๋ค์ด๋ณด์ญ์์ค.
2. ๊ทธ๋ฆฌ๊ณ ๋ณต์ฌ๋ object ์๋ฃ๋ค์ .tax() ๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉ๊ฐ๋ฅํ๋ฐ ํ์ฌ object์ ์ ์ฅ๋ price์ 10๋ถ์1์ ์ถ๋ ฅ.
3. model๊ณผ price ์์ฑ์ ํ์
์ง์ . tax() ํจ์์ return ํ์
.
(๋์ ์์)
```
let car1 = new Car('์๋ํ', 3000)
console.log(car1) //์ฝ์์ฐฝ ์ถ๋ ฅ๊ฒฐ๊ณผ๋ { model : '์๋ํ', price : 3000 }
console.log(car1.tax()) //์ฝ์์ฐฝ ์ถ๋ ฅ๊ฒฐ๊ณผ๋ 300
```
์๋๋ ํ์ด
class Car{
model: string;
price: number;
constructor(model:string, price:number) {
this.model = model;
this.price = price;
}
tax1():number {
return this.price * 0.1
}
tax2(price: number):number {
const tax = price * 0.1
return tax;
}
}
let car1 = new Car('์๋ํ', 3000) // car1์ Car ํด๋์ค์ ์ธ์คํด์ค
console.log(car1); // Car {model: '์๋ํ', price: 3000}
console.log(car1.tax1()); //tax ์๋
console.log(car1.tax2(3000)); //tax๋ฅผ ์ง์ ์ซ์์
๋ ฅํด์ ํ ๋
5. Quiz 2
[class์ธ๋ฐ ํ๋ผ๋ฏธํฐ๊ฐ ๋ค์ด๊ฐ๋ class Word๋ฅผ ๋ง๋ค๊ธฐ]
1. object ๋ง๋ค ๋ new Word() ์๊ดํธ ์์ ์ซ์ ํน์ ๋ฌธ์๋ฅผ ์
๋ ฅํ๋ฉด
2. ์ซ์๋ ์ ๋ถ object ์์ num ์์ฑ ์์ array ํํ๋ก ์ ์ฅ๋๊ณ
3. ๋ฌธ์๋ ์ ๋ถ object ์์ str ์์ฑ ์์ array ํํ๋ก ์ ์ฅ๋๋ class๋ฅผ ๋ง๋ค๊ธฐ
4. class ๋ง๋ค ๋ ๋ฃ์ ์ ์๋ ์ซ์์ ๋ฌธ์ ๊ฐฏ์๋ ์ผ๋จ ์ ํ์ ์๊ณ , ํ์
์ง์
(๋์ ์์)
```
let obj = new Word('kim', 3, 5, 'park');
console.log(obj.num) //[3,5]
console.log(obj.str) //['kim', 'park']
```
์๋๋ ํ์ด
class Word{
num: number[];
str: string[];
constructor(...a: (number | string)[]) {
this.str = [];
this.num = [];
a.forEach((i) => {
if (typeof i === 'string') {
this.str.push(i);
} else if (typeof i === 'number') {
this.num.push(i);
}
})
}
}
let obj = new Word('ham', 3, 5, 'hailey');
console.log(obj.str);
console.log(obj.num);
์๋์ฒ๋ผ๋ ๊ฐ๋ฅ
//์ด๋ ๊ฒ๋ ๊ฐ๋ฅ
class Word{
num: number[];
str: string[];
constructor(...a: (number | string)[]) {
let ๊ธ์ : string[] = [];
let ์ซ์ : number[] = [];
a.forEach((i) => {
if (typeof i === 'string') {
๊ธ์.push(i)
} else{
์ซ์.push(i)
}
})
this.str = ๊ธ์;
this.num = ์ซ์;
}
}
6. ์ฐธ๊ณ : Rest Parameter
ํ๋ผ๋ฏธํฐ ์ฌ๋ฌ๊ฐ๋ฅผ ๋ฐ๊ณ ์ถ์ ๋, rest parameter๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ. ๊ฐ์ฒด ๊ฐ์ผ๋ก ๋ค์ด์ด.
class Word1{
constructor(...a) { // ๊ทธ๋ฅ a๋ก ๋ฐ์ผ๋ฉด ํ๋ผ๋ฏธํฐ ํ๊ฐ๋ง ๋ฐ์('ham')
//Rest ํ๋ผ๋ฏธํฐ(Rest Parameter, ๋๋จธ์ง ๋งค๊ฐ๋ณ์) : ๋งค๊ฐ๋ณ์ ์ด๋ฆ ์์ ์ธ๊ฐ์ ...์ ๋ถ์ฌ์ ์ ์ํ ๋งค๊ฐ๋ณ์. Rest ํ๋ผ๋ฏธํฐ๋ ํจ์์ ์ ๋ฌ๋ ์ธ์๋ค์ ๋ชฉ๋ก์ ๋ฐฐ์ด๋ก ์ ๋ฌ ๋ฐ์
//(4) ['ham', 3, 5, 'hailey'] ์ด๋ ๊ฒ ๋จ
console.log(a)
}
}
let obj1 = new Word1('ham', 3, 5, 'hailey');
์ด๋ ๊ฒ ๋ณด๋ class type๋ ๋ณ ๊ฒ ์๋ค๋ ๊ฒ์ ์ ์ ์์.
์ค์ํ๊ฑด ์ญ์ ์์ ...๋๊ณ ๋์ ๊ฒฐ๊ตญ JS๊ฐ ์ค์ํด!
'FrontEnd > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TypeScript] ๊ฐ์ฒด์ ํ์ interface (0) | 2024.06.20 |
---|---|
[TypeScript] ํจ์์ ํ์ 2ํ!_! (0) | 2024.06.20 |
[TypeScript] Literal Types (0) | 2024.06.20 |
[TypeScript] ํ์ ๋ณ์ type alias (0) | 2024.06.20 |
[TypeScript] ๊ฐ์ฒด์ ํ์ ๊ณผ readonly (0) | 2024.06.20 |
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค