클래스 정의
class User{
constructor(name){
this.name = name;
}
write(){
console.log(`${this.name} is writing`)
}
}
class User {
name: string;
constructor(name:string){
this.name = name;
}
writing(){
console.log(`${this.name} is writing`)
}
}
접근 제한자
- 클래스 기반 객체 지향 언어가 지원하는 접근 제한자 지원 : public, protected, private
- 접근 제한자를 생략할 시 암묵적으로 public으로 판단
class Fn{
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 fn = new Fn("x","y","z")
console.log(fn.x)
console.log(fn.y)
console.log(fn.z)
class fun extends Fn{
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);
class Foo {
constructor(x: string) {
console.log(x);
}
}
const foo = new Foo('Hello');
console.log(foo);
readonly 키워드
- readonly가 선언된 프로퍼티는 재할당 금지
private readonly MAX_LEN: number = 5;
static 키워드
- ES6 클래스에서는 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());
class Foo {
static instanceCounter = 0;
constructor() {
Foo.instanceCounter++;
}
}
var foo1 = new Foo();
var foo2 = new Foo();
console.log(Foo.instanceCounter);
console.log(foo2.instanceCounter);
추상클래스
- 하나 이상의 추상 메소드를 포함하여 일반 메소드도 포함할 수 있음
- 내용없이 메소드 이름과 타입만 선언된 메소드 선언할 때, abstract 키워드 사용
abstract class Animal {
abstract makeSound(): void;
move(): void {
console.log('roaming the earth...');
}
}
class Dog extends Animal {
makeSound() {
console.log('bowwow~~');
}
}
const myDog = new Dog();
myDog.makeSound();
myDog.move();```
저는 private, protected가 헷갈리더라구요ㅜ 그래서 protected 클래스를, 상속 관계인 자식 class만 접근이 가능하다고 이해를 했답니담 개념확립에 도움이 될까하여 그적여보았습니다,😀