κΈ°μ‘΄Β JavaScriptλΒ μ¬μ¬μ©ν Β μΒ μλΒ μ»΄ν¬λνΈλ₯ΌΒ λ§λ€κΈ°Β μν΄Β ν¨μμΒ νλ‘ν νμ -κΈ°λ°Β μμμΒ μ¬μ©νμ§λ§, κ°μ²΄Β μ§ν₯Β μ κ·ΌΒ λ°©μμΒ μ΅μνΒ νλ‘κ·Έλλ¨ΈμΒ μ μ₯μμλΒ ν΄λμ€κ° ν¨μλ₯Ό μμλ°κ³ μ΄λ° ν΄λμ€μμΒ κ°μ²΄κ°Β λ§λ€μ΄μ§λ κ²μ λ€μΒ μ΄μν¨μΒ λλΒ μΒ μμ΅λλ€. ECMAScriptΒ 6λ‘λΒ μλ €μ§Β ECMAScriptΒ 2015λ₯ΌΒ μμμΌλ‘ JavaScriptΒ νλ‘κ·Έλλ¨Έλ€μΒ μ΄λ°Β κ°μ²΄-μ§ν₯μ Β ν΄λμ€-κΈ°λ°μΒ μ κ·ΌΒ λ°©μμΒ μ¬μ©ν΄μΒ μ ν리μΌμ΄μ μΒ λ§λ€Β μΒ μμ΅λλ€. TypeScriptμμλΒ λ€μΒ λ²μ μΒ JavaScriptλ₯ΌΒ κΈ°λ€λ¦΄Β νμΒ μμ΄Β κ°λ°μλ€μ΄Β μ΄λ¬νΒ κΈ°λ²λ€μΒ μ¬μ©ν μ μκ² ν΄μ£Όλ©°, κΈ°μ‘΄μJavaScriptλ‘Β μ»΄νμΌνμ¬Β μ£ΌμΒ λΈλΌμ°μ μΒ νλ«νΌμμΒ λμνκ²Β ν©λλ€.
κ°λ¨ν ν΄λμ€-κΈ°λ° μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
C# μ΄λ Javaλ₯Ό μ¬μ©ν΄λ΄€λ€λ©΄, μ΅μν κ΅¬λ¬ΈμΌ κ²μ
λλ€.
μλ‘μ΄ ν΄λμ€ Greeter
λ₯Ό μ μΈνμ΅λλ€. μ΄ ν΄λμ€λ 3κ°μ λ©€λ²λ₯Ό κ°μ§κ³ μμ΅λλ€: greeting
νλ‘νΌν°, μμ±μ κ·Έλ¦¬κ³ greet
λ©μλ μ
λλ€.
ν΄λμ€ μμμ ν΄λμ€μ λ©€λ²λ₯Ό μ°Έμ‘°ν λ this.
λ₯Ό μμ λ§λΆμ΄λ κ²μ μ μ μμ΅λλ€.
μ΄κ²μ λ©€λ²μ μ κ·Όνλ κ²μ μλ―Έν©λλ€.
λ§μ§λ§ μ€μμ, new
λ₯Ό μ¬μ©νμ¬ Greeter
ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
μ΄ μ½λλ μ΄μ μ μ μν μμ±μλ₯Ό νΈμΆνμ¬ Greeter
ννμ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€κ³ , μμ±μλ₯Ό μ€νν΄ μ΄κΈ°νν©λλ€.
TypeScriptμμλ, μΌλ°μ μΈ κ°μ²΄-μ§ν₯ ν¨ν΄μ μ¬μ©ν μ μμ΅λλ€. ν΄λμ€-κΈ°λ° νλ‘κ·Έλλ°μ κ°μ₯ κΈ°λ³Έμ μΈ ν¨ν΄ μ€ νλλ μμμ μ΄μ©νμ¬ μ΄λ―Έ μ‘΄μ¬νλ ν΄λμ€λ₯Ό νμ₯ν΄ μλ‘μ΄ ν΄λμ€λ₯Ό λ§λ€ μ μλ€λ κ²μ λλ€.
μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
class Animal {
move(distanceInMeters: number = 0) {
console.log(`Animal moved ${distanceInMeters}m.`);
}
}
class Dog extends Animal {
bark() {
console.log('Woof! Woof!');
}
}
const dog = new Dog();
dog.bark();
dog.move(10);
dog.bark();
μμ κΈ°λ₯μ 보μ¬μ£Όλ κ°μ₯ κΈ°λ³Έμ μΈ μμ μ
λλ€: ν΄λμ€λ κΈ°μ΄ ν΄λμ€λ‘λΆν° νλ‘νΌν°μ λ©μλλ₯Ό μμλ°μ΅λλ€.
μ¬κΈ°μ, Dog
μ extends
ν€μλλ₯Ό μ¬μ©νμ¬ Animal
μ΄λΌλ κΈ°μ΄ ν΄λμ€λ‘λΆν° νμλ νμ ν΄λμ€μ
λλ€.
νμλ ν΄λμ€λ νμν΄λμ€(subclasses), κΈ°μ΄ ν΄λμ€λ μμν΄λμ€(superclasses) λΌκ³ λΆλ¦¬κΈ°λ ν©λλ€.
Dog
λ Animal
μ κΈ°λ₯μ νμ₯νκΈ° λλ¬Έμ, bark()
μ move()
λ₯Ό λͺ¨λ κ°μ§ Dog
μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμ΅λλ€.
μ‘°κΈ λ 볡μ‘ν μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
class Animal {
name: string;
constructor(theName: string) { this.name = theName; }
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Snake extends Animal {
constructor(name: string) { super(name); }
move(distanceInMeters = 5) {
console.log("Slithering...");
super.move(distanceInMeters);
}
}
class Horse extends Animal {
constructor(name: string) { super(name); }
move(distanceInMeters = 45) {
console.log("Galloping...");
super.move(distanceInMeters);
}
}
let sam = new Snake("Sammy the Python");
let tom: Animal = new Horse("Tommy the Palomino");
sam.move();
tom.move(34);
μ΄ μμ λ μμμ μΈκΈνμ§ μμ λͺ κ°μ§ κΈ°λ₯μ λ€λ£Ήλλ€.
μ΄λ²μλ extends
ν€μλλ₯Ό μ¬μ©νμ¬ Animal
μ νμν΄λμ€λ₯Ό μμ±ν©λλ€: Horse
μ Snake
.
μ΄μ μμ μ ν κ°μ§ λ€λ₯Έ λΆλΆμ νμλ ν΄λμ€μ μμ±μ ν¨μλ κΈ°μ΄ ν΄λμ€μ μμ±μλ₯Ό μ€νν super()
λ₯Ό νΈμΆν΄μΌ νλ€λ μ μ
λλ€.
λμ±μ΄ μμ±μ λ΄μμ this
μ μλ νλ‘νΌν°μ μ κ·ΌνκΈ° μ μ super()
λ₯Ό λ¨Όμ νΈμΆν΄μΌ ν©λλ€.
μ΄ λΆλΆμ TypeScriptμμ μ€μν κ·μΉμ
λλ€.
λν μ΄ μμ λ κΈ°μ΄ ν΄λμ€μ λ©μλλ₯Ό νμν΄λμ€μ νΉνλ λ©μλλ‘ μ€λ²λΌμ΄λνλ λ°©λ²μ 보μ¬μ€λλ€.
μ¬κΈ°μ Snake
μ Horse
λ Animal
μ move
λ₯Ό μ€λ²λΌμ΄λν΄μ κ°κ° ν΄λμ€μ νΉμ±μ λ§κ² κΈ°λ₯μ κ°μ§ move
λ₯Ό μμ±ν©λλ€.
tom
μ Animal
λ‘ μ μΈλμμ§λ§ Horse
μ κ°μ κ°μ§λ―λ‘ tom.move(34)
λ Horse
μ μ€λ²λΌμ΄λ© λ©μλλ₯Ό νΈμΆν©λλ€.
Slithering...
Sammy the Python moved 5m.
Galloping...
Tommy the Palomino moved 34m.
μ°λ¦¬ μμ μμλ, νλ‘κ·Έλ¨ λ΄μμ μ μΈλ λ©€λ²λ€μ μμ λ‘κ² μ κ·Όν μ μμ΅λλ€.
λ€λ₯Έ μΈμ΄μ ν΄λμ€κ° μ΅μνλ€λ©΄, μ μμ μμ public
μ μ¬μ©νμ§ μμλ λλ€λ μ μ μ μ μμ΅λλ€. μλ₯Ό λ€μ΄, C#μμλ λ
ΈμΆ μν¬ κ° λ©€λ²μ public
μ λΆμ¬μΌ ν©λλ€.
TypeScriptμμλ κΈ°λ³Έμ μΌλ‘ κ° λ©€λ²λ public
μ
λλ€.
λͺ
μμ μΌλ‘ λ©€λ²λ₯Ό public
μΌλ‘ νμν μλ μμ΅λλ€.
μ΄μ μΉμ
μ Animal
ν΄λμ€λ₯Ό λ€μκ³Ό κ°μ λ°©μμΌλ‘ μμ±ν μ μμ΅λλ€:
class Animal {
public name: string;
public constructor(theName: string) { this.name = theName; }
public move(distanceInMeters: number) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
TypeScript 3.8μμ, TypeScriptλ λΉκ³΅κ° νλλ₯Ό μν JavaScriptμ μλ‘μ΄ λ¬Έλ²μ μ§μν©λλ€:
class Animal {
#name: string;
constructor(theName: string) { this.#name = theName; }
}
new Animal("Cat").#name; // νλ‘νΌν° '#name'μ λΉκ³΅κ° μλ³μμ΄κΈ° λλ¬Έμ 'Animal' ν΄λμ€ μΈλΆμμ μ κ·Όν μ μμ΅λλ€.
μ΄ λ¬Έλ²μ JavaScript λ°νμμ λ΄μ₯λμ΄ μμΌλ©°, κ°κ°μ λΉκ³΅κ° νλμ 격리λ₯Ό λ μ 보μ₯ν μ μμ΅λλ€. νμ¬ TypeScript 3.8 λ¦΄λ¦¬μ¦ λ ΈνΈμ λΉκ³΅κ° νλμ λν΄ μμΈν λμμμ΅λλ€.
TypeScriptμλ λ©€λ²λ₯Ό ν¬ν¨νλ ν΄λμ€ μΈλΆμμ μ΄ λ©€λ²μ μ κ·Όνμ§ λͺ»νλλ‘ λ©€λ²λ₯Ό private
μΌλ‘ νμνλ λ°©λ²μ΄ μμ΅λλ€. μ:
class Animal {
private name: string;
constructor(theName: string) { this.name = theName; }
}
new Animal("Cat").name; // μ€λ₯: 'name'μ λΉκ³΅κ°λ‘ μ μΈλμ΄ μμ΅λλ€;
TypeScriptλ ꡬ쑰μ μΈ νμ μμ€ν μ λλ€. λκ°μ λ€λ₯Έ νμ μ λΉκ΅ν λ μ΄λμ μλμ§ μκ΄μμ΄ λͺ¨λ λ©€λ²μ νμ μ΄ νΈν λλ€λ©΄, κ·Έ νμ λ€ μμ²΄κ° νΈν κ°λ₯νλ€κ³ λ§ν©λλ€.
κ·Έλ¬λ private
λ° protected
λ©€λ²κ° μλ νμ
λ€μ λΉκ΅ν λλ νμ
μ λ€λ₯΄κ² μ²λ¦¬ν©λλ€.
νΈνλλ€κ³ νλ¨λλ λ κ°μ νμ
μ€ ν μͺ½μμ private
λ©€λ²λ₯Ό κ°μ§κ³ μλ€λ©΄, λ€λ₯Έ ν μͺ½λ 무쑰건 λμΌν μ μΈμ private
λ©€λ²λ₯Ό κ°μ§κ³ μμ΄μΌ ν©λλ€.
μ΄κ²μ protected
λ©€λ²μλ μ μ©λ©λλ€.
μ€μ λ‘ μ΄λ»κ² μλνλμ§ μμ보기 μν΄ λ€μ μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
class Animal {
private name: string;
constructor(theName: string) { this.name = theName; }
}
class Rhino extends Animal {
constructor() { super("Rhino"); }
}
class Employee {
private name: string;
constructor(theName: string) { this.name = theName; }
}
let animal = new Animal("Goat");
let rhino = new Rhino();
let employee = new Employee("Bob");
animal = rhino;
animal = employee; // μ€λ₯: 'Animal'κ³Ό 'Employee'μ νΈνλ μ μμ.
μ΄ μμ μμλ Animal
κ³Ό Animal
μ νμν΄λμ€μΈ Rhino
κ° μμ΅λλ€.
Animal
κ³Ό ννκ° κ°μ보μ΄λ Employee
λΌλ μλ‘μ΄ ν΄λμ€λ μμ΅λλ€.
μ΄ ν΄λμ€λ€μ μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ ν λΉνκ³ μ΄λ»κ² μλνλμ§ μ΄ν΄λ³΄κ² μ΅λλ€.
Animal
κ³Ό Rhino
λ Animal
μ private name:string
μ΄λΌλ λμΌν μ μΈμΌλ‘λΆν° private
λΆλΆμ 곡μ νκΈ° λλ¬Έμ νΈνμ΄ κ°λ₯ν©λλ€. νμ§λ§ Employee
κ²½μ°λ κ·Έλ μ§ μμ΅λλ€.
Employee
λ₯Ό Animal
μ ν λΉν λ, νμ
μ΄ νΈνλμ§ μλ€λ μ€λ₯κ° λ°μν©λλ€.
Employee
λ name
μ΄λΌλ private
λ©€λ²λ₯Ό κ°μ§κ³ μμ§λ§, Animal
μμ μ μΈν κ²μ΄ μλκΈ° λλ¬Έμ
λλ€.
protected
μ§μ μλ protected
λ‘ μ μΈλ λ©€λ²λ₯Ό νμλ ν΄λμ€ λ΄μμ μ κ·Όν μ μλ€λ μ λ§ μ μΈνλ©΄ private
μ§μ μμ λ§€μ° μ μ¬νκ² λμν©λλ€. μλ₯Ό λ€λ©΄,
class Person {
protected name: string;
constructor(name: string) { this.name = name; }
}
class Employee extends Person {
private department: string;
constructor(name: string, department: string) {
super(name);
this.department = department;
}
public getElevatorPitch() {
return `Hello, my name is ${this.name} and I work in ${this.department}.`;
}
}
let howard = new Employee("Howard", "Sales");
console.log(howard.getElevatorPitch());
console.log(howard.name); // μ€λ₯
Person
μΈλΆμμ name
μ μ¬μ©ν μ μμ§λ§, Employee
λ Person
μμ νμλμκΈ° λλ¬Έμ Employee
μ μΈμ€ν΄μ€ λ©μλ λ΄μμλ μ¬μ ν μ¬μ©ν μ μμ΅λλ€.
μμ±μ λν protected
λ‘ νμλ μλ μμ΅λλ€.
μ΄λ ν΄λμ€λ₯Ό ν¬ν¨νλ ν΄λμ€ μΈλΆμμ μΈμ€ν΄μ€ν ν μ μμ§λ§ νμ₯ ν μ μμμ μλ―Έν©λλ€. μλ₯Ό λ€λ©΄,
class Person {
protected name: string;
protected constructor(theName: string) { this.name = theName; }
}
// Employeeλ Personμ νμ₯ν μ μμ΅λλ€.
class Employee extends Person {
private department: string;
constructor(name: string, department: string) {
super(name);
this.department = department;
}
public getElevatorPitch() {
return `Hello, my name is ${this.name} and I work in ${this.department}.`;
}
}
let howard = new Employee("Howard", "Sales");
let john = new Person("John"); // μ€λ₯: 'Person'μ μμ±μλ protected μ
λλ€.
readonly
ν€μλλ₯Ό μ¬μ©νμ¬ νλ‘νΌν°λ₯Ό μ½κΈ°μ μ©μΌλ‘ λ§λ€ μ μμ΅λλ€.
μ½κΈ°μ μ© νλ‘νΌν°λ€μ μ μΈ λλ μμ±μμμ μ΄κΈ°νν΄μΌ ν©λλ€.
class Octopus {
readonly name: string;
readonly numberOfLegs: number = 8;
constructor (theName: string) {
this.name = theName;
}
}
let dad = new Octopus("Man with the 8 strong legs");
dad.name = "Man with the 3-piece suit"; // μ€λ₯! nameμ μ½κΈ°μ μ© μ
λλ€.
λ§μ§λ§ μμ μ Octopus
ν΄λμ€ λ΄μμ name
μ΄λΌλ μ½κΈ°μ μ© λ©€λ²μ theName
μ΄λΌλ μμ±μ 맀κ°λ³μλ₯Ό μ μΈνμ΅λλ€. μ΄λ Octopus
μ μμ±μκ° μνλ νμ theName
μ κ°μ μ κ·ΌνκΈ° μν΄μ νμν©λλ€. 맀κ°λ³μ νλ‘νΌν°λ₯Ό μ¬μ©νλ©΄ ν κ³³μμ λ©€λ²λ₯Ό λ§λ€κ³ μ΄κΈ°νν μ μμ΅λλ€. λ€μμ 맀κ°λ³μ νλ‘νΌν°λ₯Ό μ¬μ©ν λ κ°μ λ Octopus
ν΄λμ€μ
λλ€.
class Octopus {
readonly numberOfLegs: number = 8;
constructor(readonly name: string) {
}
}
μμ±μμ 짧μμ§ readonly name: string
νλΌλ―Έν°λ₯Ό μ¬μ©νμ¬ theName
μ μ κ±°νκ³ name
λ©€λ²λ₯Ό μμ±νκ³ μ΄κΈ°ννμ΅λλ€. μ¦ μ μΈκ³Ό ν λΉμ ν κ³³μΌλ‘ ν΅ν©νμ΅λλ€.
맀κ°λ³μ νλ‘νΌν°λ μ κ·Ό μ§μ μλ readonly
λλ λ λͺ¨λλ₯Ό μμ±μ 맀κ°λ³μμ μ λμ΄λ‘ λΆμ¬ μ μΈν©λλ€. 맀κ°λ³μ νλ‘νΌν°μ private
μ μ¬μ©νλ©΄ λΉκ³΅κ° λ©€λ²λ₯Ό μ μΈνκ³ μ΄κΈ°νν©λλ€. λ§μ°¬κ°μ§λ‘, public
, protected
, readonly
λ λμΌνκ² μμ©ν©λλ€.
TypeScriptλ κ°μ²΄μ λ©€λ²μ λν μ κ·Όμ κ°λ‘μ±λ λ°©μμΌλ‘ getters/settersλ₯Ό μ§μν©λλ€. μ΄λ₯Ό ν΅ν΄ κ° κ°μ²΄μ λ©€λ²μ μ κ·Όνλ λ°©λ²μ μΈλ°νκ² μ μ΄ν μ μμ΅λλ€.
κ°λ¨ν ν΄λμ€λ₯Ό get
κ³Ό set
μ μ¬μ©νλλ‘ λ³νν΄λ΄
μλ€. λ¨Όμ gettersμ settersκ° μλ μμ λ‘ μμν©λλ€.
class Employee {
fullName: string;
}
let employee = new Employee();
employee.fullName = "Bob Smith";
if (employee.fullName) {
console.log(employee.fullName);
}
μ¬λλ€μ΄ μμλ‘ fullName
μ μ§μ μ€μ ν μ μλλ‘ νμ©νλ κ²μ λ§€μ° νΈλ¦¬νμ§λ§, μ°λ¦¬λ fullName
μ΄ μ€μ λ λ λͺ κ°μ§ μ μ½ μ‘°κ±΄μ΄ μ μ©λλ κ²μ μν μ μμ΅λλ€.
μ΄ λ²μ μμλ λ°±μ
λ°μ΄ν°λ² μ΄μ€ νλμ μ΅λ κΈΈμ΄μ νΈνλλμ§ νμΈνκΈ° μν΄ newName
μ κΈΈμ΄λ₯Ό νμΈνλ setterλ₯Ό μΆκ°ν©λλ€. λ§μ½ μ΅λ κΈΈμ΄λ₯Ό μ΄κ³Όνλ€λ©΄, ν΄λΌμ΄μΈνΈ μ½λμ λ¬Έμ κ° μλ€λ κ²μ μ리기 μν΄ μ€λ₯λ₯Ό λ°μμν΅λλ€.
κΈ°μ‘΄μ κΈ°λ₯μ μ μ§νκΈ° μν΄, fullName
μ μμ νμ§ μλ κ°λ¨ν getterλ μΆκ°ν©λλ€.
const fullNameMaxLength = 10;
class Employee {
private _fullName: string;
get fullName(): string {
return this._fullName;
}
set fullName(newName: string) {
if (newName && newName.length > fullNameMaxLength) {
throw new Error("fullName has a max length of " + fullNameMaxLength);
}
this._fullName = newName;
}
}
let employee = new Employee();
employee.fullName = "Bob Smith";
if (employee.fullName) {
console.log(employee.fullName);
}
μ κ·Όμκ° κ°μ κΈΈμ΄λ₯Ό νμΈνκ³ μλμ§ κ²μ¦νκΈ° μν΄μ, 10μκ° λλ μ΄λ¦μ ν λΉνκ³ μ€λ₯κ° λ°μν¨μ νμΈν μ μμ΅λλ€.
μ κ·Όμμ λν΄ μ£Όμν΄μΌ ν μ¬ν:
λ¨Όμ μ κ·Όμλ ECMAScript 5 μ΄μμ μΆλ ₯νλλ‘ μ»΄νμΌλ¬λ₯Ό μ€μ ν΄μΌ ν©λλ€. ECMAScript 3μΌλ‘μ νν₯ μ‘°μ μ μ§μλμ§ μμ΅λλ€. λμ§Έ, get
κ³Ό set
μ΄ μλ μ κ·Όμλ μλμΌλ‘ readonly
λ‘ μ μΆλ©λλ€. μ΄λ νλ‘νΌν° λ΄μ μ¬μ©μλ€μ΄ λ³κ²½ν μ μμμ μ μ μκΈ° λλ¬Έμ μ½λ λ΄μμ .d.ts
νμΌμ μμ±ν λ μ μ©ν©λλ€.
μ§κΈκΉμ§λ μΈμ€ν΄μ€νλ λ κ°μ²΄μ 보μ΄λ μΈμ€ν΄μ€ λ©€λ²μ λν΄μλ§ μ΄ν΄λ³΄μμ΅λλ€. λν μ°λ¦¬λ μΈμ€ν΄μ€κ° μλ ν΄λμ€ μ체μμ 보μ΄λ μ μ λ©€λ²λ₯Ό μμ±ν μ μμ΅λλ€. μ΄ μμ μμλ λͺ¨λ gridμ μΌλ°μ μΈ κ°μ΄κΈ° λλ¬Έμ originμ static
μ μ¬μ©ν©λλ€. κ° μΈμ€ν΄μ€λ ν΄λμ€ μ΄λ¦μ μμ λΆμ¬ μ΄ κ°μ μ κ·Όν μ μμ΅λλ€. μΈμ€ν΄μ€ μ κ·Ό μμ this.
λ₯Ό λΆμ΄λ κ²κ³Ό λΉμ·νκ² μ¬κΈ°μ μ μ μ κ·Ό μμ Grid.
λ₯Ό λΆμ
λλ€.
class Grid {
static origin = {x: 0, y: 0};
calculateDistanceFromOrigin(point: {x: number; y: number;}) {
let xDist = (point.x - Grid.origin.x);
let yDist = (point.y - Grid.origin.y);
return Math.sqrt(xDist * xDist + yDist * yDist) / this.scale;
}
constructor (public scale: number) { }
}
let grid1 = new Grid(1.0); // 1x scale
let grid2 = new Grid(5.0); // 5x scale
console.log(grid1.calculateDistanceFromOrigin({x: 10, y: 10}));
console.log(grid2.calculateDistanceFromOrigin({x: 10, y: 10}));
μΆμ ν΄λμ€λ λ€λ₯Έ ν΄λμ€λ€μ΄ νμλ μ μλ κΈ°μ΄ ν΄λμ€μ
λλ€. μΆμ ν΄λμ€λ μ§μ μΈμ€ν΄μ€νν μ μμ΅λλ€. μΆμ ν΄λμ€λ μΈν°νμ΄μ€μ λ¬λ¦¬ λ©€λ²μ λν ꡬν μΈλΆ μ 보λ₯Ό ν¬ν¨ν μ μμ΅λλ€. abstract
ν€μλλ μΆμ ν΄λμ€λΏλ§ μλλΌ μΆμ ν΄λμ€ λ΄μμ μΆμ λ©μλλ₯Ό μ μνλλ° μ¬μ©λ©λλ€.
abstract class Animal {
abstract makeSound(): void;
move(): void {
console.log("roaming the earth...");
}
}
μΆμ ν΄λμ€ λ΄μμ μΆμμΌλ‘ νμλ λ©μλλ ꡬνμ ν¬ν¨νμ§ μμΌλ©° λ°λμ νμλ ν΄λμ€μμ ꡬνλμ΄μΌ ν©λλ€. μΆμ λ©μλλ μΈν°νμ΄μ€ λ©μλμ λΉμ·ν λ¬Έλ²μ 곡μ ν©λλ€. λ λ€ λ©μλ λ³Έλ¬Έμ ν¬ν¨νμ§ μκ³ λ©μλλ₯Ό μ μν©λλ€. κ·Έλ¬λ μΆμ λ©μλλ λ°λμ abstract
ν€μλλ₯Ό ν¬ν¨ν΄μΌ νλ©°, μ νμ μΌλ‘ μ κ·Ό μ§μ μλ₯Ό ν¬ν¨ν μ μμ΅λλ€.
abstract class Department {
constructor(public name: string) {
}
printName(): void {
console.log("Department name: " + this.name);
}
abstract printMeeting(): void; // λ°λμ νμλ ν΄λμ€μμ ꡬνλμ΄μΌ ν©λλ€.
}
class AccountingDepartment extends Department {
constructor() {
super("Accounting and Auditing"); // νμλ ν΄λμ€μ μμ±μλ λ°λμ super()λ₯Ό νΈμΆν΄μΌ ν©λλ€.
}
printMeeting(): void {
console.log("The Accounting Department meets each Monday at 10am.");
}
generateReports(): void {
console.log("Generating accounting reports...");
}
}
let department: Department; // μΆμ νμ
μ λ νΌλ°μ€λ₯Ό μμ±ν©λλ€
department = new Department(); // μ€λ₯: μΆμ ν΄λμ€λ μΈμ€ν΄μ€ν ν μ μμ΅λλ€
department = new AccountingDepartment(); // μΆμμ΄ μλ νμ ν΄λμ€λ₯Ό μμ±νκ³ ν λΉν©λλ€
department.printName();
department.printMeeting();
department.generateReports(); // μ€λ₯: μ μΈλ μΆμ νμ
μ λ©μλκ° μ‘΄μ¬νμ§ μμ΅λλ€
TypeScriptμμλ ν΄λμ€λ₯Ό μ μΈνλ©΄ μ€μ λ‘ μ¬λ¬ κ°μ μ μΈμ΄ λμμ μμ±λ©λλ€. 첫 λ²μ§Έλ‘ ν΄λμ€μ μΈμ€ν΄μ€ νμ μ λλ€.
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter: Greeter;
greeter = new Greeter("world");
console.log(greeter.greet()); // "Hello, world""
μ¬κΈ°μ let greeter: Greeter
λΌκ³ ν λ, Greeter
ν΄λμ€μ μΈμ€ν΄μ€ νμ
μΌλ‘ Greeter
λ₯Ό μ¬μ©ν©λλ€. μ΄κ²μ κ±°μ λ€λ₯Έ κ°μ²΄ μ§ν₯ μΈμ΄λ₯Ό μ¬μ©νλ νλ‘κ·Έλλ¨Έλ€μκ² μμ°μ€λ¬μ΄ μ±μ§μ
λλ€.
λν μμ±μ ν¨μλΌκ³ λΆλ¦¬λ λ λ€λ₯Έ κ°μ μμ±νκ³ μμ΅λλ€. μ΄κ²μ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό new
ν λ νΈμΆλλ ν¨μμ
λλ€. μ€μ λ‘ μ΄λ»κ² 보μ΄λμ§ νμΈνκΈ° μν΄ μμ μμ μμ λ§λ€μ΄μ§ JavaScriptλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
let Greeter = (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
})();
let greeter;
greeter = new Greeter("world");
console.log(greeter.greet()); // "Hello, world"
μ¬κΈ°μ, let Greeter
λ μμ±μ ν¨μλ₯Ό ν λΉλ°μ κ²μ
λλ€. new
λ₯Ό νΈμΆνκ³ μ΄ ν¨μλ₯Ό μ€νν λ, ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ»μ΅λλ€. λν μμ±μ ν¨μλ ν΄λμ€μ λͺ¨λ μ μ λ³μλ€μ ν¬ν¨νκ³ μμ΅λλ€. κ° ν΄λμ€λ₯Ό μκ°νλ λ λ€λ₯Έ λ°©λ²μ μΈμ€ν΄μ€ μΈ‘λ©΄κ³Ό μ μ μΈ‘λ©΄μ΄ μλ€λ κ² μ
λλ€.
μ΄ μ°¨μ΄λ₯Ό 보μ¬μ£ΌκΈ° μν΄ μμ λ₯Ό μμ ν΄λ΄ μλ€.
class Greeter {
static standardGreeting = "Hello, there";
greeting: string;
greet() {
if (this.greeting) {
return "Hello, " + this.greeting;
}
else {
return Greeter.standardGreeting;
}
}
}
let greeter1: Greeter;
greeter1 = new Greeter();
console.log(greeter1.greet()); // "Hello, there"
let greeterMaker: typeof Greeter = Greeter;
greeterMaker.standardGreeting = "Hey there!";
let greeter2: Greeter = new greeterMaker();
console.log(greeter2.greet()); // "Hey there!"
μ΄ μμ μμ greeter1
μ μ΄μ κ³Ό λΉμ·νκ² μλν©λλ€. Greeter
ν΄λμ€λ₯Ό μΈμ€ν΄μ€ννκ³ μ΄ κ°μ²΄λ₯Ό μ¬μ©ν©λλ€. μ΄κ²μ μ μ λ³Έ κ²μ
λλ€.
λ€μμΌλ‘, ν΄λμ€λ₯Ό μ§μ μ¬μ©ν©λλ€. μ¬κΈ°μ greeterMaker
λΌλ μλ‘μ΄ λ³μλ₯Ό μμ±ν©λλ€. μ΄ λ³μλ ν΄λμ€ μ체λ₯Ό μ μ§νκ±°λ μμ±μ ν¨μλ₯Ό λ€λ₯΄κ² μ€λͺ
ν©λλ€. μ¬κΈ°μ typeof Greeter
λ₯Ό μ¬μ©νμ¬ μΈμ€ν΄μ€ νμ
μ΄ μλ "Greeter
ν΄λμ€ μ체μ νμ
μ μ 곡ν©λλ€". νΉμ λ μ ννκ² μμ±μ ν¨μμ νμ
μΈ "Greeter
λΌλ μ¬λ³Όμ νμ
μ μ 곡ν©λλ€". μ΄ νμ
μ Greeter
ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ§λλ μμ±μμ ν¨κ» Greeterμ λͺ¨λ μ μ λ©€λ²λ₯Ό ν¬ν¨ν κ²μ
λλ€. greeterMaker
μ new
λ₯Ό μ¬μ©ν¨μΌλ‘μ¨ Greeter
μ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μ΄μ κ³Ό κ°μ΄ νΈμΆν©λλ€.
μμ μΈκΈν κ²μ²λΌ, ν΄λμ€ μ μΈμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λνλ΄λ νμ κ³Ό μμ±μ ν¨μλΌλ λ κ°μ§λ₯Ό μμ±ν©λλ€. ν΄λμ€λ νμ μ μμ±νκΈ° λλ¬Έμ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν μ μλ λμΌν μμΉμμ μ¬μ©ν μ μμ΅λλ€.
class Point {
x: number;
y: number;
}
interface Point3d extends Point {
z: number;
}
let point3d: Point3d = {x: 1, y: 2, z: 3};