엉클 밥의 [클린 아키텍처] 독서 스터디를 진행하며, 느낀 생각들을 정리해 보고자 합니다.
02. 벽돌부터 시작하기: 프로그래밍 패러다임
저자는 "패러다임이란 프로그래밍을 하는 방법으로, 대체로 언어에는 독립적이다."라고 소개합니다.
뒤이어 과거부터 현재까지 존재하는 딱 3가지 패러다임, 구조적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍에 대한 이야기를 시작합니다.
각 패러다임은 소프트웨어를 개발하는 우리에게 어떠한 권한과 기능을 제공하지 않습니다.
오히려 "제한"을 요구합니다.
구조적 프로그래밍은 goto문을,
객체지향 프로그래밍은 함수 포인터를,
함수형 프로그래밍은 할당문을 개발자에게 사용하지 못하도록 합니다.
이를 통해 각 패러다임에서 얻고자 하는 것을 장점으로 취합니다.
구조적 프로그래밍은 프로그램을 쉽게 반증 가능하도록 만들고,
객체지향 프로그래밍은 다형성을 이용하여 소스 코드 의존성에 대해 제어권을 획득합니다.
그리고 함수형 프로그래밍은 가변 변수를 제거하여 동시성 문제를 해결합니다.
# 자바와 스프링은 순수한 객체지향인가?
자바 진영의 스프링은 객체지향의 다형성을 극대화 할 수 있도록 도와주는 프레임워크입니다.
사내 레거시 시스템을 보며 항상 드는 의문이 있었습니다.
"자바와 스프링을 사용하긴 하지만, 객제지향의 특성을 전혀 활용하지 않는다면 이게 객체지향 언어를 사용하는 게 맞는 걸까?"
"단순히 순차적인 처리만을 하는데, 이건 절차지향 시스템이 아닐까?"
이 2부를 읽다 보니 이러한 생각이 더 들었습니다.
그리고 조금씩 생각을 정리해 보았습니다.
# 꼭 하나일 필요는 없다.
제가 내린 결론은 세 패러다임은 복합적이란 것입니다.
각 패러다임에서 요구하고 이루고자 하는 목표를 이뤄낸다면, 그 패러다임은 만족된 것으로 보면 되지 않을까 싶었습니다.
그리고 그게 꼭 하나로 정해질 필요는 없는 것 같고, 현대의 언어는 그러지 않는다고 생각했습니다.
이미 대부분의 현대 언어는 goto문을 개발자가 직접 다룰 수 없게 하여, 그대로 구조적인 프로그래밍을 지원합니다.
그리고 일단 자바 언어에서는 함수 포인터를 제공하지 않으니 객체지향 프로그래밍의 요건은 충족되었다고 생각되었습니다.
그리고 소프트웨어 개발자가 얼마나 객체지향의 특성과 장점을 프로그램에 녹여내느냐에 따라 객체지향 패러다임의 색이 더욱 진해진다고 생각되었습니다.
그리고 시스템 전체를 함수형 프로그래밍 방식대로 작성하지 않고, 불변성이 요구되는 특정 기능에 한해서라도
가변변수를 제거하여 람다 계산법으로 문제를 처리하면 그 나름대로 함수형 프로그램이지 않을까 생각하게 되었습니다.
모든 것을 흑백논리로 바라볼 필요는 없는 것 같습니다.

'아키텍처 > 클린 아키텍처' 카테고리의 다른 글
| [클린 아키텍처] 아키텍처 청소부 스터디 후기 (0) | 2023.08.21 |
|---|