객체 지향 프로그래밍(OOP)은 Java 및 C++을 비롯한 많은 프로그래밍 언어의 기본이 되는
프로그래밍 패러다임
클래스와 인스턴스, 상속, 캡슐화라는 세 가지 주요 개념에 대해 설명
자료 추상화
객체의 복잡성을 줄이고, 필요한 부분만을 노출시키는 개념
자바스크립트에서는 인터페이스나 추상 클래스를 명시적으로 제공하지 않지만,
메서드를 통해서 필요한 기능만 노출하고 불필요한 세부 사항을 숨길 수 있음.
상속
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + " makes a sound.");
}
}
class Dog extends Animal {
speak() {
console.log(this.name + " barks.");
}
}
let dog = new Dog("Rover");
console.log(dog); //Dog { name: 'Rover' }
dog.speak(); //Rover barks.
위 코드에서 class Dog은 Animal class를 상속 받아 사용한다.
다형성
class Animal {
speak() {
console.log("The animal makes a sound.");
}
}
class Dog extends Animal {
speak() {
console.log("The dog barks.");
}
}
class Cat extends Animal {
speak() {
console.log("The cat meows.");
}
}
let dog = new Dog();
let cat = new Cat();
dog.speak(); // The dog barks.
cat.speak(); //The cat meows.
캡슐화
const Person = function (arg) {
let name = arg ? arg : "zzoon"; // 내부 변수 'name' 선언
//함수 내부에 선언한 변수 이기에 함수 외부에서 Pserson 함수가 반환하는 객체 내부의 메서드를 통해서만 접근 가능
return {
getName: function () {
return name; // 클로저를 통해 'name'에 접근
},
setName: function (arg) {
name = arg; // 클로저를 통해 'name'을 수정
},
};
};
const me = Person(); // Person 함수를 호출하여 객체를 생성
console.log(me.getName()); // zzoon 출력
me.setName("Kim"); // 'name'을 "Kim"으로 변경
console.log(me.getName()); // Kim 출력