You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
위는 타입스크립트에서 에러를 발생시킨다. "Property 'name' does not exist on type 'Chatgpt'. ts(2339)" 타입에러가 발생한다. 타입스크립트로 클래스를 작성할 떄는 생성자 메서드에서 사용될 클래스 속성들을 미리 정의해주어야 한다.
classWaterPurifier{waterAmount: number;constructor(waterAmount: number){this.waterAmount=waterAmount;}wash(){if(this.waterAmount>0){console.log("정수기 동작 성공");}}}letpurifier=newWaterPurifier(30);purifier.wash();purifier.waterAmount=0;purifier.wash();// 동작 안함
물의 양을 30 에서 0으로 바꿨기 때문에 마지막에 동작을 하지 않는다. 이를 해결하기 위해서는 waterAmount에 private 접근제어자를 추가해주면 해결된다. 그러나 접근제어자를 설정하여도 실행 시점(런타입)의 에러는 보장해주지 못하기 때문에 코드는 실행된다.
클래스 접근 제어자 public, private, protected
public
클래스 안에 선언된 속성과 메서드를 어디서든 접근할 수 있다.
private
클래스 코드 외부에서 클래스의 속성과 메서드를 접근할 수 없다. public과 반대되는 개념으로 클래스 안 로직을 외부 세상에서 단절시켜 보호할 때 주로 사용한다.
protected
protected로 선언된 속성이나 메서드는 클래스 코드 외부에서 사용할 수 없다. 다만 상속받은 클래스에서는 사용할 수 있다.
classWaterPurifier{
#waterAmount: number=0;constructor(waterAmount: number){this.#waterAmount =waterAmount;}wash(){if(this.#waterAmount >0){console.log("정수기 동작 성공");}}}letpurifier=newWaterPurifier(30);purifier.wash();purifier.#waterAmount =0;purifier.wash();// 동작 안함
위 예제에서 privte의 실행 결과까지도 클래스 접근 제어자와 일치시키고 싶다면 private 문법(#)을 적용하면 된다.