SW Engineering/Architecture

Architecture와 Programming Paradigm

민몬+ 2021. 9. 28. 10:40

현재 Programming 패러다임에는 크게 세 가지가 있다.

Procedure Programming, Object-Oriented Programming, Functional Programming

이 세 개의 패러다임을 SW Architecture관점에서 정의한다.

 

Procedure Programming

단순한 명령어의 순차적 수행이 아닌 루틴, 서브루틴, 함수 등을 이용한 프로그래밍 패러다임이다.

여기서 'Procedure'은 '절차적인' 이라는 뜻이 아닌 프로그래밍에서 'Procedure'를 의미한다.

Procedure : 필요한 작업을 순서대로 수행하기 위해 '명령을 꾸러미로 만든 함수

 

'Procedure Programming'의 등장 배경은 '수학적 증명'이다.

프로그램은 '순차', '분기', '반복'이라는 구조만으로 표현할 수 있으며 이 세가지 구조는 각각 증명이 가능하다.

프로그램을 증명이 가능한 단위로 구성하면 그 프로그램은 '참'이라는 생각에서 시작되었다.

즉, 이 패러다임은 프로그램을 증명 가능한 단위분해하는 것에 초점을 둔다.

'goto'문은 이러한 분해에 걸림돌이 되므로 시간이 지남에 따라 사라지게 되었다.

 

SW Architecture 관점에서 'Procedure Programming'은 '기능적 분해'에 영향력을 가진다.

SW Architect는 Module, Component, Service가 증명이 가능하도록 분주히 노력해야 한다.

 

-참고-
증명이라는 단어를 썼지만 프로그래밍의 수학적 증명은 실패했다.
프로그래밍에서 증명은 과학적 증명을 의미한다. '프로그램이 틀림을 증명하기 위해 최선을 다하고 이를 실패함으로써 프로그램이 참임을 증명한다.'

 

Object-Oriented Programming

흔히 'Object-Oriented Programming'을 설명할 때 캡슐화, 상속, 다형성 세 가지 특징을 이야기하곤 한다.

하지만 OO가 아닌 언어들도 위 세 가지 특징을 지원하기 때문에 이는 명확히 정답이라 할 수 없다.

하지만 SW Architecture 관점에서 'Object-Oriented Programming'의 정의는 명확하다.

OO란 다형성을 이용해 소스 코드 의존성에 대한 절대적인 제어 권한을 획득할 수 있는 능력이다.

 

OO 언어는 기존 언어가 구조체와 함수 포인터를 통해 지원하던 다형성을 좀 더 편리하고 안정적으로 지원한다.

Object-Oriented Programming은 다형성을 통해 의존성의 방향을 결정하며 이는 강력한 힘을 가진다.

 

각 모듈이 다형성을 통해 플러그인이 가능해지고 이로 인해 배포, 개발에 있어 독립성을 갖게 한다.

즉, 다형성은 각 모듈 경계의 의존성을 제어하여 모듈에 독립성을 부여한다.

 

Functional Programming

여러 패러다임중 가장 먼저 만들어졌지만 최근 들어 주목받는 패러다임이다.

어려운 내용이기 때문에 자세한 내용은 'Functional Programming' 카테고리에서 다룰 예정이다.

'Functional Programming'의 중요한 특징은 클로저 내에서 변수의 값이 변화하지 않는다는 것이다.

즉, SW Architecture 관점에서 주목해야 할 'Functional Programming'의 특징은 불변성이다.

 

동시성 애플리케이션에서 우리는 다양한 문제(Race Condition, Dead Lock 등)를 마주한다.

이러한 문제는 가변 변수가 없다면 절대로 발생하지 않는다. 즉, 불변성을 통해 해결할 수 있다.

 

불변성을 실현하기 위한 방법은 아래 두 절차를 통해 실현할 수 있다.

  1. 변수를 변경하는 컴포넌트와 그렇지 않은 컴포넌트를 분리한다. (위치를 결정한다.)
  2. 가변 변수들은 적절한 수단(Transaction Memory, Atomic 변수 등)을 통해 보호한다. (규칙 부과)

즉, Functional Programming은 Data의 위치와 접근 방법에 대해 규칙을 부과한다.

 

 

결론

정리하자면 프로그래밍의 패러다임은 SW Architecture의 세 가지 관심사의 기반이 된다.

  1. 모듈 간 경계의 의존성을 정의하는 Object-Oriented Programming 
  2. Data의 위치와 접근 방법에 규칙을 부과하는 Functional Programming
  3. 모듈의 기반 알고리즘을 정의하는 Procedure Programming

'SW Engineering > Architecture' 카테고리의 다른 글

단일 책임 원칙 ( SRP : Single Responsibility Principle )  (0) 2021.09.30
Architecture란?  (0) 2021.09.28