-
Notifications
You must be signed in to change notification settings - Fork 114
20210921 객체지향 vs 함수형 프로그래밍
객체지향 프로그래밍과 함수형 프로그래밍의 특징과 차이점에 대해 파악해봅시다. 그리고 자신이 관심있는 언어 또는 기술 분야에 대하여 이 패러다임을 어떻게 활용할 수 있을지 생각해봅시다.
ex.
— 특징 때문에 객체지향 프로그래밍을 적용하는 것이 좋습니다.
— 특징을 보완하기 위하여 객체지향과 함수형 프로그래밍을 — 방식으로 병합하여 사용하는 것이 좋습니다.
우선, 객체지향과 함수형 프로그래밍은 상호배제적인 관계에 있지 않다고 생각한다.
흔히들 이 둘을 반대되는 개념이라고 생각하는 것 같다. 하지만 이 둘은 사용하는 목적과 사용함으로써 얻을 수 있는 효과가 명확하게 다르다. 둘 중 뭐가 더 나은가 비교하는 것은 덤프트럭과 세단 중 뭐가 좋냐 비교하는 것과 같은 것이라고 생각한다.
이러한 관점에서 객체지향과 함수형 프로그래밍은 공존 이 가능하다고 본다. 다만 각각의 장점과 단점을 잘 파악하고 상황에 맞게 사용할 수 있어야한다.
-
추상화, 상속, 캡슐화, 다형성 을 통해 객체 간의 관계와 상호작용을 정의한다.
-
객체 각각의 역할 이 강조된다.
-
상속, 인터페이스를 통한 재사용성 이 높다.
-
멀티 스레드 환경에서의
race-condition
을 고려하여 동기화 작업이 중요하다.
-
순수함수, 불변객체 등을 통해 부수효과(side-effect)를 지양하는 패러다임
-
명령형이 아닌 선언형 코드를 사용한다.
-
함수를 값으로 취급하는 일급함수를 사용한다.
-
데이터를 immutable하게 유지하므로
race-condition
을 피할 수 있다. -
순수함수를 조합하여 사용하는 것이 쉽지 않다.
-
순수함수를 유지하며 작업하기 쉽지 않다.
IOT, 머신러닝 등 병렬/분산 프로그래밍이 중요한 기술들이 발전하며 동시성에 대한 관리가 용이한 함수형 프로그래밍이 각광받고 있다고 생각한다.
(부수효과가 적고 race-condition을 회피할 수 있으며 디버그가 용이하다는 장점이 함수형 프로그래밍의 붐을 일으킨게 아닌가 싶다.)
하지만 함수형 프로그래밍이 대세가 되었다고 해서 OOP를 함수형 프로그래밍이 온전히 대체할 수 있다고 보지는 않는다.
OOP만의 장점이 존재하고 함수형 프로그래밍에서 제공하지 못하는 부분이 있다.
우리는 개발자 입장에서 내 프로젝트와 조화롭게 작용할 수 있는 패러다임은 무엇이고 각 장단점에 따라 선택적으로 적용할 수 있는 역량을 기르는게 중요하다고 생각한다.