드디어 모딥다 프로토타입 파트를 들어갔다.
천천히 이해하면서 넘어가던중 파트 초반에 나온 자바스크립트는 함수형 프로그래밍, 객체지향 프로그래밍을 지원하는 멀티 패러다임 언어이다.
라는 말에 궁금증이 생겨서 이것저것 찾아봄.
객체지향 프로그래밍(Object-Oriented Programming, OOP)이란, 상태와 동작을 하나의 객체에 묶어서 관리하는 방식을 말한다.
함수형 프로그래밍(Functional Programming, FP)이란, 상태를 가지지 않고 같은 값을 넣었을 때 같은 값을 출력하는 순수함수로 데이터를 변형하는 방식을 말한다.
이렇게만 봤을땐 그래서 뭐가 다른건데?! 싶어서 지피티한테 예시코드를 내놓으라했다.
// 객체지향 프로그래밍
class MealOrder {
constructor() {
this.total = 0;
}
addItem(price) {
this.total += price;
}
applyDiscount(percent) {
this.total *= (1 - percent / 100);
}
pay() {
console.log(`총 결제 금액은 ${this.total.toFixed(0)}원입니다.`);
this.total = 0; // 초기화
}
}
const order = new MealOrder();
order.addItem(12000); // 된장찌개
order.addItem(8000); // 김치찌개
order.applyDiscount(10); // 10% 할인
order.pay(); // 총 결제 금액은 18000원입니다.
// 함수형 프로그래밍
const addItem = (total, price) => total + price;
const applyDiscount = (total, percent) =>
total * (1 - percent / 100);
const pay = (total) => {
console.log(`총 결제 금액은 ${total.toFixed(0)}원입니다.`);
return 0; // 결제 후 초기화
};
let total = 0;
total = addItem(total, 12000); // 된장찌개
total = addItem(total, 8000); // 김치찌개
total = applyDiscount(total, 10); // 10% 할인
total = pay(total); // 총 결제 금액은 18000원입니다.
이렇게 보니 좀 이해가 간다!
객체지향 프로그래밍 예시에서 class 문법이 나오는데, 매번 이 class에 대해 이해하고 넘어간 적이 없어 찾아보니 익숙한 생성자함수와 닮아있었다.
생각해보니 프로토타입 파트 초반에 class는 생성자함수의 문법적 설탕이라고 했지!!!
알고보니 이 생성자함수는 ES5까지만 쓰이고 ES6부터 객체지향 프로그래밍엔 class가 사용된다고 한다.
그래서 지피티한테 생성자함수가 더 익숙한데 조진거냐 물어보니

역시 지피티야 듣기 좋은 말만 해준다니까!
어차피 class도 결국엔 생성자함수로 트랜스파일돼서 같은거라고 한다.
그러면서 퀴즈도 내 줌
// class -> 생성자함수 변환
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
// 생성자함수 -> class 변환
function Car(model) {
this.model = model;
}
Car.prototype.drive = function () {
console.log(`${this.model} is driving`);
};
// class -> 생성자함수 변환
class Counter {
constructor() {
this.count = 0;
}
increment() {
this.count++;
}
getCount() {
return this.count;
}
}
// 생성자함수 -> class 변환
function Book(title, author) {
this.title = title;
this.author = author;
}
Book.prototype.describe = function () {
return `${this.title} by ${this.author}`;
};
// class -> 생성자함수 변환
class Timer {
constructor(duration) {
this.duration = duration;
}
start() {
console.log(`Timer started for ${this.duration}ms`);
}
stop() {
console.log(`Timer stopped`);
}
}
이 글을 보고 있는 사람이 있다면 한번 풀어보쉬길...
내가 이해한 바로는 이렇다.
객체지향 프로그래밍은 사용자 관리 등 이미 구조화된 상태를 관리할 때 유리하고,
함수형 프로그래밍은 데이터의 계산, 처리, 필터링 등을 관리할 때 유리하다.
이제 class가 뭔지 알았으니 코드 짤 때도 활용해보는 식으로 익숙해져봐야겠다..!