클래스(class): 객체를 만들기 위한 붕어빵 틀
클래스의 구성 요소: 같은 종류의 객체들이 공통으로 가지는 속성, 메서드를 정의함.
1. 속성: 객체의 성질을 결정함.(팥붕, 슈붕)
2. 메서드: 객체에서 제공하는 기능들을 사용하게 해준다.
생성자(constructor): 클래스의 인스턴스를 생성하고 초기화할 수 있게 해줌.
1. 인스턴스를 생성할 때 자동으로 호출된다.
2. 클래스에서 오직 1개의 생성자가 존재함.
3. 보통 생성자로 객체 속성을 초기화 하거나 객체 생성 시에 꼭 되어야하는 초기화 로직을 넣기도함
클래스 접근 제한자
1. public: 클래스 외부에서도 접근이 가능하게 해줌
- 접근 제한자를 설정해주지 않으면 기본적으로 public이 설정된다.
- 민감하지 않은 객체 정보를 누구나 열람할 수 있게 해주거나, 해당 클래스의 특정 기능을 사용해야할 때 많이 사용
2. private: 클래스 내부에서만 접근이 가능하게 해줌
- 일반적으로 클래스의 속성은 private으로 설정함(외부에서 속성을 변경할 수 없게 만든다)
3. protect: 클래스 내부, 상속 받은 자식 클래스에서만 접근이 가능하게 해줌
상속(inheritance): 상속을 통해 기존 클래스의 속성과 메서드를 물려받아 새로운 클래스를 정의할 수 있게 한다. 자식 클래스들은 자체적으로 필요한 속성과 메서드를 추가적으로 정의할 수 있음. ** 상속 구현시 extends를 사용한다 ex) class S20 extends Samsung {...}
super(): 자식 클래스에서 부모 클래스의 속성을 사용할 때 사용해줘야함
makeNoise(){
console.log(`${this.name}는 뿌빠빠빵`)
}
makeNoise(){
console.log(`${this.name}는 무다무다무다`)
}
부모의 함수 동작을 새롭게 정의할 수 있음 => 오버라이딩
class Car {
name: string
constructor(name: string) {
this.name = name
}
makeNoise(){
console.log(`${this.name}는 뿌빠빠빵`)
}
}
class Hd extends Car {
color: string;
wheele?: number;
door?: number;
constructor(name:string, color:string, wheele?:number, door?:number ) {
super(name)
this.color = color
this.wheele= wheele
this.door = door
}
makeNoise(){
console.log(`${this.name}는 뿌빠빠빵`)
}
}
const avante = new Hd("아반떼","white", 4, 4)
console.log(avante)
avante.makeNoise()
class Car {
name: string
constructor(name: string) {
this.name = name
}
makeNoise(){
console.log(`${this.name}는 뿌빠빠빵`)
}
}
class Hd extends Car {
color: string;
wheele?: number;
door?: number;
constructor(name:string, color:string, wheele?:number, door?:number ) {
super(name)
this.color = color
this.wheele= wheele
this.door = door
}
makeNoise(){
console.log(`${this.name}는 뿌빠빠빵`)
}
}
class Kia extends Hd {
year: number;
constructor(name: string, color: string, year: number, wheele?: number, door?: number ) {
super(name, color, wheele, door)
this.name = name
this.color = color
this. wheele = wheele
this.door = door
this.year = year
}
makeNoise(){
console.log(`${this.name}는 무다무다무다`)
}
}
const avante = new Hd("아반떼","white", 4, 4)
const k3 = new Kia("과학-3호기", "black", 21)
console.log(avante)
console.log(k3)
avante.makeNoise()
k3.makeNoise()
추상 클래스: 일반적인 클래스와 다르게 인스턴스화 할 수 없는 클래스
추상 클래스의 존재 의의: 상속을 통해 자식 클래스에서 메서드를 제각각 구현하도록 강제한다.
** 핵심 기능의 구현은 전부 자식 클래스에게 위임한다.
추상 클래스의 사용 방법
1. 추상 클래스나 추상 함수는 abstract 키워드를 사용하여 정의 한다.
2. 추상 클래스는 1개 이상의 추상함수가 있는 것이 일반적임.
abstract class Book {
private author: string;
private title: string
constructor(author: string, title: string ) {
this.author = author, this.title = title
}
getAuthor() : void {
return console.log(this.author);
}
getTitle(): void {
return console.log(this.title)
}
}
class holyTs extends Book {
private price: number
constructor(author: string, title: string, price: number) {
super(author,title)
this.price = price
}
}
let hts = new holyTs("김타스", "홀리타스", 1800)
console.log(hts)
hts.getAuthor()
hts.getTitle()
** 추상 함수는 직접 인스턴스화 시킬 수 없기 때문에 구체적인 클래스 holyTs를 만든 후 인스턴스화 시켰다.