[Programming Foundation] 멀티 패러다임

멀티 패러다임 언어의 특징

Posted by lim.Chuck on December 6, 2024

멀티 패러다임이란?

하나의 프로그래밍 언어에서 여러 가지 프로그래밍 방식을 지원하는 것을 말합니다. JavaScript는 대표적인 멀티 패러다임 언어입니다.

1. 객체지향 프로그래밍 (OOP) Object-Oriented Programming

객체를 기반으로 프로그램을 구조화하는 패러다임입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 클래스 기반 객체지향
class Car {
  constructor(brand, model) {
    this.brand = brand;
    this.model = model;
    this.speed = 0;
  }

  accelerate() {
    this.speed += 10;
    console.log(`현재 속도: ${this.speed}km/h`);
  }

  brake() {
    this.speed = Math.max(0, this.speed - 10);
    console.log(`현재 속도: ${this.speed}km/h`);
  }
}

const myCar = new Car("현대", "소나타");
myCar.accelerate(); // 현재 속도: 10km/h

2. 함수형 프로그래밍 (FP) Functional Programming

순수 함수와 불변성을 강조하는 패러다임입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 함수형 프로그래밍 예시
const numbers = [1, 2, 3, 4, 5];

// 순수 함수 사용
const double = (x) => x * 2;
const isEven = (x) => x % 2 === 0;

// 데이터 변환
const result = numbers
  .map(double) // [2, 4, 6, 8, 10]
  .filter(isEven) // [2, 4, 6, 8, 10]
  .reduce((a, b) => a + b, 0); // 30

// 함수 합성
const compose = (f, g) => (x) => f(g(x));
const addOne = (x) => x + 1;
const multiplyTwo = (x) => x * 2;
const addOneThenMultiply = compose(multiplyTwo, addOne);

3. 절차적 프로그래밍

순차적으로 실행되는 명령어들의 모음입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 절차적 프로그래밍 예시
let total = 0;
let count = 0;

// 순차적인 처리
for (let i = 1; i <= 100; i++) {
  if (i % 2 === 0) {
    total += i;
    count++;
  }
}

console.log(`짝수의 합: ${total}`);
console.log(`짝수의 개수: ${count}`);

실제 활용 예시 (패러다임 혼합)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// 쇼핑몰 시스템 예시
class ShoppingCart {
  constructor() {
    this.items = [];
  }

  // 객체지향적 방식
  addItem(item) {
    this.items.push(item);
  }

  // 함수형 프로그래밍 방식
  calculateTotal() {
    return this.items
      .map((item) => item.price)
      .reduce((sum, price) => sum + price, 0);
  }

  // 절차적 프로그래밍 방식
  printReceipt() {
    let total = 0;
    console.log("=== 영수증 ===");

    for (let item of this.items) {
      console.log(`${item.name}: ${item.price}원`);
      total += item.price;
    }

    console.log(`합계: ${total}원`);
  }
}

// 사용 예시
const cart = new ShoppingCart();
cart.addItem({ name: "노트북", price: 1000000 });
cart.addItem({ name: "마우스", price: 50000 });

console.log(`총액: ${cart.calculateTotal()}원`);
cart.printReceipt();

각 패러다임의 장단점

  1. 객체지향 프로그래밍

    • 장점: 코드 재사용성, 유지보수 용이
    • 단점: 복잡한 설계가 필요할 수 있음
  2. 함수형 프로그래밍

    • 장점: 예측 가능한 결과, 테스트 용이
    • 단점: 학습 곡선이 높을 수 있음
  3. 절차적 프로그래밍

    • 장점: 단순하고 직관적
    • 단점: 코드 재사용성이 낮음

사용 시 고려사항

  1. 프로젝트 특성에 맞는 패러다임 선택

    • 작은 프로젝트: 절차적 프로그래밍
    • 큰 규모의 애플리케이션: 객체지향
    • 데이터 처리: 함수형 프로그래밍
  2. 팀의 역량과 선호도 고려

    • 팀원들의 익숙한 패러다임 고려
    • 유지보수성 고려
  3. 일관성 유지

    • 선택한 패러다임을 일관되게 사용
    • 필요한 경우 패러다임 혼합 사용

이러한 멀티 패러다임의 특성을 잘 활용하면, 상황에 가장 적합한 프로그래밍 방식을 선택하여 효율적인 개발이 가능합니다.