TypeScript 클래스 및 객체: 객체 지향 프로그래밍의 기초

소개

TypeScript는 JavaScript의 상위 집합으로 정적 유형, 클래스, 인터페이스, 데코레이터와 같은 객체 지향 프로그래밍 기능을 JavaScript에 추가하고 TypeScript를 컴파일러를 통해 JavaScript로 컴파일하여 모든 JavaScript 환경에서 실행할 수 있으므로 An이 되었습니다. 자바스크립트 개발에 없어서는 안 될 도구. 객체 지향 프로그래밍은 현대 프로그래밍 언어의 기초이며 TypeScript의 클래스와 객체는 객체 지향 프로그래밍을 구현하기 위한 기초입니다.

클래스 정의

  • JavaScript와 마찬가지로 TypeScript의 클래스도 class키워드를 . 클래스를 정의하는 구문은 다음과 같습니다.

    class ClassName {
          
          
        //类成员的定义
    }
    
  • 클래스 구성원은 属性, 方法, 构造函数등 을 포함할 수 있습니다 静态成员.

속성

  • 클래스 속성은 클래스에서 직접 변수를 정의하여 구현할 수 있습니다. 속성은 일반 변수 또는 클래스 개체일 수 있습니다.

    class Person {
          
          
        name: string;
        age: number;
    }
    
  • 위의 예에서 Person이라는 클래스를 정의했습니다. 여기에는 이름과 연령의 두 가지 속성이 있습니다.

방법

  • 클래스의 메서드 function 关键字는 또는 箭头函数로 정의할 수 있습니다. 方法可以有返回值,也可以没有返回值.

    class Person {
          
          
        name: string;
        age: number;
        sayHello():void {
          
          
            console.log(`Hello, my name is ${
            
            this.name}, I'm ${
            
            this.age} years old`);
        }
        // 或者使用箭头函数的方式:sayHello: () => console.log(`Hello, my name is ${this.name}, I'm ${this.age} years old`)
    }
    
  • 위의 예에서 Person이라는 클래스를 정의했습니다. 여기에는 이름과 나이라는 두 가지 속성이 있습니다. 또한 반환 값이 없고 호출 시 현재 개체의 이름과 나이를 출력하는 sayHello라는 메서드를 정의합니다.

건설자

  • 클래스 생성자는 클래스의 개체를 초기화하는 데 사용됩니다. JavaScript와 마찬가지로 TypeScript 생성자는 constructor 키워드를 사용하여 정의됩니다.

    class Person {
          
          
        name: string;
        age: number;
        constructor(name: string, age: number) {
          
          
            this.name = name;
            this.age = age;
        }
    }
    
  • 위의 예에서 Person이라는 클래스를 정의했습니다. 여기에는 이름과 연령의 두 가지 속성이 있습니다. 현재 개체의 name 및 age 속성을 초기화하는 데 사용되는 name이라는 문자열과 age라는 값을 허용하는 생성자도 정의됩니다.

정적 멤버

  • 정적 멤버는 에 사용됩니다 在类的实例之间共享数据. TypeScript에서 정적 멤버는 를 사용하여 정의 static 关键字됩니다 .

    class Person {
          
          
        name: string;
        age: number;
        static total: number = 0;
        constructor(name: string, age: number) {
          
          
            this.name = name;
            this.age = age;
            Person.total++;
        }
    }
    
  • 위의 예에서 Person이라는 클래스를 정의했습니다. 여기에는 이름과 연령의 두 가지 속성이 있습니다. 현재 클래스에서 만든 개체 수를 기록하기 위해 정적 멤버 총계도 정의됩니다. 생성자가 호출될 때마다 total이 1씩 증가하여 total의 업데이트를 실현합니다.

객체 생성

  • TypeScript에서 객체를 생성하려면 먼저 클래스의 인스턴스를 생성해야 합니다. 클래스 인스턴스를 만드는 방법에는 두 가지가 있습니다.

새로운 키워드를 사용

  • 를 사용하여 클래스의 인스턴스를 new 关键字만드는 것이 가장 일반적인 방법입니다.

    let person1 = new Person("Tom", 18);
    
  • 위의 예제에서는 Person 클래스의 인스턴스인 person1이라는 변수를 만들고 생성자를 사용하여 name 및 age 속성을 초기화했습니다.

