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

업데이트:

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

개발 공부를 하면서 함수형과 객체지향 프로그래밍 차이점에 대해서 정확히 알지 못하는 것 같아 그 차이점을 알아보자

함수형 프로그래밍??

함수형 프로그래밍은 수학과 밀접한 관계가 있다. 예를 들어 input으로 어떠한 x값이 입력되면 함수 내부에서는 x값으로 어떠한 비즈니스 로직을 처리하고 처리한 결과를 return(output) === f(x) 것으로 간단히 요약하자면 주어진 데이터를 처리해서 결과값을 도출해내는 것 입니다.


즉 어떠한 결과를 만들어낼 때 A함수 + B함수 + C함수 = ABC와 같이 함수들을 묶어서 프로그램을 구성하는 것입니다.

그렇다면 함수형은 객체지향을 완전히 대체할 수 있나?? 함수형이 최고인가??

위와 같은 질문의 적절한 답변은 완전히 대체해서 사용한다기보다는 적절한 상황에서 혼용하여 사용하는 것이 좋다고한다.

객체지향 같은 경우 어떠한 값을 변경할 때 새로운 객체를 만들어내는게 아닌 해당하는 값만 변경하지만 함수형 같은 경우 상태의 값을 변경한다기 보단 어떠한 값이 바뀌었을 때 새로운 객체를 만들어내기 때문에 속도적인 측면에선 느리다고 할 수 있다. 하지만 값의 불변성을 유지하면서 Side Effect를 줄일 수 있다는 것이다.

Side Effect란 부작용으로 어떠한 함수내에서 비즈니스 로직을 처리할 때 함수 외부 값이 변경되게 되면 버그가 발생시에 원인을 찾기 어려워진다.

위와 같이 Side Effect가 발생하지 않게 하기 위해 필요한 함수형 특징인 순수함수가 있습니다. 그 이외 특징에 대해 알아보겠습니다.

  • 1) 순수함수는 외부의 상태값을 참조하거나 외부의 상태를 변경하지 않는 함수로 동일한 입력 값에는 항상 동일한 결과값을 반환해야합니다.
  • 2) Stateless(비상태)는 말 그대로 상태값을 가져서는 안됩니다.
  • 3) Immutablility(불변성)을 유지시켜줘야 합니다. 즉 어떠한 값을 변경해야할 때 값을 변경하는 것이 아닌 새로운 객체를 만들어 전달해야 합니다.
  • 4) First-class(일급객체)는 함수를 변수에 할당하거나 인자로 전달하거나 리턴할 수 있는 특징
  • 5) higher-order-functions(고차함수)는 함수에서 또 다른 함수를 리턴하는 속성을 가지고 있습니다.

그렇다면 자바스크립트는 함수형?? 객체지향??

자바스크립트는 다중 패러다임 프로그래밍 언어에 속한다. 함수형, 객체지향 모두 지원한다.

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

크게 데이터를 다루는 개념과 간결한 코드작성에 대한 관점 차이가 존재한다.

객체지향 프로그래밍같은 경우 클래스와 객체들의 관계를 중심으로 코드 작성이 이루어지고, 상태, 멤버변수, 메서드등이 긴밀한 관계를 가지고 있지만 함수형 프로그래밍같은 경우 값의 연산과 결과를 도출하는 것을 중심으로 코드 작성이 이루어지는 특징이 있다.



참고
드림코딩
테크과학
MDN

댓글남기기