Front-end/JavaScript
FP vs OOP
파리외 개발자
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처럼 코드를 작성할 수 있다.
또한 어떤 방법이 좋다곤 할 수 없고 상황에 맞춰서 어떤 방식의
프로그래밍 아키텍처를 적용할 수 있는지가 중요하다.