decimal

[리뷰] 유연한 소프트웨어를 만드는 설계원칙 본문

일상/북 리뷰

[리뷰] 유연한 소프트웨어를 만드는 설계원칙

silent 2022. 4. 12. 08:09

 

개요

유연한 소프웨어를 만드는 설계 원칙

구성방식은 해당 챕터를 관통하는 예제를 제시 후 이에 설명하면서, 구성요소와 구현방식에 대해 풀어서 설명한다.

책의 내용은 중급자 이상의 내용을 담고있으며, 스스로 개발 프레임워크를 구성할 수 있는 정도의 깊이를 담고 있다.

내용 곳곳에 'Scheme'로 구성된 프로그램 예시가 존재한다.

해당 언어에 익숙하지 않는 독자들은 들어가기 앞서서 부록B를 먼저 보고 읽을 것을 권한다.


목차

1장. 자연과 설계의 유연성

유전체의 특징을 토대로, 프로그램 설계시 가져야할 요소를 설명하고 있다.

기본적으로 프로그램 설계시, Component화 해야 하며, Component들이 모여서 Function가 된다.

즉, mix-and-match 특성을 지녀야 한다.

 

2장. 영역 특화 언어(DSL)

특정 도메인 내 한정된 분야에서 사용되는 언어로 정의함으로써, 문제의 계층화 할 수 있으며 나아가서 프로그램 내 유연성 가질 수 있도록 한다.

DSL 적용방안으로는 다음과 같다.

첫번째, primitive 를 조합하여, combinator를 정의

두번째, 정규식 (regular expression)를 통한 구현

세번째, 기존 요소에 wrapper를 통한 구현

 

3장. 산술 주제의 변형등

DSL에서 "problem domain은 명사들과 동사들 이루어진 하나의 추상이다"라고 정의하였다.

동사들을 procedure로 정의 할 수 있으며, 이번 장에서는 generic procedure 개념을 다룬다.

generic procedure라 함은 산술(arithmetic) 연산의 조합을 말한다.

예를 들어, 사직연산의 조합 부터, π 상수 정의, 사용자 정의 등을 의미한다.

 

4장. 패턴 부합

pattern matching 이라 함은 equality testing 이다. 이는 같음 여부에 대해서 시험함을 의미한다.

같음이라 함은 type, value 등 여러 요인등이 될 수 있다.

pattern matching를 하기 위해서 2개의 구성요소 combinator와 matcher가 필요하다.

 

5장. 평가

DSL를 만든다는 것은 해당 언어를 computational process를 통해서 의미를 부여함을 말한다.

의미를 부여하기 위해서는 interpreter가 computational process을 진행하며, 과정 내 eval/apply 진행된다.

즉, operator와 operand를 eval하면 각각 procedure, parameter를 나오며, 이를 환경 내에서 apply를 통해서 computational process 과정의 연속을 말한다.

 

6장. 계층화

layered programming은 각각의 layer 내 책임소지를 명확하게 하여서, 확장성을 가질 수 있도록 한다.

layer 는 layered data를 받아서, layer 내 procedure에 전달 후 이후 layer에 넘겨준다.

source 데이터를 처리할 때는 premise가 존재하며, 이를 처리하면 처리한 근거를 comment를 포함한다.

 

7장. 전파

Propagation은 다수의 독립적인 전파자들이 정보를 계산, 이를 공유 셀에 기여하며 정보를 병합하는 과정을 말한다.

구성요소는 셀, 전파자, 스케줄러으로써,

셀은 값에 대한 정보누적, 전파자는 funtional procedure, 스케줄러는 활성화된 전파자에게 계산자원 할당을 한다.

전파자 모형의 특성은 충중성(degeneracy), 병렬성, 중복성 으로, 기대효과는 무결성(integrity)과 회복성(resiliency)을 지원한다.

 

- 충중성(degeneracy)

수학적 표현으로 서로다른 선형독립적인 고유함수 (procedure)에서 예상되는 기대값이 같은 경우를 말한다.

 

 


마무리

아쉬운 점으로는 번역됨에 있어서 독자들에게 익숙하지 않은 한자어로 변역됨에 따라서 이해가 안될 수 있으나,

이를 원어 내 단어 그대로 읽어 나가면 좀더 수월하게 읽을 수 있을 것이다.

도서가 풀어나가는 목표는 명확하다.

디자인패턴과 같은 소프트웨어 설계를 다루는 것을 목표로 하지 않고, 소프트웨어 아키텍처의 설계 방향을 중점적으로 다루고 있다.

즉, 일반적이고, 범용성과 확장성을 지닌 소프트웨어 설계을 하고자 함은 변화에 대해서 능동적으로 대체가 가능할 수 있는 요소에 대해서 다양한 방법으로 서술하고 있다.

 

- 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.