[typescript] 클래스 외부에서 protected 접근 제어자로 메서드 오버라이딩하기

클래스의 멤버들에 대한 접근 제어는 TypeScript에서 중요한 부분입니다. 하위 클래스에서 상위 클래스의 protected 메서드를 오버라이딩하여 사용하는 방법을 살펴보겠습니다.

protected 키워드

protected 키워드는 해당 멤버에 대한 접근을 해당 클래스와 해당 클래스를 상속한 하위 클래스에서만 허용한다는 것을 나타냅니다.

class Animal {
    protected makeSound() {
        console.log('Some sound');
    }
}

위의 예시에서 makeSound 메서드는 protected로 선언되어 있으므로 Animal 클래스 또는 Animal을 상속한 클래스 내에서만 호출할 수 있습니다.

메서드 오버라이딩

하위 클래스에서 상위 클래스의 메서드를 재정의하는 것을 메서드 오버라이딩이라고 합니다.

class Dog extends Animal {
    protected makeSound() {
        console.log('Bark');
    }
}

위의 예시에서 Dog 클래스는 Animal 클래스를 상속하면서 makeSound 메서드를 오버라이딩하여 “Bark”를 출력하도록 변경했습니다.

클래스 외부에서 오버라이딩된 메서드 호출

const dog = new Dog();
// dog.makeSound();  // 에러: 접근이 허용되지 않음

const animal = new Animal();
// animal.makeSound();  // 에러: 접근이 허용되지 않음

Dog 클래스 내에서 makeSound 메서드는 오버라이딩되었지만 클래스 외부에서는 접근이 허용되지 않아 위의 예시들은 모두 에러를 발생시킵니다.

외부 접근을 허용하는 방법

만약 클래스 외부에서도 오버라이딩된 메서드에 접근을 허용하고 싶다면, 해당 메서드를 public으로 선언하면 됩니다.

class Animal {
    protected makeSound() {
        console.log('Some sound');
    }
    
    public makeSoundPublic() {
        this.makeSound();
    }
}

위의 예시에서 makeSound 메서드는 여전히 protected로 선언되어 있지만, makeSoundPublic 메서드를 통해 외부에서 호출할 수 있도록 만들 수 있습니다.

이처럼 TypeScript에서는 protected 키워드를 사용하여 클래스의 일부 멤버에 대한 접근을 제어할 수 있으며, 이를 오버라이딩하여 하위 클래스에서 재정의하는 것이 가능합니다.

위의 예시들을 참고하여, TypeScript에서의 클래스 멤버의 접근 제어 및 오버라이딩에 대해 더 자세히 알아보시기를 권장합니다.

TypeScript 공식 문서 - 접근 제어 TypeScript 공식 문서 - 상속