TypeScript / / 2024. 10. 29. 17:26

TypeScript 클래스

자바스크립트의 클래스

자바스크립트에서 클래스는 동일한 형태의 객체를 더 쉽게 생성하기 위한 문법입니다. 클래스는 객체의 **틀(템플릿)**로 작용하여, 반복적인 객체 생성 과정을 효율적으로 처리합니다.

자바스크립트의 클래스 주요 개념

  1. 클래스 선언
    • class ClassName {} 형태로 선언합니다.
    • 클래스는 객체를 생성하는 템플릿과 같으며, 생성된 객체는 인스턴스입니다.
  2. 필드와 생성자
    • 필드: 객체가 가지는 프로퍼티를 선언합니다.
    • 생성자(Constructor): constructor 메서드를 사용하여 필드를 초기화하고 객체를 생성합니다. 생성자는 클래스가 호출될 때 자동으로 실행됩니다.
    • class Student {
        name;
        age;
        grade;
      
        constructor(name, age, grade) {
          this.name = name;
          this.age = age;
          this.grade = grade;
        }
      }
  3. 메서드
    • 클래스 내에 정의된 함수로, 인스턴스의 행동을 정의합니다.
    • study() {
        console.log("열심히 공부 함");
      }
  4. 상속 (Inheritance)
    • 기존 클래스의 필드와 메서드를 확장하는 새로운 클래스를 생성할 수 있습니다.
    • extends 키워드를 사용하고, 상위 클래스의 생성자는 super()로 호출합니다.
    • class StudentDeveloper extends Student {
        favoriteSkill;
      
        constructor(name, age, grade, favoriteSkill) {
          super(name, age, grade);
          this.favoriteSkill = favoriteSkill;
        }
      
        programming() {
          console.log(`${this.favoriteSkill}로 프로그래밍 함`);
        }
      }

타입스크립트의 클래스

타입스크립트의 클래스는 자바스크립트의 클래스 개념을 확장하며, 정적 타입 검사를 통해 코드의 안정성을 높이는 역할을 합니다.

타입스크립트의 클래스 주요 개념

  1. 타입 주석
    • 클래스의 필드 생성자 매개변수에 타입을 명시합니다.
    • 타입 주석을 통해 각 필드의 데이터 타입을 지정하여 잘못된 타입 할당을 방지합니다.
    • class Employee {
        name: string = "";
        age: number = 0;
        position?: string; // 선택적 필드
      
        constructor(name: string, age: number, position?: string) {
          this.name = name;
          this.age = age;
          this.position = position;
        }
      
        work() {
          console.log("일함");
        }
      }
  2. 선택적 프로퍼티:
    • 필드 이름 뒤에 ?를 붙여 해당 필드를 선택적으로 정의할 수 있습니다.
  3. 타입으로서의 클래스
    • 타입스크립트에서는 클래스가 객체의 타입으로도 사용됩니다.
    • const employeeC: Employee = {
        name: "Jane",
        age: 28,
        position: "Manager",
        work() {
          console.log("일함");
        },
      };
  4. 상속 시 super 호출 의무:
    • 파생 클래스에서 생성자를 정의할 때는 반드시 상위 클래스의 생성자를 super()를 통해 호출해야 합니다.

자바스크립트 클래스와 타입스크립트 클래스의 비교

특징자바스크립트 클래스타입스크립트 클래스

특징 자바스크립트 클래스 타입스크립트 클래스
타입 주석 없음 필드와 매개변수에 타입 주석을 추가하여 정적 타입 검사 가능
선택적 필드 없음 필드 이름 뒤에 ?를 붙여 선택적 필드로 설정 가능
타입 검사 없음 (런타임에만 확인 가능) 컴파일 시 타입 검사 가능 (Strict Mode를 통해 오류 방지)
상속 시 생성자 super()를 통해 상위 생성자 호출 가능 super() 호출 필수 (생성자의 최상단에서)
타입으로서의 클래스 타입 사용 불가 클래스를 타입으로 사용할 수 있음
필드 선언 선언은 생성자 내부에서 함 필드를 클래스 내에서 미리 선언 가능 (name: string 등)

요약

  • 자바스크립트와 타입스크립트의 클래스는 모두 객체를 생성하는 틀로 작동하며, 생성자, 필드, 메서드 등을 포함합니다.
  • 타입스크립트 클래스 타입 주석 선택적 필드 등을 추가하여 정적 타입 검사를 제공하며, 코드의 안정성을 강화합니다.
  • 자바스크립트 클래스는 런타임에서만 타입 검사를 하지만, 타입스크립트 클래스는 컴파일 시점에 타입 검사를 통해 오류를 방지할 수 있습니다.