객체 리터럴 사용

  • 를 사용하여 클래스 인스턴스 만들기 对象字面量는 일반적으로 사용자 지정 생성자 없이 클래스를 만드는 데 사용됩니다.

    let person2: Person = {
          
          
        name: "Jerry",
        age: 20,
        sayHello: () => console.log("Hello")
    };
    
  • 위의 예제에서는 Person 클래스의 인스턴스인 person2라는 변수를 만들고 객체 리터럴을 사용하여 name, age, sayHello 속성을 초기화했습니다.

상속과 다형성

계승하다

  • 继承객체 지향 프로그래밍에서 중요한 개념으로, 클래스가 다른 클래스에서 상속 属性및 상속할 수 있도록 합니다 方法. JavaScript와 마찬가지로 TypeScript에서 상속은 extends 키워드를 사용하여 정의됩니다.

    class Student extends Person {
          
          
        grade: number;
        constructor(name: string, age: number, grade: number) {
          
          
            super(name, age);
            this.grade = grade;
        }
        sayHello(): void{
          
          
            console.log(`Hello, my name is ${
            
            this.name}, I'm ${
            
            this.age} years old, I'm in grade ${
            
            this.grade}`);
        }
    }
    
  • 위의 예제에서는 Person 클래스의 모든 속성과 메서드를 상속한 Student라는 클래스를 정의하고 학생의 성적을 나타내는 grade라는 특성을 추가했습니다. 부모 클래스의 sayHello 메서드도 현재 개체의 모든 속성을 출력하도록 다시 작성됩니다.

다형성

  • 多态동일한 메서드를 호출할 때 서로 다른 개체가 다르게 동작할 수 있도록 하는 개체 지향 프로그래밍에서 중요한 개념입니다. 抽象类TypeScript에서 다형성을 구현하려면 및 를 사용해야 합니다 接口.

  • 抽象类是一种不能被直接实例化的类,它只能被继承. 추상 클래스는 抽象方法및 를 포함할 수 있습니다 普通方法.

    • 抽象方法是没有实现的方法,它的实现需要在子类中完成
    abstract class Animal {
          
          
        abstract makeSound(): void;
        move(): void {
          
          
            console.log("I'm moving");
        }
    }
    
  • 위의 예에서 추상 메서드 makeSound와 일반 메서드 move가 있는 Animal이라는 추상 클래스를 정의했습니다. makeSound 메서드는 구현되지 않았으며 하위 클래스에서 수행해야 합니다.

  • 接口개체의 구조, 속성 및 메서드를 정의하는 데 사용되는 형식입니다.

    • 接口只是一个类型声明,它没有实现任何行为
    interface Shape {
          
          
        area(): number;
    }
    class Circle implements Shape {
          
          
        radius: number;
        constructor(radius: number) {
          
          
            this.radius = radius;
        }
        area(): number {
          
          
            return this.radius * this.radius * Math.PI;
        }
    }
    class Square implements Shape {
          
          
        length: number;
        constructor(length: number) {
          
          
            this.length = length;
        }
        area(): number {
          
          
            return this.length * this.length;
        }
    }
    
  • 위의 예에서는 area라는 메서드가 있는 Shape라는 인터페이스를 정의했습니다. 또한 Shape 인터페이스를 구현하는 두 개의 클래스인 Circle과 Square를 정의합니다. 둘 다 area 메서드를 구현하지만 면적을 계산하는 방법은 다릅니다.

요약하다

클래스와 객체는 面向对象编程기본이며 클래스 정의를 통해 객체를 생성하고 속성과 메서드를 캡슐화할 수 있습니다. 상속과 다형성을 통해 코드 재사용 및 확장을 달성할 수 있습니다. TypeScript는 정적 타이핑, 클래스, 인터페이스 및 데코레이터와 같은 기능을 추가하여 JavaScript의 객체 지향 프로그래밍 기능을 더욱 향상시킵니다. TypeScript 클래스 및 개체에 대한 숙련도는 고품질 JavaScript 애플리케이션을 빠르게 개발하는 데 도움이 될 수 있습니다.

рекомендация

отblog.csdn.net/McapricornZ/article/details/131273084