좋은 설계에 대한 생각

armedHeistKino·2023년 11월 17일

학교를 다니면서 알게 된 형이 있는데, 그분이 쏟아낸 상당한 지식과 기술을 이해할 수 없었다. BE에 대한 학습 경험이 없는 것과 비롯하여 객체에 대한 고민을 해본적이 없기 때문에 당연한 결과일 것이다.

그 형에게는 미안한 얘기지만, 처음에 객체나 엔터티가 무엇인가와 같이 근본적인 고민을 공자왈 맹자왈 따위의 현학적 철학으로만 생각했는데... 저번 수요일의 대화로 좀 많은 것을 깨닫게 되었다.

다만, 내가 오롯이 생각하고 이해하고싶은 욕심이 있어서 내 생각을 적어둔다.

좋은 설계란?

영속적 의도.

  1. 설계를 결정하는 주변 환경 -- 제 3자에 의한 솔루션third party solution의 변경, 제품의 규모 사양 등
  2. 시스템 부분의 동작을 결정하는 가정 -- 작동 조건
  3. 시스템 부분의 동작 오류를 감지, 보정하는 조건 -- Reference to null, Failure of fetch 등
    의 변화가 미치는 영향이 초래하는 비용을 최소한으로 줄인다.
  • 데이터베이스 연동 컴포넌트와 데이터베이스 연산 컴포넌트를 분리.
  • 조건에 따른 행동을 수행하는 컴포넌트를 행동 컴포넌트로 객체화; 코드 실행의 역전.

의도의 명확함.

설계 업무와 전혀 관계 없는자 -- 특히, 설계 업무 담당자여도 초기의 설계 의도를 파악하지 못하는 자에게도 설계에 의한 구조로써 의도된 사용(과 시스템이 견딜 수 있는 정도의 확장)을 도모한다.

  • 특히 소프트웨어 생산에서 코드 삽입을 특정 방향으로만 유도하는 것.
  • 영속적 설계로 의도가 흐려진 경우에는 이를 감내할 수 있다는 의미기도 하다.

결국 소프트웨어 (설계자)도

소프트웨어의 생애주기에서 영구적으로 초기의 설계 기치를 유지하여, 사업 결정의 변화나 소프트웨어에 관한 사양 변화에도 유연한 시스템을 구축하고 싶어함.
관심사가 바뀌며 소프트웨어에 변경 압력이 가해졌을 때, 의도된 방향으로만 소프트웨어가 변화하도록 하고 싶어함.

다음에 할 것: 객체는 좋은 설계와 무슨 관련이 있는가?

profile
학부생이 아는척하기

0개의 댓글