파이썬 클린코드 #3. 좋은 코드의 일반적인 특징

정은경·2020년 9월 6일
0

'좋은 소프트웨어' is '좋은 디자인'

  • '코드' is '디자인'
  • '디자인' is '코드'
  • 클린코드의 궁극적인 목표: 코드를 가능한 견고하고 결함을 최소화하고 완전히 자명하도록 하는 것

훌륭한 소프트웨어 디자인을 위한 몇 가지 원칙

  • 안전하고 고성능이며 유지보수성이 좋기를 바라는 것
  • 견고한 소프트웨어의 개념을 이해
  • 작업 중 잘못된 데이터를 다루는 방법
  • 새로운 요구 사항을 쉽게 받아들이고 확장할 수 있는 유지보수가 쉬운 소프트웨어 설계
  • 재사용 가능한 소프트웨어 설계
  • 개발팀의 생산성을 높이는 효율적인 코드 작성

1. 계약에 의한 디자인 (Design by Contract)

  • 컴포넌트는 기능을 숨겨 캡슐화하고
  • 함수를 사용할 고객에게는 "애플리케이션 프로그래밍 인터페이스(API)"를 노출해야 한다
  • 코드가 정상적으로 동작하기 위해 기대하는 것과, 호출자가 반환 받기를 기대하는 것은 디자인의 하나가 되어야 한다 => 여기서 계약(contract) 개념 생김!
  • 관계자가 기대하는 바를 암묵적으로 코드에 삽입하는 대신 양측이 동의하는 계약을 먼저 한 다음, 계약이 어겼을 격ㅇ우는 명시적으로 왜 계속할 수 없는지 예외를 발생시키라는 것!
  • "계약": 컴포넌트 간의 통신 중에 반드시 지켜야할 몇 가지 규칙을 강제하는 것!
  1. 사전조건: 입력파라미터의 유효성 체크 (호출자가 체크함)
  2. 사후조건: 함수 반환 값의 유효성 체크 (함수 컴포넌트 스스로가 체크함)
  3. 불변식(invariant): 함수가 실행되는 동안에 일정하게 유지되는 것, 함수의 로직에 문제가 없는지 확인하기 위한 것
  4. 부작용

이렇게 계약에 의해 디자인을 하는 이유는

  • 오류가 발생할 때 쉽게 찾아낼 수 있기 때문!
  • 더 중요한 것은 잘못된 가정 하에 코드의 핵심부분이 실행되는 것을 방지하기 위해서!
  • 책임의 한계를 명확히하는데 도움이됨!
  • 사전조건은 "런타임" 중에 확인할 수 있다는 점을 기억하는 것이 중요!
  • 사전조건에 맞지 않는다면 실행하지 않아야 한다!

유효성 검사의 2가지 접근법
1. 관용적인(tolerant) 접근법
: 클라이언트가 함수를 호출하기 전에 모든 유효성 검사를 하도록 함
2. 까다로운(demanding) 접근법
: 함수가 자체적으로 로직을 실행하기 전에 검사하도록 하는 것
=> 일반적으로 가장 안전하고 견고한 방법
여기서 잠깐!
관용적인 것을하던 까다로운 것을 하던 둘중 하나만! 왜?! 중복제거 원칙!

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글