본문 바로가기
Works/개발철학

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

by Vader87 2023. 8. 16.
반응형

소프트웨어는 어떠한 문제를 해결하기 위해 존재합니다. 그렇기 때문에 개발자는 문제를 이해하고 그것에 맞게 설계하여 구현합니다. 이때 문제를 이해하고 설계하는 데 있어 개발자에게 추상적 사고와 구조적 사고는 큰 무기입니다.

보통 추상적, 구조적 사고는 난해하거나 두루뭉술하게 설명될 때가 많습니다. 하지만 이러한 사고를 하는 구체적인 방법론은 분명히 존재합니다. 이 발표에서는 개발자가 추상적이고 구조적인 사고를 하는 구체적인 방법과 이러한 사고를 통해 도메인 모델링, 리팩토링, 아키텍처 등 소프트웨어를 설계하는 법을 소개합니다.

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

https://news.hada.io/topic?id=10378 

 

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

소프트웨어는 어떠한 문제를 해결하기 위해 존재합니다. 그렇기 때문에 개발자는 문제를 이해하고 그것에 맞게 설계하여 구현합니다. 이때 문제를 이해하고 설계하는 데 있어 개발자에게 추상

news.hada.io

https://present.do/documents/64db4b7310ab9a5ae5684fa9

 

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

[인프콘 2023 발표자료] 소프트웨어는 어떠한 문제를 해결하기 위해 존재합니다. 그렇기 때문에 개발자는 문제를 이해하고 그것에 맞게 설계하여 구현합니다. 이때 문제를 이해하고 설계하는 데

present.do

반응형

댓글