[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ]TypeScript - 2

JiEunยท2023๋…„ 5์›” 31์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ• ์ค‘ ์—ด๊ฑฐํ˜•, ํƒ€์ž… ๋ณ„์นญ, ํƒ€์ž… ์ถ”๋ก , ํด๋ž˜์Šค์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.


๐Ÿ“ ์•Œ๊ฒŒ ๋œ ์ 

โœ”๏ธ ์ˆซ์žํ˜• ์—ด๊ฑฐํ˜•(Enum)

  • ํŠน์ • ๊ฐ’์˜ ์ง‘ํ•ฉ์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ˆซ์žํ˜•, ๋ฌธ์ž์—ด ๋˜๋Š” ์ด ๋‘๊ฐ€์ง€์˜ ์กฐํ•ฉ์œผ๋กœ ์ •์˜๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ๋ณธ ๊ฐ’์€ ์ˆซ์ž ํ˜•์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ฐ ๊ฐ’์€ ์ž๋™์œผ๋กœ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค. (์ˆ˜๋™์œผ๋กœ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.)
enum Figure {
  Circle,
  Triangle,
  Square,
}

//์ˆ˜๋™์œผ๋กœ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
enum Figure {
  Circle = 1,
  Triangle = 3,
  Square = 4,
}
  
let f: Figure = Figure.Circle;
let triangleValue: number = Figure.Triangle;
let squareValue: number = Figure.Square;

console.log(d);          // ์ถœ๋ ฅ: 1
console.log(triangleValue);  // ์ถœ๋ ฅ: 3
console.log(squareValue);   // ์ถœ๋ ฅ: 4
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์ˆ˜๊ฐ’์„ ๋Œ€์‹ ํ•ด ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์—ด๊ฑฐํ˜•์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ€๋…์„ฑ ๋†’๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๊ณ , ์˜คํƒ€์™€ ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ด ์ค€๋‹ค.

์—ญ ๋งคํ•‘ (Reverse mappings)

  • ์ˆซ์žํ˜• ์—ด๊ฑฐํ˜•์—๋งŒ ์กด์žฌํ•˜๋Š” ํŠน์ง•(๋ฌธ์žํ˜• ์—ด๊ฑฐํ˜•์—์„œ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.)
  • ์—ด๊ฑฐํ˜•์˜ ํ‚ค(key)๋กœ ๊ฐ’(value)์„ ์–ป์„ ์ˆ˜ ์žˆ๊ณ  ๊ฐ’(value)์œผ๋กœ ํ‚ค(key)๋ฅผ ์–ป์„ ์ˆ˜๋„ ์žˆ๋‹ค.
//์—ด๊ฑฐํ˜•์˜ ํ‚ค๋กœ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ’์œผ๋กœ๋„ ์—ด๊ฑฐํ˜•์˜ ํ‚ค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
num Enum {
    A
}
let a = Enum.A;
let nameOfA = Enum[a]; // "A"

โœ”๏ธ ๋ฌธ์žํ˜• ์—ด๊ฑฐํ˜•(Enum)

  • ์ˆซ์žํ˜• ์—ด๊ฑฐํ˜•๊ณผ ๊ฐœ๋…์ ์œผ๋กœ ๋น„์Šทํ•˜๋‹ค.
  • ์—ด๊ฑฐํ˜•์˜ ๊ฐ’์„ ์ „๋ถ€ ๋‹ค ํŠน์ • ๋ฌธ์ž ๋˜๋Š” ๋‹ค๋ฅธ ์—ด๊ฑฐํ˜• ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค.
enum Figure {
  Circle = "Circle,
  Triangle = "Triangle",
  Square = "Square",
}

//myFigure๋ฅผ Figure.Circle์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•˜๊ณ  ์žˆ๋‹ค.
let myFigure: Figure = Figure.Circle;
console.log(myFigure); // ์ถœ๋ ฅ: "Circle"

๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜์˜ ์—ด๊ฑฐํ˜•์€ ์ฃผ๋กœ ์™ธ๋ถ€์—์„œ ๊ฐ€์ ธ์˜จ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
(ex - HTTP ์š”์ฒญ ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ด๋Š” ์—ด๊ฑฐํ˜•์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.)

enum HttpMethod {
  Get = "GET",
  Post = "POST",
  Put = "PUT",
  Delete = "DELETE",
}
function makeRequest(url: string, method: HttpMethod) {
  // ...
}
//HTTP ์š”์ฒญ ๋ฐฉ์‹์„ ์ง€์ •ํ•  ๋•Œ๋Š” HttpMethod.Post์™€ ๊ฐ™์ด ์—ด๊ฑฐํ˜• ๊ฐ’์„ ์‚ฌ์šฉ
makeRequest("/api/data", HttpMethod.Post);

โœ”๏ธ ์ธํ„ฐํŽ˜์ด์Šค(Interface)

  • ์ผ๋ฐ˜์ ์œผ๋กœ ํƒ€์ž… ์ฒดํฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค์— ์‚ฌ์šฉํ•œ๋‹ค
  • ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ ๋˜๋Š” ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„์„ ๊ฐ•์ œํ•ด ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ด ์ค€๋‹ค.
  • interface๋ฅผ ์‚ฌ์šฉํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜์žˆ๋‹ค.
  • ํ™•์žฅ(์ƒ์†)์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์œ ์—ฐํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์œ„ํ•ด์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ค์–ด ํ•„์š”ํ•  ๋•Œ ๋งˆ๋‹ค ํ™•์žฅ ํ•  ์ˆ˜ ์žˆ๋‹ค.)

๋ณ€์ˆ˜

interface User {
	name: string;
	age: number;
}
const user: User = {
	name: "anna",
	age: 20
}
  • ํ”„๋กœํผํ‹ฐ์˜ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค์ง€ ์•Š์•„๋„ ์ •์ƒ์ ์œผ๋กœ ์„ ์–ธ๋œ๋‹ค.
  • ์ •์˜๋œ ํ”„๋กœํผํ‹ฐ๋ณด๋‹ค ์ ๊ฒŒ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.
  • ์ •์˜๋œ ํ”„๋กœํผํ‹ฐ๋ณด๋‹ค ๋งŽ์ด ์ž‘์„ฑํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค. (๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜)
interface User {
	name: string;
	age?: number;
}
const user: User = {
	name: "anna"
}
  • ์ธํ„ฐํŽ˜์ด์Šค ์•ˆ์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์–ด๋–ค ์กฐ๊ฑด์—์„œ๋งŒ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ์•„์˜ˆ ์—†์„ ์ˆ˜๋„ ์žˆ๊ธฐ์— ? ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒ์  ํ”„๋กœํผํ‹ฐ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ˆ˜

  • ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„๊ณผ ํƒ€์ž…์„ ์ •์˜ํ•˜๊ณ , ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…๊ณผ ๋ฐ˜ํ™˜ ํƒ€์ž…๋„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
interface User {
	name: string;
	age: number;
	job: string;
}

interface Greeting {
	(user: User, greeting: string): string;
}

const greet: Greeting = (user, greeting) => {
	return `${greeting}, ${user.name}! Your job : ${user.job}.`;
}

const user: User = {
	name: "anna",
	age: 30,
	job: "developer"
};

const message = greet(user, "Hi");

console.log(message);

์ƒ์†

  • extends ํ‚ค์›Œ๋“œ๋กœ ๊ธฐ์กด์— ์กด์žฌํ•˜๋˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•ด ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ธฐ์กด์— ์กด์žฌํ•˜๋˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์ธํ„ฐํŽ˜์ด์Šค์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.
interface Person {
    name: string;
    age: number;
}

interface Developer extends Person {
    language: string;
}

const person: Developer = {
    language: "TypeScript",
    age: 20,
    name: "Anna",
}
  • ์—ฌ๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„ ํ™•์žฅ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
interface FoodStuff {
    name: string;
}

interface FoodAmount {
    amount: number;
}

