728x90
반응형
클래스 구문
클래스는 필드와 메소드로 구성되어있다
class Animal {
constructor(kind){
this.kind = kind;
}
}
class Cat extends Animal {
constructor(name, age, kind){
super(kind)
this.name = name; //여기를 필드라고 함
this.age = age;
}
printName(){
console.log(this.name)
this.sound();
}
sound() {
console.log("야옹")
}
}
타입스크립트 클래스 구문
class Animal {
kind: string
constructor(kind: string){
this.kind = kind;
}
}
class Cat extends Animal {
name: string;
age: number
constructor(name: string, age: number, kind: string){
super(kind)
this.name = name; //여기를 필드라고 함
this.age = age;
}
printName(){
console.log(this.name)
this.sound();
}
sound() {
console.log("야옹")
}
}
접근제한자!!!!!!!!!!!!!!!!!!!!!!!
public
의미: 어디서나 자유롭게 접근가능(생략가능)
클래스 내부에서 접근, 인스턴스 접근가능, 자식 클래스에서도 접근가능
범위: 속성, 메소드
protected(보호)
의미 : 내 클래스 내부, 자식 클래스 내부에서 접근가능 (인스턴스 접근 안됨)
범위 : 속성, 메소드
private(사적인)
의미 : 내 클래스 내부에서 접근가능(자식클래스 접근안됨, 인스턴스 접근 안됨)
인스턴스란 : 클래스를 만든 객체를 인스턴스라고 함
여태까지 public은 생략되어서 못봤을것이다 생략된것 적어주면 밑에 구문처럼 나타낸
예시 구문) 위 타입스크립트 구문과 비교해볼것
class Animal {
kind: string
constructor(kind){
this.kind = kind;
}
}
class Cat extends Animal {
public name: string;
public age: number
constructor(name, age, kind){
.
super(kind)
this.name = name; //여기를 필드라고 함
this.age = age;
}
public printName(){
console.log(this.name)
this.sound();
}
public sound() {
console.log("야옹")
}
}
접근제한자 실습
public
class ClassAnimal {
public name: string; //!!!!!부분 바뀜 현재 public !!!!
constructor(name: string) {
this.name = name;
}
}
class ClassCat extends ClassAnimal {
public getname() : string {
return `cat name is ${this.name}`;
}
}
let cat = new ClassCat("레오");
console.log(cat.getname())
cat.name = "몽이"
protected
class ClassAnimal {
protected name: string; //!!!!!부분 바뀜 현재 protected !!!!
constructor(name: string) {
this.name = name;
}
}
class ClassCat extends ClassAnimal {
public getname() : string {
return `cat name is ${this.name}`;
}
}
let cat = new ClassCat("레오");
console.log(cat.getname())
cat.name = "몽이"
private
class ClassAnimal {
private name: string; //!!!!!부분 바뀜 현재 private !!!!
constructor(name: string) {
this.name = name;
}
}
class ClassCat extends ClassAnimal {
public getname() : string {
return `cat name is ${this.name}`;
}
}
let cat = new ClassCat("레오");
console.log(cat.getname())
cat.name = "몽이"
인스턴스 멤버 - 인스턴스 필드, 인스턴스 메소드로 구성(계속 사용해왔음)
추가내용!!!!!!!!!
정적 멤버 - 정적필드, 정적 메소드 static붙이면 정적 멤버임!!! (객체 접근불가)
접근방법!!!!!
인스턴스
클래스 → 객체(클래스의 인스턴스) → 인스턴스 멤버
let cat = new Cat('레오')
cat.name → (인스턴스 멤버임)
정적
클래스 → 정적 멤버
let cat = new Cat('레오')
ClassCat.name2
정적 예시)
class ClassAnimal {
protected name: string;
//정적 멤버 변수 선언
//this 나 인스턴스 접근할 수 없음. 접근방법 클래스명.변수명
static eye = 2;
constructor(name: string) {
this.name = name;
}
//정적 메소드 클래스명.메소드명
static eat():void{
console.log("먹는다");
}
}
let cat = new ClassCat("레오");
//정적멤버 접근방법
console.log(ClassAnimal.eye) //2
ClassAnimal.eat() //먹는다
추상클래스
추상클래스는 상속만 가능하고 인스턴스(객체)를 생성할 수 없다
사용 키워드: abstract
추상 메소드
메소드의 이름만 선언하고 구체적인 기능은 상속받는 쪽에서 구현한다.
상속받는 클래스는 모두 다 같은 이름의 메소드를 가지며
구현은 각각 다르게 할 수 있다.
구문)
abstract class Person {
name: string;
construtor(name){
this.name = name;
}
abstract work(): void; !!!!!추상메소드는 선언부만 있음!!!!!//선언부
}
class Teacher extends Person {
work():void { !!!!! 추상메소드는 상속받은 쪽에서만 구현부 있음!!!!!! //선언부
console.log("가르키는 일을 합니다") //구현부
}
}
class Engineer extends Person {//선언부
work():void{
console.log("가르키는 일을 합니다" //구현부
}
}
const person1 = new Person() 는 생성(사용) 불가
실습
//선언,상속만 할수 있음
//인스턴스 생성할 수 없음!!!!!!
abstract class Person{
name: string;
constructor(name: string) {
this.name = name;
}
abstract work(): void
}
class Teacher extends Person {
work():void {
console.log("가르킵니다")
}
}
class Engineer extends Person {
work(): void {
console.log("엔지니어 입니다")
}
}
let person1 = new Person("호호"); !!!!!!!생성(사용) 불가능!!!!!
!!!!!!!!!!!!상속받은 메소드로 생성자를 만들수 있음 !!!!!!!!!!!!!!!
let teacher1 = new Teacher("bella");
teacher1.work(); //가르킵니다
let engineer1 = new Engineer("lora")
engineer1.work(); //엔지니어 입니다
728x90
반응형
'typescript' 카테고리의 다른 글
[typescript] react-typscript(usereducer) (0) | 2023.02.24 |
---|---|
[typescript]react - typescript(설치, useState) (0) | 2023.02.24 |
[typescrip] Generic(제네릭) (1) | 2023.02.24 |
[typescript] Enum 열거형 타입 (0) | 2023.02.24 |
[typescript] 배열타입 (0) | 2023.02.24 |
댓글