Skip to content

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

jjinny edited this page Sep 29, 2021 · 2 revisions

토론 주제

객체지향 프로그래밍과 함수형 프로그래밍의 특징과 차이점에 대해 파악해봅시다. 그리고 자신이 관심있는 언어 또는 기술 분야에 대하여 이 패러다임을 어떻게 활용할 수 있을지 생각해봅시다.

ex.
— 특징 때문에 객체지향 프로그래밍을 적용하는 것이 좋습니다.
— 특징을 보완하기 위하여 객체지향과 함수형 프로그래밍을 — 방식으로 병합하여 사용하는 것이 좋습니다.

토론 내용

권혁진

우선, 객체지향과 함수형 프로그래밍은 상호배제적인 관계에 있지 않다고 생각한다.

흔히들 이 둘을 반대되는 개념이라고 생각하는 것 같다. 하지만 이 둘은 사용하는 목적과 사용함으로써 얻을 수 있는 효과가 명확하게 다르다. 둘 중 뭐가 더 나은가 비교하는 것은 덤프트럭과 세단 중 뭐가 좋냐 비교하는 것과 같은 것이라고 생각한다.

이러한 관점에서 객체지향과 함수형 프로그래밍은 공존 이 가능하다고 본다. 다만 각각의 장점과 단점을 잘 파악하고 상황에 맞게 사용할 수 있어야한다.

객체지향의 특징

  • 추상화, 상속, 캡슐화, 다형성 을 통해 객체 간의 관계와 상호작용을 정의한다.

  • 객체 각각의 역할 이 강조된다.

  • 상속, 인터페이스를 통한 재사용성 이 높다.

  • 멀티 스레드 환경에서의 race-condition을 고려하여 동기화 작업이 중요하다.

함수형의 특징

  • 순수함수, 불변객체 등을 통해 부수효과(side-effect)를 지양하는 패러다임

  • 명령형이 아닌 선언형 코드를 사용한다.

  • 함수를 값으로 취급하는 일급함수를 사용한다.

  • 데이터를 immutable하게 유지하므로 race-condition 을 피할 수 있다.

  • 순수함수를 조합하여 사용하는 것이 쉽지 않다.

  • 순수함수를 유지하며 작업하기 쉽지 않다.

IOT, 머신러닝 등 병렬/분산 프로그래밍이 중요한 기술들이 발전하며 동시성에 대한 관리가 용이한 함수형 프로그래밍이 각광받고 있다고 생각한다.
(부수효과가 적고 race-condition을 회피할 수 있으며 디버그가 용이하다는 장점이 함수형 프로그래밍의 붐을 일으킨게 아닌가 싶다.)

하지만 함수형 프로그래밍이 대세가 되었다고 해서 OOP를 함수형 프로그래밍이 온전히 대체할 수 있다고 보지는 않는다. 
OOP만의 장점이 존재하고 함수형 프로그래밍에서 제공하지 못하는 부분이 있다. 

우리는 개발자 입장에서 내 프로젝트와 조화롭게 작용할 수 있는 패러다임은 무엇이고 각 장단점에 따라 선택적으로 적용할 수 있는 역량을 기르는게 중요하다고 생각한다.

토론 결과