타입스크립트를 사용하면 클래스의 사용 시 타입 안전성이 향상되므로, 코드의 규모가 커지거나 협업 시 더욱 안전한 개발 환경을 구축할 수 있습니다.



접근 제어자(Access Modifier)

타입스크립트에서는 접근 제어자를 통해 클래스의 필드와 메서드의 접근 범위를 제어할 수 있습니다. 이는 코드의 캡슐화를 강화하여 외부에서 직접 접근하지 못하도록 설정할 수 있는 기능을 제공합니다. 타입스크립트의 주요 접근 제어자는 public, private, protected의 세 가지입니다.

1. public

  • 모든 범위에서 접근이 가능한 필드나 메서드에 사용됩니다.
  • 기본적으로 접근 제어자를 지정하지 않으면 모든 필드와 메서드는 public으로 설정됩니다.
  • class Employee {
      public name: string;
      public age: number;
      public position: string;
    
      constructor(name: string, age: number, position: string) {
        this.name = name;
        this.age = age;
        this.position = position;
      }
    
      work() {
        console.log("일함");
      }
    }
    
    const employee = new Employee("이정환", 27, "developer");
    employee.name = "홍길동"; // 접근 가능

2. private

  • 클래스 내부에서만 접근할 수 있는 필드나 메서드에 사용됩니다.
  • 클래스 외부에서 접근하려고 하면 오류가 발생합니다.
  • class Employee {
      private name: string; // 클래스 외부에서 접근 불가
      public age: number;
      public position: string;
    
      constructor(name: string, age: number, position: string) {
        this.name = name;
        this.age = age;
        this.position = position;
      }
    
      work() {
        console.log(`${this.name}이 일함`); // 내부에서는 접근 가능
      }
    }
    
    const employee = new Employee("이정환", 27, "developer");
    employee.name = "홍길동"; // ❌ 오류 발생 (외부 접근 불가)

3. protected

  • 클래스 내부와 파생 클래스 내부에서만 접근이 가능합니다.
  • 외부에서는 접근이 불가능하며, 상속된 파생 클래스에서는 접근 가능합니다.
  • class Employee {
      protected age: number; // 파생 클래스에서 접근 가능
      public position: string;
    
      constructor(age: number, position: string) {
        this.age = age;
        this.position = position;
      }
    }
    
    class ExecutiveOfficer extends Employee {
      func() {
        console.log(this.age); // ✅ 가능 (상속받은 클래스 내부에서 접근 가능)
      }
    }
    
    const employee = new Employee(27, "developer");
    employee.age = 30; // ❌ 오류 발생 (외부 접근 불가)

생성자 매개변수에 접근 제어자 설정하기

타입스크립트에서는 생성자 매개변수에 접근 제어자를 설정하여 필드를 자동으로 선언하고 초기화할 수 있습니다. 이를 통해 코드의 간결성을 높일 수 있습니다.

  • 생성자 매개변수에 public, protected, private 접근 제어자를 설정하면 해당 매개변수가 자동으로 클래스의 필드가 됩니다.
  • 따라서 생성자 내부에서 따로 this.name = name과 같이 초기화하지 않아도 됩니다.
  • class Employee {
      constructor(
        private name: string,
        protected age: number,
        public position: string
      ) {}
    
      work() {
        console.log(`${this.name} 일함`);
      }
    }
    
    const employee = new Employee("이정환", 27, "developer");
    // employee.name = "홍길동"; // ❌ private 필드는 외부에서 접근 불가

이 방법을 사용하면 불필요한 필드 선언과 생성자 초기화를 줄여, 더 간결하고 효율적인 코드를 작성할 수 있습니다.

요약

  1. 접근 제어자
    • public: 모든 범위에서 접근 가능. 지정하지 않으면 기본으로 public.
    • private: 클래스 내부에서만 접근 가능. 외부나 파생 클래스에서도 접근 불가.
    • protected: 클래스 내부와 파생 클래스에서만 접근 가능. 외부에서는 접근 불가.
  2. 생성자 매개변수에 접근 제어자 설정
    • 생성자 매개변수에 접근 제어자를 설정하면 자동으로 필드가 생성되고 초기화됩니다.
    • 필드 선언 및 생성자 내부에서의 초기화 코드를 생략할 수 있어 코드가 더 간결해집니다.

타입스크립트의 접근 제어자는 객체의 내부 상태 보호 캡슐화를 강화하여, 코드의 안정성과 유지보수성을 높이는 데 중요한 역할을 합니다.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유