데이터와 이를 처리하는 함수를 객체로 묶어 설계하는 방식
객체는 속성(데이터)과 메서드(함수)를 포함하고있다.
class Animal { // Animal이라는 클래스를 정의함.틀이라고 생각하자
constructor(name) { // 생성자 함수. Animal 클래스로 객체를 생성할 때 'name' 매개변수를 받아옴. 여기서는 Dog 문자열을 받아옴!
this.name = name; // 'this' 키워드는 Animal클래스의 인스턴스를 가리킴. 즉 dog객체를 가리킴.
// this.name은 객체의 이름 속성에 'name' 매개변수의 값을 할당함.
즉 dog객체의 name은 Dog임
}
speak() { // 'speak' 메서드.
console.log(`${this.name} makes a sound.`); // 'this.name'은 해당 객체의 'name' 속성을 사용함. 콘솔에 동물의 이름과 함께 "makes a sound."를 출력함.
}
}
const dog = new Animal('Dog'); // 'new' 키워드를 사용해 Animal 클래스의 인스턴스인 'dog' 객체를 생성함. 이때 'Dog' 문자열이 생성자에 전달됨. 인스턴스임 !
dog.speak(); // dog 객체의 'speak' 메서드를 호출함. 결과적으로 "Dog makes a sound."가 콘솔에 출력됨.
코드로 확인해보자면 애니멀 클래스에는 모든 동물들이 할수있는 행동같은 메서드들이 포함된다.
예를들어 짖는다. 잔다. 뛴다. 와 같은것들.
그런데 강아지가 짖는소리는 멍멍 고양이는 냐옹~
그걸 애니멀클래스의 정의하면 어긋난다. 때문에 강아지라는 클래스를 확장하여 사용할수있다. 아래 코드를 참고하자 !
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound.`);
}
}
class Dog extends Animal {
constructor(name) {
super(name);
}
wagTail() {
console.log(`${this.name} wags its tail.`);
}
}
class Cat extends Animal {
constructor(name) {
super(name);
}
purr() {
console.log(`${this.name} is purring.`);
}
}
const dog = new Dog('Buddy');
dog.speak(); // "Buddy makes a sound." 출력
dog.wagTail(); // "Buddy wags its tail." 출력
const cat = new Cat('Whiskers');
cat.speak(); // "Whiskers makes a sound." 출력
cat.purr(); // "Whiskers is purring." 출력
불변성유지하며 함수를 중심으로 작성한다.
작은 함수들을 조합하여 복잡한 로직을 구성한다.
// Animal 생성 함수
const createAnimal = name => ({
name: name,
speak: () => {
console.log(`${name} makes a sound.`);
}
});
// Dog 생성 함수
const createDog = name => {
const animal = createAnimal(name);
return {
...animal,
wagTail: () => {
console.log(`${name} wags its tail.`);
}
};
};
// Cat 생성 함수
const createCat = name => {
const animal = createAnimal(name);
return {
...animal,
purr: () => {
console.log(`${name} is purring.`);
}
};
};
// Dog 인스턴스 생성 및 사용
const dog = createDog('Buddy');
dog.speak(); // "Buddy makes a sound." 출력
dog.wagTail(); // "Buddy wags its tail." 출력
// Cat 인스턴스 생성 및 사용
const cat = createCat('Whiskers');
cat.speak(); // "Whiskers makes a sound." 출력
cat.purr(); // "Whiskers is purring." 출력