객체지향 프로그래밍

  • 함수 호출의 다형성을 사용할 때, 호출자의 소스코드가 피호출자의 소스코드에 의존하지 않아도 되도록 하는 기술
  • 다형성을 기반으로 하여, 개발 및 테스트, 유지보수가 용이한 프로그램 구조

함수형 프로그래밍

  • f(a) == f(b) when a == b. (참조 투명성)
  • 즉, 함수 f 가 자신의 결과를 변화시키는 전역 상태를 변경하면 안된다는 것을 뜻함
  • 참조 투명성을 기반으로 하여, 실행 중인 시스템을 외부에서도 예상가능한 상태로 유지하도록 하는 프로그램 구조

객체지향 vs. 함수형

애시당초 이 두 가지 개념은 상호배제의 관계가 아니라 직교하는 관계이다. 스스로 생각하기에는 엔터프라이즈급 프로그램에서 참조 투명성을 100% 지킬 수 있는 비즈니스 구조는 없을 것으로 생각한다.
(물론 함수형 프로그래밍에서는 구조체(데이터) 자체의 상태를 변경하지 않고, 이를 호출하는 상위 함수로 하여금 갱신된 상태값을 가진 새로운 구조체를 생성하여 반환하는 것으로 참조 투명성을 지키면서도 내부 상태를 변경할 수는 있다)

하여 프로그램의 메인 관점은 객체지향 프로그래밍을 지향하되, 참조 투명성을 거의 100% 지킬 수 있는 프로그램의 일부 비즈니스에 해당하는 라이브러리, 클래스 등의 조각에 함수형 프로그래밍을 부분적으로 적용하는 것이 바람직 하다고 생각한다.
이런 구조를 띄게 된다면, 전체적으로는 개발 및 유지보수가 용이하면서도 부분적인 코드에 대해서는 외부에 영향을 받지 않는 안정성이 높은 구조가 만들어지지 않을까 생각한다.


참고

https://mangsby.com/blog/programming/fp-vs-oop/