interface FoodFreshness extends FoodStuff, FoodAmount {
	   isFreshed: boolean;
}

โœ”๏ธ ํƒ€์ž… ๋ณ„์นญ(Type Aliases)

  • ํƒ€์ž…์˜ ์ƒˆ๋กœ์šด ์ด๋ฆ„์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.(์ƒˆ๋กœ์šด ์ด๋ฆ„์œผ๋กœ ๊ธฐ์กด์˜ ํƒ€์ž…์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ)
  • type์‚ฌ์šฉํ•œ๋‹ค.
type MyString = string;

// myString๊ณผ string์€ ๋™์ผํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.
// string ํƒ€์ž…์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
let str: MyString = 'hello world!';
  • ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณต์žกํ•œ ํƒ€์ž…์„ ๊ฐ„๋žตํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ , ํƒ€์ž… ์ •์˜๋ฅผ ์žฌ์‚ฌ์šฉํ•ด ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • interface์™€ ๋‹ฌ๋ฆฌtype์œผ๋กœ ์ž‘์„ฑ๋œ ๊ฒฝ์šฐ ์–ด๋–ค ํ”„๋กœํผํ‹ฐ๋“ค์ด ์ •์˜ ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ ํƒ€์ž… ์ถ”๋ก (Type Inference)

  • ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์˜ ํƒ€์ž…์„ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์œ ์ถ”ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
//ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋™์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ์ถ”๋ก ํ•œ๋‹ค. 
let isString = "Hi";
  • ์ตœ์  ๊ณตํ†ต ํƒ€์ž… (Best common type)
    ์—ฌ๋Ÿฌ ํ‘œํ˜„์‹์—์„œ ํƒ€์ž… ์ถ”๋ก ์ด ๋ฐœ์ƒํ•  ๋•Œ ํ•ด๋‹น ํ‘œํ˜„์‹์˜ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด ์ตœ์  ๊ณตํ†ต ํƒ€์ž…(Best common type)์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ๋ฌธ๋งฅ์ƒ์˜ ํƒ€์ดํ•‘(Contextual Typing)
    ๋ฌธ๋งฅ์ƒ์œผ๋กœ ํƒ€์ž…์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ (์ฝ”๋“œ์˜ ์œ„์น˜(๋ฌธ๋งฅ)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ผ์–ด๋‚œ๋‹ค.)

์žฅ์ 

  • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ
    ํƒ€์ž… ์ถ”๋ก  ์‚ฌ์šฉ ์‹œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค.(๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ์ฝ”๋“œ์—์„œ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ)
  • ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
    ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.(๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๊ธฐ ๋•Œ๋ฌธ)
  • ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ ์šฉ์ด์„ฑ
    ์ฝ”๋“œ์˜ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜๊ฒฌํ•˜๋Š” ๊ฒƒ์ด ์‰ฌ์›Œ์ง„๋‹ค.(ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์˜ ํƒ€์ž…์„ ์ถ”๋ก ํ•ด ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ)

๋‹จ์ 

  • ํƒ€์ž… ์ถ”๋ก ์ด ์ž˜๋ชป๋  ๊ฒฝ์šฐ ์ฝ”๋“œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
    ํƒ€์ž… ์ถ”๋ก ์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ์— ์ถ”๋ก ์ด ์ž˜๋ชป ๋  ๊ฒฝ์šฐ ์ฝ”๋“œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋ช…์‹œ์ ์ธ ํƒ€์ž… ์ง€์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
    ํƒ€์ž… ์ถ”๋ก ๋งŒ์œผ๋กœ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋ณต์žกํ•œ ํ•จ์ˆ˜๋‚˜ ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ์—๋Š” ๋ช…์‹œ์ ์ธ ํƒ€์ž… ์ง€์ •์ด ํ•„์š”ํ•˜๋‹ค.

