클래스는 일종의 고유한 속성(property) 과 method 들이 들어 있는 틀이라고 보면 좋을 것 같다.
세부사항(property)은 생성자(constructor)를 통해 함수에 인자를 넣듯이 넣어준다. 생성자 함수를 작성하고, new() 를 사용해 객체를 생성하면 같은 prototype 을 가지는 객체(instance)를 생성할 수 있다.
class Dog { // Dog라는 class를 만들어 줌
// 생성자를 통해 함수에 인자 넣듯이 세부사항을 넣어줌
constructor(name, age, color) { // 생성자 함수 작성
this.name = name; // name property
this.age = age; // age property
this.color = color; // color property
}
// 객체의 property가 함수인 경우, 이 함수를 method라고 부름
info() {
return `${this.name}은 ${this.color}색이고, ${this.age}살 입니다.`
}
}
// Dog class의 속성을 갖는 mydog 생성
// mydog라는 객체는 Dog라는 prototype을 가짐
// instance
const mydog = new Dog('jindo', 3, 'white')
// mydog에 class Dog가 갖고 있는 속성들이 적용됨
mydog
Dog {name: "jindo", age: 3, color: "white"}
mydog.info()
"jindo은 white색이고, 3살 입니다."
// Dog class에 적용된 속성 이외의 속성을 추가할 수 있음. 이는 Dog에는 적용되지 않음
mydog.breed = 'Jindo' // breed property를 추가
"Jindo"
mydog.weight = 13 // weight property를 추가
13
mydog
Dog {name: "jindo", age: 3, color: "white", breed: "Jindo", weight: 13}
// Dog class의 속성을 같은 또다른 변수 yourdog 생성
// instance
const yourdog = new Dog('네그로', 2, 'black')
yourdog
Dog {name: "네그로", age: 2, color: "black"}
yourdog.weight = 5
5
yourdog
Dog {name: "네그로", age: 2, color: "black", weight: 5}
✅ 위와 같이 class를 사용하여 실습하면서 불필요한 코드를 최소화 시키며, 같은 컨셉을 갖는 서로 다른 변수에게 원하는 extra 속성을 자유롭게 넣고, 제거할 수 있었다.
좋은 설계를 하기 위해서, 객체지향을 이해 & 응용하는 것이 중요하다. 같은 코드 반복, 재사용 불가능한 코드 짜기 등..의 비효율적인 코딩에서 벗어나기 위해서 !!