ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (TypeScript) - 접근 제어자
    개발/TypeScript 2025. 8. 26. 11:27
    반응형

    ■ 접근 제어자 (access modifier)

     

    : 타입스크립트 클래스에서만 제공하며, 특정 클래스를 만들 때 특정 필드나 메서드에 접근할 수 있는 범위를 설정해준다.

    ex) public / private / protected

    const employee = new Employee('송송', 27, 'developer');
    employee.name = '히히';
    employee.age = 17;
    employee.position = 'designer';

     

    인스턴스를 생성하고 값을 세팅할 수 있는 이유는 기본적으로 클래스의 접근제어자가 public 으로 설정돼

    아무 제약 없이 누구나 접근이 가능하기 때문이다.

     

     

    만약 접근 프로퍼티를 private 으로 바꾸면

    해당 클래스 내에서만 엑세스 할 수 있게 바뀐다.

    따라서 클래스 밖에서는 점표기법으로 접근도 읽을 수도 없게 된다.

     

        //메서드
        work() {
            console.log(`${this.name} working`);
        }

     

    만약 접근을 원한다면, 클래스 내부의 메서드를 통해서만 접근이 가능하다.

     

    class ExecutiveOfficer extends Employee {
        // 필드
        officeNumber: number;
    
        constructor(name: string, age: number, position: string, officeNumber: number) {
            super(name, age, position);
            this.officeNumber = officeNumber;
        }
    
        //메서드
        func() {
            console.log(`${this.name} working`); //파생클래스에선는 접근 불가!
        }
    }

     

    private 은 해당클래스에서만 접근이 가능하므로 아무리 파생클래스여도 접근이 불가능하다.

     

        protected age: number;
        //메서드
        func() {
            console.log(`${this.age}`);
        }

     

    외부에서는 접근을 막지만 파생클래스에는 접근을 허용하고 싶을 때 사용하는 것이 바로 protected 이다.

    protected 를 사용하면 private 와는 다르게 파생클래스에서는 사용이 가능하게 된다.

     

    class Employee {
        //필드 (<-생성자 접근제어자 작성 시 해당 부분 제거 필요!)
        private name: string;
        protected age: number;
        position: string;
    
        constructor(private name: string, protected age: number, public position: string) { //값 초기화도 자동으로 해줌
            this.name = name;
            this.age = age;
            this.position = position;
        }

     

    생성자에 접근제어자를 달아줄 수 있는데,

    그렇게 되면 생성자가 알아서 필드를 생성하므로 기존에 정의했던 필드를 지워줘야 한다.

     

    더불어 생성자에 접근제어자 작성 시, 초기화도 알아서 해준다.

    따라서 하단에 this.name = name 을 별도로 적어주지 않아도 된다.

     

    클래스로 만든 객체의 프로퍼티를 함부로 외부에서 수정할 수 없도록 해야한다. (=정보의 은닉화)

    이를 접근제어자를 통해 할 수 있는 것이다.

    반응형
Designed by Tistory.