โœ”๏ธ ํด๋ž˜์Šค(Class)

  • JavaScript์˜ ํด๋ž˜์Šค์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.
  • ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • constructor๋ฅผ ์ด์šฉํ•ด ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฉค๋ฒ„๋“ค์€ ์ „๋ถ€ ์ƒ๋‹จ์—์„œ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.
  • contructor ๋‚ด ์ธ์ž๋กœ ๋ฐ›์„ ๋•Œ ์ •ํ™•ํ•œ ํƒ€์ž…์„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.
class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  greet(): void {
    console.log(`${this.name}์ด๊ณ , ${this.age}์‚ด ์ž…๋‹ˆ๋‹ค.`);
  }
}

์ƒ์†(Inheritance)

  • interface์™€ ๋™์ผํ•˜๊ฒŒ ๊ธฐ์กด์— ์กด์žฌํ•˜๋˜ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ํ™•์žฅํ•ด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • extends๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ์†ํ•œ๋‹ค.
//Animal = ๊ธฐ์ดˆ ํด๋ž˜์Šค, ์ƒ์œ„ํด๋ž˜์Šค
class Animal {
    move(distanceInMeters: number): void {
        console.log(`${distanceInMeters}m ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.`);
    }
}

//Animalํด๋ž˜์Šค๋ฅผ Dogํด๋ž˜์Šค๊ฐ€ ์ƒ์†
//Dog ํด๋ž˜์Šค๋Š” Animal ํด๋ž˜์Šค ๋ถ€ํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†
//Dog = ํŒŒ์ƒ ํด๋ž˜์Šค, ํ•˜์œ„ํด๋ž˜์Šค
class Dog extends Animal {
    speak(): void {
        console.log("๋ฉ๋ฉ!");
    }
}

const dog = new Dog();
dog.move(10);
dog.speak();

public, private, readonly

public, private

๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ž˜์Šค ๋‚ด์— ์„ ์–ธ๋œ ๋ฉค๋ฒ„๋Š” ์™ธ๋ถ€๋กœ ๊ณต๊ฐœ๋˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ ๊ฐ’์ด๋‹ค.

  • ๊ณต๊ฐœ ๋œ๋‹ค๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๋•Œ public์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์™ธ๋ถ€์— ๋“œ๋Ÿฌ๋‚ด์ง€ ์•Š์„ ๋ฉค๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ private๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
class Person {
  public name: string; //๊ณต๊ฐœํ•  ๊ฒฝ์šฐ
  private age: number; //๊ณต๊ฐœํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  greet(): void {
    console.log(`${this.name}์ด๊ณ , ${this.age}์‚ด ์ž…๋‹ˆ๋‹ค.`);
  }
}

readonly

  • ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜์žˆ๋‹ค.
  • ์ฝ๊ธฐ ์ „์šฉ ํ”„๋กœํผํ‹ฐ๋Š” ์„ ์–ธ์ด๋‚˜ ์ƒ์„ฑ์ž์—์„œ ์ดˆ๊ธฐํ™”ํ•ด์•ผํ•œ๋‹ค.
  • ๋ณ€๊ฒฝ๋˜๋ฉด ์•ˆ ๋  ๊ฐ’์„ readonly๋กœ ๋ช…์‹œํ•˜์—ฌ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค.
//name์€ readonly๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ๊ธฐ์—, ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
class Mydog {
    readonly name: string;
    constructor(theName: string) {
        this.name = theName;
    }
}
let spooky = new Mydog("์Šคํ‘ธํ‚ค");
spooky.name = "๋ฉ‹์ง„ ์Šคํ‘ธํ‚ค"; // ์—๋Ÿฌ

โœ๏ธ ๋งˆ์น˜๋ฉฐ

์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ํ•™์Šตํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์ž˜ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด ๋งŽ๊ณ 
๊ทธ๋ƒฅ ์•„ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ง„ํ–‰์ด ๋˜๋Š” ๊ตฌ๋‚˜... ์ •๋„๋กœ ํ•™์Šตํ–ˆ๋‹ค.
์‹œ๊ฐ„ ํˆฌ์ž๋ฅผ ํ•ด์„œ ์ œ๋Œ€๋กœ ๊ณต๋ถ€ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค...ใ… 

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€