객체 지향 프로그래밍과 함수형 프로그래밍의 대한 개념
데이터와 행동(메서드)를 하나로 묶는 객체를 중심으로 프로그래밍하는 방식.
클래스를 이용해 객체의 템플릿을 정의하고, 그 템플릿을 기반으로 객체를 생성하여 사용.
코드의 재사용성과 유지보수성이 높으며, 직관적인 코드 구조를 가짐.
상태를 가진 객체로 인해 상태 관리가 복잡해질 수 있고, 'side effect' 발생 가능성 존재.
대형 프로젝트에서 코드 재사용성과 모듈성이 요구될 때 유용.
Java, JavaScript, C++, Python 등 많은 언어들이 지원.
클래스와 인스턴스를 이용한 코드 구조화 특징.
class Car {
constructor(name) {
this.name = name;
this.distance = 0;
}
move() {
this.distance += 1;
console.log(`${this.name} moved. Total distance: ${this.distance}`);
}
}
const myCar = new Car('MyCar');
myCar.move(); // "MyCar moved. Total distance: 1"
순수 함수와 불변 데이터를 중심으로 프로그래밍하는 방식.
상태 변경을 최소화하고, 함수의 조합을 통해 로직을 구성.
데이터의 불변성을 보장하여 버그 발생 가능성을 줄이고,
함수의 조합을 통해 유연하게 코드를 구성할 수 있음.
학습 곡선이 가파르고, 특히 고차 함수와 재귀 등의 개념을 이해하는데 어려움이 있을 수 있음.
데이터 분석, 병렬 처리, 동시성 처리 등에서 효과적.
JavaScript, Scala, Haskell 등이 지원.
객체 지향 프로그래밍과 혼용하여 사용하는 경우도 많음.
function createCar(name) {
return { name: name, distance: 0 };
}
function move(car) {
const newCar = { ...car, distance: car.distance + 1 };
console.log(`${newCar.name} moved. Total distance: ${newCar.distance}`);
return newCar;
}
let myCar = createCar('MyCar');
myCar = move(myCar); // "MyCar moved. Total distance: 1"
개인적으론 객체 지향 쪽이 더 깔끔하고 직관적이라고 느꼈다.
자바스크립트는 객체 지향 프로그래밍 언어라고만 배웠어서 함수형 프로그래밍의 특징도 많이 가지고 있다는 것을 처음 알았다. 아직 두 방식으로 프로젝트를 진행해본 적은 없으나, 앞으로 적용 시키면서 진행해보면 굉장히 재밌을 것 같다.