본문 바로가기

LANGUAGES, METHODLOGY/Clean Architecture

[클린아키텍처] 2부 : 프로그래밍 패러다임

우리가 개발자로써 업무를 진행하면서 겪게 되는 다양한 애로사항들, 거기에 있어서 우리가 가져야 하는 자세와 중요한 원칙에 대해 1부에서 짚어 보았다면, 이제 2부에서는 우리에게 익숙한 구조적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍으로 정리되는 패러다음들의 핵심이 무엇인지, 그 이전과 그 이후가 어떠한지 설명하고 있다.


권한의 박탈과 구조적 프로그래밍

 

각 프로그래밍 패러다임의 핵심을 로버트 C. 마틴은 '권한을 박탈하는 것'으로 시작과 끝을 맺고 있다. 

프로그래밍 패러다임이 있기 이전인 1950년대에는 어떤 특정한 원칙 없이, 기능 구현을 위한 방법이 말대로 무궁무진하게 열려 있었기 때문에, 개발자들이 필요 이상으로 복잡한 설계를 만들게 되고, 불필요한 세부사항을 양산하는 일이 만연해 있었다. 그리고 더불어 어떤 프로그램이 어떠한 효율을 가지고 있고 얼마만큼 올바르게 동작하는지에 대해 판단할 수 있는 도구가 마땅치가 않았었다.

 

여기서 다익스트라는 순차, 분기, 반복 이라는 세가지 구조를 통해 모든 프로그램을 설명할 수 있다는 사실을 알게 되었고, 이를 이용해 모든 프로그래밍 패러다임의 초석이 되는 '구조적 프로그래밍'이라는 패러다임을 널리 알리게 된다. (이는 확실히 개발에 있어서는 수학에서 사칙연산에 가까운, 필수적이며 없어서는 설명할 수 없는 부분이라 본다)

 

"테스트는 버그가 있음을 보여줄 뿐, 버그가 없음을 보여줄 수는 없다" 라는 다익스트라의 주옥 같은 말과 함께 말미에서 로버트 C. 마틴은 구조적 프로그래밍의 가장 큰 장점을 반증 가능한 단위를 만들어내는 능력이라 말한다. 이러한 부분들은 프로그래밍이 수학보다는 과학에 가까운, 참을 입증하는 것이 아닌 거짓임을 입증하는 증명 원리에 좀 더 부합하기 때문이다.

 

객체지향 프로그래밍

 

아마 컴퓨터 공학도에게 가장 익숙할 객체지향 프로그래밍에 있어서 마틴은 객체지향의 특징으로써 알려진 캡슐화, 상속, 다형성 중 다형성에 초점을 맞추어 객체지향 프로그래밍을 정리한다. 마틴은 이 객체지향 프로그래밍에서 SOLID 원칙 중 '의존성 역전'의 원칙을 뽑아내는 듯 한데, 이를 통해 얻을 수 있는 효과는 각 모듈들의 의존성을 알맞게 '역전' 함으로써 각 모듈들을 독립적으로 개발하고 관리하며, 이를 필요에 따라 '플러그인 아키텍처'로 구성할 수 있음을 어필한다. 이렇게 분리된 모듈 혹은 컴포넌트는 개별적이며 독립적으로 배포가 가능해진다(배포 독립성)

 

함수형 프로그래밍

 

함수형 프로그래밍에서 가장 특징으로 설명되는 것은 '객체의 불변성' 이라고 말한다. 프로그래밍에 있어서 여러 기능을 동시에 수행하게 될 때 맞닥뜨리게 되는 '경합 조건', '데드락', '동시 업데이트' 에 관한 고민들을 함수형 프로그래밍의 '객체의 불변성' 을 통해 해결할 수 있음을 설명한다. 불변하는 객체가 많을 수록, 동시성 문제에서 프로그램은 자유로워지기 때문에, 프로그램의 신뢰도와 내구성을 갖출 수 있게 되는 것이다.


 

2부의 마지막에 있어 마틴은 아래와 같이 프로그래밍 패러다임을 마무리한다.

 

- 구조적 프로그래밍은 제어흐름의 직접적인 전환에 부과되는 규율이다.

- 객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 부과되는 규율이다.

- 함수형 프로그래밍은 변수 할당에 부과되는 규율이다.

 

무엇을 해야하는지에 우선해서, 무엇을 하지 말야아 하는지에 대해 배움으로써,

우리가 보다 이상향에 가까운 프로그램을 만들어 나갈 수 있음을 기억하며, 2부를 마무리하자!

 

 

 

클린 아키텍처

“살아있는 전설이 들려주는 실용적인 소프트웨어 아키텍처 원칙”소프트웨어 아키텍처의 보편 원칙을 적용하면 소프트웨어 수명 전반에서 개발자 생산성을 획기적으로 끌어올릴 수 있다. 《

book.naver.com