추상화의 의미
프로그래밍에서의 추상화는 복잡한 데이터, 구조, 시스템 등으로부터 핵심 만을 가려내 덜 자세하게 만드는 것, 또는 세부 사항, 절차 등을 감추고 인터페이스 등을 만드는 것으로 복잡도를 낮추는 방법을 말합니다.
추상화의 목적
추상화의 종류
class Person {
constructor(name, age) {
this._name = name; // Private 속성처럼 사용하기 위해 _를 붙임
this._age = age;
}
getName() {
return this._name;
}
getAge() {
return this._age;
}
setAge(age) {
if (age > 0) {
this._age = age;
}
}
}
const person = new Person('John', 30);
console.log(person.getName()); // 출력: John
person.setAge(31);
console.log(person.getAge()); // 출력: 31
function calculateArea(radius) {
return Math.PI * radius * radius;
}
console.log(calculateArea(5)); // 출력: 78.53981633974483
function repeat(operation, times) {
for (let i = 0; i < times; i++) {
operation();
}
}
function sayHello() {
console.log('Hello');
}
repeat(sayHello, 3);
// 출력:
// Hello
// Hello
// Hello
interface Drawable {
draw(): void;
}
class Circle implements Drawable {
draw() {
console.log('Drawing a circle');
}
}
class Square implements Drawable {
draw() {
console.log('Drawing a square');
}
}
function render(drawable: Drawable) {
drawable.draw();
}
const circle = new Circle();
const square = new Square();
render(circle); // 출력: Drawing a circle
render(square); // 출력: Drawing a square
class Animal {
constructor(name) {
if (new.target === Animal) {
throw new Error('Cannot instantiate abstract class');
}
this.name = name;
}
speak() {
throw new Error('Method "speak()" must be implemented');
}
}
class Dog extends Animal {
speak() {
console.log(`${this.name} barks`);
}
}
class Cat extends Animal {
speak() {
console.log(`${this.name} meows`);
}
}
const dog = new Dog('Buddy');
dog.speak(); // 출력: Buddy barks
const cat = new Cat('Whiskers');
cat.speak(); // 출력: Whiskers meows
프로세스 추상화
어떠한 내부 프로세스를 숨기는 것을 말합니다 .예를 들어 데이터베이스가 어떻게 데이터를 저장하는지 모르지만 단순하게 insert, upsert 등의 쿼리로 데이터를 저장할 수 있습니다.
ex) MySQL 아키텍처
코드뿐만 아니라 실제 시스템에서도 추상화는 이뤄져있습니다. 대표적인 예로 데이터베이스 시스템이 있습니다. 데이터베이스 내의 내부프로세스와는 상관없이 “쿼리”를 통해 접근할 수 있습니다.
