์๋ฐ์คํฌ๋ฆฝํธ์์์ class ์ฌ์ฉ๋ฒ๊ณผ ๋น์ทํ์ง๋ง,
์๋ฐ์คํฌ๋ฆฝํธ์์์ ์๋ํ#์ ํ์
์คํฌ๋ฆฝํธ์์์ ์๋ํprivate๋ ๋ค๋ฅด๊ณ ,
์๋ฐ์คํฌ๋ฆฝํธ์๋ ์์ง๋ง ํ์
์คํฌ๋ฆฝํธ์์๋ ์๋ ๊ฒ๋ค์ด ์๋ค.
๊ทธ๋์ ์ ๋ฆฌํด ๋ณด๋ typescript์์์ class ์ฌ์ฉ๋ฒ๐จ
class Person {
name: string;
age: number;
constructor(name: string, age:number) {
this.name = name
this.age = age
}
introduce(): string {
return `์ ์ด๋ฆ์ ${this.name}์ด๊ณ , ๋์ด๋ ${this.age}์ด ์
๋๋ค.`
}
}
const a = new Person('taehyung', 29);
console.log(a.introduce()); // "์ ์ด๋ฆ์ taehyung์ด๊ณ , ๋์ด๋ 29์ด ์
๋๋ค."
ํ์ฅ (๋๋ ์์์ด๋ผ ๋ถ๋ฆผ)
class Person {
name: string;
age: number;
constructor(name: string, age:number) {
this.name = name;
this.age = age;
}
introduce(): string {
return `์ ์ด๋ฆ์ ${this.name}์ด๊ณ , ๋์ด๋ ${this.age}์
๋๋ค.`
}
}
class Character extends Person {
nickname: string;
constructor(name: string, age: number, nickname: string) {
super(name, age);
this.nickname = nickname;
}
introduce2(): string {
// ์ด๋ ๊ฒ super๋ก ๋ถ๋ชจ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
return `${super.introduce()} ๋๋ค์์ ${this.nickname}์
๋๋ค.`
}
}
const b = new Character('taehyung', 29, 'TATA');
console.log(b.introduce2()); // "์ ์ด๋ฆ์ taehyung์ด๊ณ , ๋์ด๋ 29์
๋๋ค. ๋๋ค์์ TATA์
๋๋ค."
get
: ์ธ์คํด์ค ๋ณ์์ ๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋
set
: ์ธ์คํด์ค ๋ณ์์ ๊ฐ์ ์ค์ ํ๋ ๋ฉ์๋
class Person {
name: string;
// private์ ์ฌ์ฉํ ๋ _(์ธ๋๋ฐ)๋ฅผ ๋ถ์ด๋ ๊ฒ์ด ์ข๋ค.
// private์ .(์ )์ผ๋ก ์ ๊ทผ์ด ๋ถ๊ฐํ๋ค.
private _age: number;
constructor(name: string, age:number) {
this.name = name;
this._age = age;
}
// ์ฐธ๊ณ ) getter๋ setter๊ฐ ์์ผ๋ฉด ๊ทธ๋ฅ ์ฝ๊ธฐ ์ ์ฉ์ด ๋จ
get age() {
if (this._age <= 0 ) {
return `๋์ด๋ฅผ ๋ค์ ์
๋ ฅํด ์ฃผ์ธ์.`
}
return `๋์ด๋ ${this._age}์ด ์
๋๋ค.`
}
set changeAge(age: number) {
this._age = age
}
introduce(): string {
return `์ ์ด๋ฆ์ ${this.name}์ด๊ณ , ๋์ด๋ ${this._age}์
๋๋ค.`
}
}
const a = new Person('TATA', -1);
console.log(a.age) // "๋์ด๋ฅผ ๋ค์ ์
๋ ฅํด ์ฃผ์ธ์."
a.changeAge = 7
console.log(a.age) // "๋์ด๋ 7์ด ์
๋๋ค."
public
: ํด๋์ค์ ๋ด๋ถ๋ ์ธ๋ถ, ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅ
protected
: ํด๋นํ๋ ํด๋์ค์ ์์ ํด๋์ค์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
private
: ํด๋นํ๋ ํด๋์ค์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
class User {
public nickname: string; // public์ ์๋ต ๊ฐ๋ฅํจ. nickname: string์ด๋ ๊ฐ์.
protected name: string; // ๋ณธ์ธ๊ณผ ์์ ํด๋์ค์์ ์ฌ์ฉ ๊ฐ๋ฅ
private _job: string; // ๋ณธ์ธ ํด๋์ค์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
constructor(nickname: string, name: string, job: string) {
this.nickname = nickname;
this.name = name;
this._job = job;
}
// ๋ฉ์๋ ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ
protected introduceJob() {
return `์ ์ง์
์ ${this._job} ์
๋๋ค.`
}
// private์ด๋ผ์ ์์ ํด๋์ค์๊ฒ ๋ชป ๋๊ฒจ ์ค
private introduceName() {
return `์ ์ด๋ฆ์ ${this.name} ์
๋๋ค.`
}
}
class Level extends User {
level: number;
constructor(nickname: string, name: string, job: string, level: number) {
super(nickname, name, job);
this.level = level;
}
gameIntroduce() {
return `${super.introduceJob()} ๋ ๋ฒจ์ ${this.level} ์
๋๋ค.`
}
}
const a = new Level('TATA', 'taehyung', '๋ง๋ฒ์ฌ', 99)
console.log(a.gameIntroduce()) // "์ ์ง์
์ ๋ง๋ฒ์ฌ ์
๋๋ค. ๋ ๋ฒจ์ 99 ์
๋๋ค."
new๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํดํธ๋ฅผ ๋ง๋ค์ง ์๊ณ ๋
ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
class User {
static nickname = "TATA"
static hi() {
return `hello ${this.nickname}`
}
}
console.log(User.nickname) // "TATA"
console.log(User.hi()) // "hello TATA"
abstract
abstract์ผ๋ก ์ ์ธํ ํด๋์ค๋
new๋ก ์ง์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
extends๋ก ๋ง๋ ์์ ํด๋์ค์๊ฒ
์ธ์คํด์คํํ๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
abstract class Game {
// ์์ ํด๋์ค์์ ๋ฌด์กฐ๊ฑด ์ด ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํจ
abstract test1(): string
// ๊ทธ๋ฅ ์์ฑํ ๋ฉ์๋
test2() {
return "hello world!"
}
}
class User extends Game {
test1() {
return "wow"
}
}
const a = new User()
console.log(a.test1()) // "wow"
โ ๋ค
์๋์ฒ๋ผ ์ ์ผ๋ฉด ๊ฐ๋
์ฑ์ ์ข์ง ์์ง๋ง,
์ฌ๋ฌ๋ฒ ์ ๋ ๊ท์ฐฎ์์ ์์ ์ค ์ ์๋ค.
class User {
constructor(public nickname: string, protected name: string, private _job: string) {
}
introduceJob() {
return `์ ์ง์
์ ${this._job} ์
๋๋ค.`
}
}
const a = new User('TATA', 'taehyung', '๋ง๋ฒ์ฌ');
console.log(a.introduceJob()) // "์ ์ง์
์ ๋ง๋ฒ์ฌ ์
๋๋ค."
๐งชtypescript ๊ธฐ๋ณธ ํ์
๋ณด๋ฌ๊ฐ๊ธฐ
๐ TypeScript - Playground