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

수민·2023년 6월 24일
0

프론트엔드 면접

목록 보기
2/8
post-thumbnail

객체지향 프로그래밍 (OOP)

프로그래밍하려는 대상을 하나의 객체로 정의하는 설계 방법

// javascript
function Car() {
  this.power = false;
  this.position = 0;
}

Car.prototype.start = function() {
  this.power = true;
  console.log('자동차 시동');
}

Car.prototype.moveTo = function(position) {
  if (!this.power) {
    console.log('자동차의 시동이 꺼져 있습니다.);
    return;
  }
  
  this.position = position;
  console.log(`자동차가 ${this.position}으로 이동`);
}

const car = new Car();
car.start();
car.moveTo(10);

특징

  1. 추상화 : 공통적인 속성이나 기능을 묶어서 이름을 붙임
  2. 캡슐화 : 데이터를 은닉하고 데이터의 기능을 노출시키지 않음
  3. 상속성 : 상위 부모 객체의 속성과 특징을 하위 객체가 상속 받음
  4. 다형성 : 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 수행

장점

  • 코드의 재사용이 가능하여 확장 및 유지보수에 용이함
  • 분석과 설계의 전환이 쉬움

단점

  • 처리 속도가 상대적으로 느림
  • 설계에 많은 시간이 소요됨

대표 언어

  • 자바, C#


함수형 프로그래밍 (FP)

프로그래밍하려는 문제를 함수들의 정의와 조합을 통해 해결하는 방법

// javascript
function start(car) {
  car.power = true;
  console.log('자동차 시동');
}

function moveTo(car, position) {
  if (!car.power) {
    console.log('자동차의 시동이 꺼져 있습니다.');
    return;
  }
  
  car.position = position;
  console.log(`자동차가 ${car.position}으로 이동`);
}

const car = { power: false, position: 0 };
start(car);
moveTo(car, 10);

장점

  • 언제든 결과가 동일한 함수를 사용할 수 있음 (순수 함수)
  • 함수의 동작부가 간결해져 객체지향 프로그래밍에 비해 코드 이해도와 가독성이 우수함
  • 테스트가 쉬움

단점

  • 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없음


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

  1. 객체지향 프로그래밍에서는 클래스(객체)가 일급 객체가 되지만,
    함수형 프로그래밍에서는 함수 자체가 일급 객체가 됨
	📍 일급 객체
    	다른 요소들과 아무런 차별이 없이 함수의 인자로도 넘겨질 수 있고, 변수에 대입할 수도 있는 객체
        1️⃣ 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있다.
        2️⃣ 모든 일급 객체는 함수의 반환값이 될 수 있다.
        3️⃣ 모든 일급 객체는 할당의 대상이 될 수 있다.
        4️⃣ 모든 일급 객체는 비교 연산을 적용할 수 있다.
  1. 객체지향 프로그래밍에서는 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있지만,
    함수형 프로그래밍에서는 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있음

    객체지향 프로그래밍
    클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어짐
    따라서 상태, 멤버 변수, 메서드 등이 긴밀한 관계를 가지고 있음
    특히 멤버 변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라짐
    함수형 프로그래밍
    값의 연산 및 결과 도출 중심으로 코드 작성이 이루어짐
    함수는 인자로 받은 값을 별도로 저장하지 않고, 간결한 과정으로 처리하고 맵핑하는 데에 주 목적을 둠

참고

0개의 댓글