15. 설계의 의의와 설계를 대하는 방법

내용


  • 유지 보수성

    • 시스템이 정상 운용되도록 유지 보수하기가 얼마나 쉬운가를 나타내는 정도

  • 레거시 코드

    • 변경하기 어렵고, 버그가 생기기 쉬운 코드

    • 버그가 발생하기 쉬운 구조

      • 응집도 낮은 구조

      • 코드 이해하기 어렵움

    • 가독성이 낮은 구조

      • 읽고 이해하는데 어렵고 시간이 소요됨

      • 로직이 파편화 되어있음

  • 나무꾼의 딜레마

    • 제대로 설계하지 않으면, 로직 변경과 디버그에 많은 시간을 소비하게 됨.

소프트웨어와 엔지니어의 성장 가능성

  • 엔지니어의 자산 = 기술력

    • 레거시 코드는 발전을 막고,

    • 레거시 코드는 고품질 설계 경험을 막고,

    • 레거시 코드는 시간을 낭비하기 한다.

문제 해결하기

![[Pasted image 20250601164041.png]]

  • 기술 부채는 보이지 않고, 마이너스 가치.

코드의 좋고 나쁨을 판단하는 지표

  • 현재 소스코드의 좋고 나쁨을 판단하는 지표.

  • 실행되는 코드의 줄 수

    • 메서드 10줄 이내,

    • 클래스 100줄 이내

  • 순한 복잡도

    • 조건 분기, 반복 처리, 중첩이 많아지면 복잡도가 커진다.

  • 응집도

    • 응집도가 높을 수록 변경 용이성이 높고, 좋은 구조

    • LCOM (Lack of Cohension in Methods)

  • 결합도

    • 모듈 간의 의존도를 나타내는 지표

    • '어떤 클래스가 호출하는 다른 클래스의 수'

  • 청크

    • 기억할 수 있는 정보 덩어리의 단위

    • 인간이 한번 기억할 수 있는 개념은 4+-1

      • 즉 클래스에서 다루는 개념이 4+-1 정도가 되도록 설계해야한다.

코드 분석을 지원하는 다양한 도구

  • Code Climate Quality

    • https://codeclimate.com/

  • http://itools.com/

설계 대상과 비용 대비 효과

  • 무한적 리팩터링할 수 없음.

  • 비용대비 효과가 높은 부분을 노려야함

    • 코어 도메인

정리


  • 나무꾼의 딜레마

    • 제대로 설계하지 않으면, 로직 변경과 디버그에 많은 시간을 소비하게 됨.

  • 현재 코드의 좋고 나쁨을 판단할 수는 있다.

  • 인간이 한번 기억할 수 있는 개념은 4+-1

    • 즉 클래스에서 다루는 개념이 4+-1 정도가 되도록 설계해야한다.

참고


  • https://product.kyobobook.co.kr/detail/S000202521361

Last updated

Was this helpful?