프로그래밍/Python

[파이썬 클린코드] 3장 (좋은 코드의 일반적 특징) 정리

Dibrary 2022. 10. 5. 09:50
반응형

안녕하세요 Dibrary입니다. 아래 내용은 파이썬 클린코드의 3장 중 핵심 내용만을 정리한 것입니다.

 

1. 계약에 의한 디자인

컴포넌트는 기능을 숨겨 캡슐화 하고 함수를 사용할 고객에게는 애플리케이션 프로그래밍 인터페이스(API)를 노출해야 한다.

코드가 정상적으로 동작하기 위해 기대하는 것과, 호출자가 반환 받기를 기대하는 것은 디자인의 하나가 되어야 한다.

  • 사전조건 = 코드가 실행되기 전에 체크해야 하는 것들
  • 사후조건 = 함수 반환값의 유효성 검사가 수행
  • 불변식 = 함수가 실행되는 동안 일정하게 유지되는 것

 

사전조건 검증에 실패하면 클라이언트의 결함으로인한 것이다
사후조건 검증에 실패하면 특정 모듈이나 제공 클래스 자체의 문제로 인한 것이다

 

중복제거원칙 = 사전조건 검증을 양쪽(클라이언트, 서버)에서 하지 말고 오직 어느 한 쪽에서 해야 한다는 것이다.

사후조건은 특정 속성이 보존되도록 보장해야 한다.

계약은 명시적으로 함수나 메서드가 정상동작하기 위해 기대하는 것이 무엇인지, 무엇을 기대할 수 있는지 정의한다.

 


2. 방어적 프로그래밍

계약에서 예외를 발생시키고 실패하게 되는 모든 조건을 기술하는 대신 객체, 함수 또는 메서드와 같은 코드의 모든 부분을 유효하지 않은 것으로부터 스스로 보호할 수 있게 하는 것

  • 예상할 수 있는 시나리오의 오류 처리 - Error handling procedure
  • 발생하지 않아야 하는 오류 처리 - assertion

Error handling에는 값 대체, 에러 로깅, 예외처리 등이 있다.

 

값 대체 = 소프트웨어가 잘못된 값을 생성하거나 전체가 종료될 위험이 있을 경우 결과 값을 안전한 다른 값으로 대체할 수 있다.

위 코드는 dict 자료에 없는 key로 접근할 때 에러가 나지 않게 하는 방법과 에러가 나는 모습이다. get을 사용할 경우 해당 key의 value가 없으면 default입력값이 출력된다.

 

예외처리 = 함수는 심각한 오류에 대해 명확하고 분명하게 알려줘서 적절하게 해결할 수 있도록 해야 한다.
예외적인 상황을 명확히 알려주고 원래 비즈니스 로직에 따라 흐름을 유지하는것이 좋다.

예외는 오직 한 가지 일을 하는 함수의 한 부분이어야 한다.

수집 가능한 정보를 로그로 남기는 것이 중요하다. 세부 사항을 절대 사용자에게 보여서는 안 된다.

 

excpet를 비워놓지 말자. 비워져 있는 except는 결코 실패하지 않는다. 

오류 처리과정에서 다른 오류를 발생시키고 메시지를 변경할 수도 있다. 이 경우 원래 예외를 포함하는 게 좋다.

위 코드는 raise <e> from <original_exception> 구문을 사용한 코드다.

 

assert는 절대로 발생하면 안 되는 상황에 사용한다.

 


3. 관심사의 분리

소프트웨어는 쉽게 변경될 수 있어야 한다. 리팩토링을 하고 싶다면 적절한 캡슐화가 필요하다.

응집력 = 객체가 작고 잘 정의된 '목적'을 가지고 있어야 하며 가능한 작아야 한다. (개인적으로 이는 SOLID 원칙 중 S와 일맥상통한다고 생각된다.)

결합력 = 두 개 이상의 객체가 서로 어떻게 의존하는지. 결합력은 낮아야 좋다.

 

코드는 가능하면 중복을 피해야 한다. 코드에 있는 지식은 단 한번, 단 한 곳에 정의되어야 한다.

YAGNI = You Ain't Gonna Need It.
유지보수가 가능한 소프트웨어를 만드는 것은 미래의 요구 사항을 예측하는 게 아니다. 디자인 할 때 내린 결정으로 특별한 제약 없이 개발을 계쏙 할 수 있다면, 굳이 필요 없는 추가 개발을 하지 말라는 것

KIS = Keep It Simple. 디자인이 단순할 수록 유지관리가 쉽다.

EAFP = Easier to Ask Forgiveness than Permission. 일단 코드를 실행하고 실제 동작하지 않을 경우에 대응하자.

LBYL = Look before you leap. 실행하기 전에 먼저 무엇을 사용하려 하는지 확인하라.

 

파이썬은 다중상속이 가능하다.
그러나, 다중상속을 하게 되면 어떤 것이 사용될지 모른다.

파이썬은 C3 liniarization 혹은 MRO라는 알고리즘을 사용해서 문제를 해결한다.

 

믹스인 = 코드를 재사용하기 위해 일반적인 행동을 캡슐화해놓은 기본 클래스다.

 


파이썬에서 함수로 보내는 전달인자는 passed by a value 즉, 값에 의한 전달이 이뤄진다.

키워드 인자에 의한 호출은 오로지 명시적으로 파라미터를 지정해야 한다.

가변인자를 사용하려면 해당 인자를 패킹할 변수 이름 앞에 *를 사용한다.

 

함수에 전달하는 인자 갯수가 너무 많으면 전달하는 인자를 모두 포함하는 새로운 객체를 만들어서 사용하자. (일종의 값객체)

728x90
반응형