# 소프트웨어 설계를 위한 추상적, 구조적 사고

> Clean Markdown view of GeekNews topic #10378. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=10378](https://news.hada.io/topic?id=10378)
- GeekNews Markdown: [https://news.hada.io/topic/10378.md](https://news.hada.io/topic/10378.md)
- Type: news
- Author: [kciter1](https://news.hada.io/@kciter1)
- Published: 2023-08-16T12:34:28+09:00
- Updated: 2023-08-16T12:34:28+09:00
- Original source: [present.do](https://present.do/documents/64db4b7310ab9a5ae5684fa9)
- Points: 56
- Comments: 10

## Topic Body

소프트웨어는 어떠한 문제를 해결하기 위해 존재합니다. 그렇기 때문에 개발자는 문제를 이해하고 그것에 맞게 설계하여 구현합니다. 이때 문제를 이해하고 설계하는 데 있어 개발자에게 추상적 사고와 구조적 사고는 큰 무기입니다.  
  
보통 추상적, 구조적 사고는 난해하거나 두루뭉술하게 설명될 때가 많습니다. 하지만 이러한 사고를 하는 구체적인 방법론은 분명히 존재합니다. 이 발표에서는 개발자가 추상적이고 구조적인 사고를 하는 구체적인 방법과 이러한 사고를 통해 도메인 모델링, 리팩토링, 아키텍처 등 소프트웨어를 설계하는 법을 소개합니다.  
  
* 개발자가 하는 일은 프로그램을 만드는 것  
* 프로그램을 만드는 이유는 특정 문제를 해결하기 위함이고 문제를 해결하는 이유는 비즈니스를 위한 것  
* 프로그램을 만들 때 네 가지 단계로 이루어져 있음  
  * 이해 / 분석 -> 설계 -> 구현 -> 피드백  
* 개발자는 시니어가 될 수록 코드 작성 뿐만 아니라 이 모든 단계에 관여하게됨  
* 시니어는 경험을 기반한 직관을 통해 문제를 빠르게 해결함  
* 하지만 직관은 위험할 수 있음. 따라서 방법론을 익히는 것이 중요  
* 추상적, 구조적 사고가 그러한 방법론의 기초  
* 추상은 요소에서 공통적인 것 혹은 관심있는 것을 추출하는 것  
* 그래서 추상은 사물을 단순화 한다음 재해석하는 것이라 볼 수 있음  
* 요소 환원주의 사고를 통해 단순화하고 재해석 할 수 있음  
* 요소 뿐만 아니라 행동도 추상화가 가능하다.  
* 추상화는 계층이 존재한다.  
  * 적절한 추상화 수준을 정해야 한다.  
  * 과도한 추상화는 실체를 알 수 없기 때문에 좋지 않다.  
* 구조적 사고는 내용을 겹치지 않고 빈틈없이 정리하는 것  
  * MECE 프레임워크와 유사  
* 중요한 것은 무조건 겹치지 않고 빈틈없이 정리되야 한다는 점은 아님  
* 구조화도 추상화처럼 단계가 있습니다. 한 발자국 더 멀리서 보는 것이 가능  
* 추상적이고 구조적인 사고 방식을 하는 구체적인 방법이 존재함  
  * 탑다운과 바텀업  
  * 모델  
    * Classification  
    * Abstraction  
    * Generalization  
  * 프레임워크 사고  
* 소프트웨어 설계에 추상적, 구조적 사고 적용 가능함  
* 소프트웨어 구현 단계를 크게 3가지로 나누면 도메인 모델링, 아키텍처, 코드 작성으로 나눌 수 있음  
* 도메인 모델링은 요구사항을 추상적으로 뽑아내고 점진적으로 확장하는 것이 가능  
* 아키텍처는 일을 하는 방법을 나타냄  
  * 어떻게 일하는가, 어떻게 나누는가  
* 아키텍처는 요구사항 -> 컨셉 -> 구현 -> 피드백 프로세스를 따름  
* 추상적인 아키텍처 컨셉을 점진적으로 구체화하는 것이 가능  
* 프로그래밍 패러다임은 소프트웨어의 구성요소를 바라보는 시선  
* 로직은 세가지 측면으로 바라볼 수 있음. Function, Usecase, Aspect  
* 문법 설탕은 추상화된 프로그래밍 문법  
  * 독이 될 수도 있음  
* 리팩토링은 패러다임, 코드 크기, 소유권, 중복 여부, 수정 가능성, 의존이라는 6가지 관점으로 볼 수 있음  
* 리팩토링은 세 가지 방법이 존재. 추상화, 구조화, 일반화  
* 추상적이고 구조적인 사고력을 기르기 위해선 다양한 경험을 하는 것이 좋음  
* 도식화를 하는것은 큰 도움이됨  
* 직관은 경험주의적 사고. 시간을 절약할 수 있지만 위험할 수 있음  
* 패턴은 추상적인 사고를 익히는데 도움이 됨  
* 꼭 추상적이고 구조적인 것이 만능은 아님

## Comments



### Comment 18365

- Author: gguimoon
- Created: 2023-08-18T08:12:25+09:00
- Points: 1

발표 자료와 내용 요약 고맙습니다.

### Comment 18319

- Author: bbulbum
- Created: 2023-08-17T10:02:32+09:00
- Points: 2

아이디를 보니 발표자 본인이시군요! 인포콘 추첨실패로 못들었는데,, 발표자료 공유해주셔서 감사합니다 :)

### Comment 18332

- Author: kciter1
- Created: 2023-08-17T10:32:08+09:00
- Points: 1
- Parent comment: 18319
- Depth: 1

감사합니다. :D 제 자료가 도움이 되었으면 좋겠네요!

### Comment 18314

- Author: kuroneko
- Created: 2023-08-17T09:37:47+09:00
- Points: 2

상세한 요약 감사합니다.

### Comment 18335

- Author: kciter1
- Created: 2023-08-17T10:33:15+09:00
- Points: 1
- Parent comment: 18314
- Depth: 1

요약이 생각보다 오래걸리더라구요 ^^;; 봐주셔서 감사합니다!

### Comment 18309

- Author: rlwnd1104
- Created: 2023-08-17T08:53:29+09:00
- Points: 2

좋은글과 요약 감사합니다~

### Comment 18334

- Author: kciter1
- Created: 2023-08-17T10:32:36+09:00
- Points: 1
- Parent comment: 18309
- Depth: 1

좋게 봐주셔서 감사합니다 :D

### Comment 18306

- Author: holyachon
- Created: 2023-08-17T00:01:32+09:00
- Points: 2

잘 읽었습니다!  
  
적절한 추숭화 수준을 정해야 한다.  
-> 여기 오타가 있습니다 :)

### Comment 18333

- Author: kciter1
- Created: 2023-08-17T10:32:24+09:00
- Points: 1
- Parent comment: 18306
- Depth: 1

확인 감사합니다. :) 그런데 한 번 포스팅하면 수정이 불가능한 것 같네요 ㅠㅠ

### Comment 18353

- Author: holyachon
- Created: 2023-08-17T17:41:45+09:00
- Points: 1
- Parent comment: 18333
- Depth: 2

아하 제가 몰랐네요. 확인 감사합니다!
