접근 제한자
- 클래스 기반 객체 지향 언어가 지원하는 접근 제한자(Access modifier) public,private,protected를 지원하며 의미 또한 동일하다.
- 접근 제한자를 명시하지 않았을 때
- 다른 클래스 기반 언어 : protected로 지정
- typescript : public으로 지정
접근 가능성 | public | protected | private |
---|
클래스 내부 | O | O | O |
자식 클래스 내부 | O | O | X |
클래스 인스턴스 | O | X | X |
class Foo {
public x : string;
protected y : string;
private z : string;
constructor(x:string,y:string,z:string) {
this.x=x;
this.y=y;
this.z=z;
}
}
const foo = new Foo('x','y','z');
console.log(foo.x);
console.log(foo.y);
console.log(foo.z);
class Bar extends Foo {
constructor(x:string,y:string,z:string) {
super(x,y,z);
console.log(this.x);
console.log(this.y);
console.log(this.z);
생성자 파라미터에 접근 제한자 선언
- 생성자 파라미터에도 접근 제한자를 선언할 수 있다.
- 접근 제한자가 사용된 생성자 파라미터는 암묵적으로 클래스 프로퍼티로 선언되고 생성자 내부에서 별도의 초기화가 없어도 암묵적으로 초기화가 수행된다.
class Foo {
constructor(public x:string) {}
}
const foo = new Foo('Hello');
console.log(foo);
console.log(foo.x);
class Bar {
constructor(private x:string) {}
}
const bar = new Bar('Hello');
console.log(bar);
console.log(bar.x);
- 만약 생성자 파라미터에 접근 제한자를 선언하지 않으면 생성자 내부에서만 유효한 지역변수가 되어 외부에서 참조 불가능하다.
static 키워드
- ES6 클래스에서 static키워드는 정적(static) 메소드를 정의한다. 정적 메소드는 클래스의 인스턴스가 아닌 클래스 이름으로 호출한다.
- 클래스의 인스턴스를 생성하지 않아도 호출 할 수 있다.
class Foo {
constructor(prop) {
this.prop = prop;
}
static staticMethod() {
return 'staticMethod';
}
prototypeMethod() {
return this.prop;
}
}
console.log(Foo.staticMethod());
const foo = new Foo(123);
console.log(foo.staticMethod());
- Typescript에서는 static 키워드를 클래스 프로퍼티에도 사용할 수 있다.
class Foo {
static instanceCounter = 0;
constructor() {
Foo.instanceCounter++;
}
}
var foo1 = new Foo();
var foo2 = new Foo();
console.log(Foo.instanceCounter);
console.log(foo2.instanceCounter);
참고)
https://poiemaweb.com/typescript-class
잘 정리해 주셨네요 잘 읽고갑니다. : )