파리외 개발자 2023. 3. 16. 23:06

함수형 프로그래밍

  • operation이 많고 fixed data(회사의 사업자 등록 번호나 제품의 시리얼 번호 등)
  • 서버와 독립적인 stateless
  • pure
  • declerative, 직관적인 코드

객체지향형 프로그래밍

  • operation이 적고 common data(고객의 이름이나 주소 등)
  • 서버와 연관된 stateful
  • side effect
  • imperative, 절차에 집중된 코드

OOP - inheritance

//Inheritance > what it is
//tight coupling
//fragile base class problem
class Parent {
  constructor(name) {
    this.name = name;
  }
  sleep() {}
}

class Child1 extends parent {
  constructor(name, subName) {
    super(name);
    this.subName = subName;
  }
}

class Child2 extends parent {
  constructor(name, subName) {
    super(name);
    this.subName = subName;
  }
}

inheritance - 객체 지향은 상속으로 공통된 상위 객체에서

하위 객체로 상속을 이어가는 방식

큰 상위의 상자를 잘게 쪼개서 하위의 상자들을 만들어 나가는 방식

 

tight coupling - 상속 구조의 상위에서 변화가 일어난다면 하위의 개체들은 모두 영향을 받으므로

결합도가 높을 수 있다.

 

FP - hierarchy

//hierarchy

//Composition > what it has
function getAttack(child) {
  return Object.assign({}, child, { attackFn: () => {} });
}

function child(name, subName) {
  let child = {
    name,
    subName,
  };
  return getAttack(child);
}

child1 = attack() + sleep();
child2 = crying() + sleep();

hierarchy - 함수형은 객체지향과 반대로 작은 상자들을 조합해서 하나의 큰 상자를 만드는 방식

 

FP vs OOP

OOP의 예시로는 rpg게임의 캐릭터 시스템이 있다.

공통된 캐릭터의 특성을 변경하고 싶을 때 상위의 클래스에만 변경을 하면

하위의 모든 클래스에 변경점이 적용된다.

 

FP의 예시로는 온라인 쇼핑몰이 있다.

구매, 환불, 인증, 결제등의 행위들을 단위로 생성하고

조합하거나 추가, 제거함으로써 사용자에게 필요한 기능들을

쉽게 제공할 수 있다.

 

물론 OOP로도 FP처럼 짤 수 있고

FP로도 OOP처럼 코드를 작성할 수 있다.

또한 어떤 방법이 좋다곤 할 수 없고 상황에 맞춰서 어떤 방식의

프로그래밍 아키텍처를 적용할 수 있는지가 중요하다.