# 클린 코더스 강의 12. SOLID Foundation

## **소프트웨어 공학에서 말하는 설계란 무엇인가?**

### **코드가 곧 설계다**

1992 Jack W Reeves "What is Software Design?"

> <https://www.developerdotstar.com/mag/articles/reeves_design.html>

건설에서는 설계는 문서지만 소프트웨어에서는 설계는 **소스코드**이다.

### **설계가 잘못되었을때 나타나는 징후**

#### **Rigidity**

시스템의 의존성으로 인해 변경하기 어려워진다.\
많은 시간이 소요되는 테스트 빌드 \
작은 변화로 인해 전체 리빌드를 유발함

**Fragility**

한 모듈의 수정이 다른 모듈에 영향을 미칠때 발생한다.\
모듈간의 의존성을 제거하기 위해 노력해야 한다.

**Immobility**

재사용을 할 수 없는 모듈이다.\
DB, UI, Framewrok 결합도를 없애기 위해 노력해야 한다.<br>

### **Needless Complexity**&#x20;

우리는 미래를 알 수 없기 때문에 미래를 예측해서 구현한다면 불필요한 복잡성이 생긴다.\
현재 요구사항에 집중해서 개발해야 한다.

> <https://brunch.co.kr/@cleancode/18>

로버트 C 마틴은 우리는 미래를 예측할 수 있는 크리스탈 볼이 없다고 한다.\
우리는 마법의 구술이 없기 때문에 요구사항을 확정하고 이후에 **변경을 불허하는 전략**을 취할 수 없다.

**즉, 변화를 예측하는 것이 아니라 대응하는 것이다.**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kimtaesu.gitbook.io/workspace/undefined/12.-solid-foundation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
