[typescript] protected 접근 제어자와 은닉화

Typescript에서 protected 접근 제어자는 클래스의 멤버 변수 및 메서드를 해당 클래스와 그 클래스를 상속받은 클래스에서 접근할 수 있도록 해줍니다. 이를 통해, 멤버 변수와 메서드를 은폐하고 보다 안전한 상속을 구현할 수 있습니다.

protected 키워드의 사용

class Parent {
    protected name: string;

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

    protected sayHello(): void {
        console.log(`Hello, ${this.name}!`);
    }
}

class Child extends Parent {
    protected age: number;

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

    public introduce(): void {
        this.sayHello();
        console.log(`I'm ${this.age} years old.`);
    }
}

const child = new Child('Alice', 10);
child.introduce();

위의 예제에서 protected 키워드를 사용하여 namesayHello 메서드가 Parent 클래스 내부와 그 클래스를 상속받은 Child 클래스 내부에서만 접근 가능하도록 설정했습니다.

상속과 접근 제어자

protected로 설정된 멤버 변수 및 메서드는 해당 클래스를 상속받은 클래스에서 접근할 수 있으며, 인스턴스에서는 직접 접근할 수 없습니다. 이를 통해 상속받은 클래스에서 부모 클래스의 내부 구현에 접근하여 사용할 수 있고, 이를 통해 코드의 재사용과 유지보수성을 높일 수 있습니다.

protected를 사용해야 할까?

protected를 사용하면 상속의 안전한 사용이 가능해집니다. 다른 클래스에서 잘못된 용도로 상속된 메서드나 멤버 변수에 접근하는 것을 막을 수 있으며, 코드 유지보수성을 더 높일 수 있습니다.

protected는 클래스의 내부 구현을 외부로부터 은폐함으로써 캡슐화를 실현하고, 상속에 의한 다형성이나 동적 바인딩을 구현하는 데 있어 중요한 역할을 합니다.

결론

protected 접근 제어자를 사용하여 클래스의 내부 구현을 외부에서 은폐하고, 상속을 안전하게 사용할 수 있도록 할 수 있습니다. 이를 통해 코드의 안정성과 유연성을 높이고, 객체 지향 프로그래밍의 핵심 원칙인 캡슐화와 상속을 적절히 활용할 수 있습니다.

참고: Typescript Handbook - Protected