객체 지향과 함수형 프로그래밍

yujin·2023년 10월 31일
0

TIL

목록 보기
4/48
post-thumbnail

객체 지향 프로그래밍과 함수형 프로그래밍의 대한 개념

1. 객체 지향 프로그래밍

객체 지향 프로그래밍이란?

데이터와 행동(메서드)를 하나로 묶는 객체를 중심으로 프로그래밍하는 방식.
클래스를 이용해 객체의 템플릿을 정의하고, 그 템플릿을 기반으로 객체를 생성하여 사용.

장점

코드의 재사용성과 유지보수성이 높으며, 직관적인 코드 구조를 가짐.

단점

상태를 가진 객체로 인해 상태 관리가 복잡해질 수 있고, '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"

2. 함수형 프로그래밍

함수형 프로그래밍이란?

순수 함수와 불변 데이터를 중심으로 프로그래밍하는 방식.
상태 변경을 최소화하고, 함수의 조합을 통해 로직을 구성.

장점

데이터의 불변성을 보장하여 버그 발생 가능성을 줄이고,
함수의 조합을 통해 유연하게 코드를 구성할 수 있음.

단점

학습 곡선이 가파르고, 특히 고차 함수와 재귀 등의 개념을 이해하는데 어려움이 있을 수 있음.

적용 사례

데이터 분석, 병렬 처리, 동시성 처리 등에서 효과적.

  • 빅 데이터 분석에서의 예측 가능성 확보 등

프로그래밍 언어와의 관계

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"

3. etc

개인적으론 객체 지향 쪽이 더 깔끔하고 직관적이라고 느꼈다.
자바스크립트는 객체 지향 프로그래밍 언어라고만 배웠어서 함수형 프로그래밍의 특징도 많이 가지고 있다는 것을 처음 알았다. 아직 두 방식으로 프로젝트를 진행해본 적은 없으나, 앞으로 적용 시키면서 진행해보면 굉장히 재밌을 것 같다.

profile
고통 받는 코딩일기

0개의 댓글