티스토리 뷰
Summary of 'Clean code' by Robert C. Martin
https://gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29
기본 규칙
- 스탠다드 컨벤션을 지켜라.
- 간단함을 유지하라. 간단할수록 좋다. 복잡도를 최대한 줄여라.
- 보이스카우트 규칙. 캠프장을 발견했을 때보다 더 깨끗하게 하고 떠나라
- 근본적인 원인을 찾아라. 항상 문제의 근본을 찾아라.
디자인 규칙
- 설정 가능한 데이터를 높은 수준으로 유지하라.
- if/else나 switch/case 대신 다형성을 선호하라.
- 다중 스레드 코드를 분리하라.
- 과도한 설정가능함 배제라.
- 의존성 주입을 사용하라.
- 디미터의 법칙을 따르라. 클래스는 직접적인 종속성만 알아야 한다.
이해가능성 팁
- 일관성을 유지하라. 어떤 방식으로 어떤일을 처리하면, 비슷한 건 같은 방법으로 처리하라.
- 설명 변수를 사용하라. (Use explanatory variables.)
- 경계 조건(Boundary conditions)을 캡슐화하라. 경계 조건은 추적하기 힘들다. 그것들을 한 곳에서 처리하라.
- 원시 타입보다 전용 밸류 오브젝트를 선호하라.
- 논리적 의존성을 피하라. 같은 클래스의 다른 것에 의존해서 동작하는 메서드를 작성하지 마라.
- 부정 조건을 피하라.
이름 규칙
- 모호하지 않고 설명하는 이름을 사용하라.
- 의미있는 차이를 만들어라.
- 발음 가능한 이름을 사용하라.
- 검색 가능한 이름을 사용하라.
- 매직 넘버를 이름있는 상수로 바꿔라.
- 인코딩을 피하라. 접두사나 타입 정보를 추가하지 마라.
함수 규칙
- 작게!
- 하나만 하라.
- 설명적인 이름 사용하라.
- 인수를 적게 하라.
- 사이드 이펙트가 없게 하라.
- 플래그 인수를 하용하지 마라. 메서드를 플래그 없이 클라이언트에서 호출할 수 있는 독립적인 메서드로 분리하라.
주석 규칙
- 항상 코드 내에서 설명하려고 하라.
- 장황하게 쓰지마라.
- 명백한건 쓰지마라.
- 닫는 괄호를 쓰지마라.
- 코드를 주석처리하지말고, 제거하라.
- 의도를 설명하기 위해 사용하라.
- 코드를 명확하게 하기 위해 사용하라.
- 결과에 대한 경고로 사용하라.
소스코드 구조
- 개념을 수직적으로 분리하라.
- 관련된 코드는 수직적 밀도로 나타나야한다.
- 변수를 사용하는 곳에 가깝게 위치하라. (Declare variables close to their usage.)
- 의존하는 함수는 가까이 있어야 한다.
- 비슷한 함수는 가까기 있어야 한다.
- 함수를 아래 방향으로 놓아라. (Place functions in the downward direction.)
- 라인을 짧게 하라.
- 수평 정렬을 사용하지 마라.
- 관련된 것을 연관짓고, 관련 없는 것을 분리하기 위해 공백을 사용하라.
- 들여쓰기를 깨지 마라.
객체와 자료구조
- 내부 구조를 숨겨라.
- 자료구조를 선호하라.
- 하이브리드 구조를 피하라.(반은 오브젝트 반은 데이터)
- 작아야 한다.
- 한 가지만 하라.
- 인스턴스 변수 개수를 적게.
- base 클래스는 그들의 파생물에 대해 알지 못해야 한다.
- 동작을 선택하기 위해 코드를 함수로 전달하는 것보다 많은 함수를 가지고 있는게 낫다.
- non-static 메서드를 static메서드 보다 선호하라.
테스트
- 하나의 테스트에 하나의 결과
- 읽을 수 있게
- 빠르게
- 독립적인
- 반복적인
나쁜 코드
- 경직성. 바꾸기 어려운 소프트웨어. 작은 변화가 연쇄적인 후속 변화를 야기한다.
- 취약성. 작은 변화 때문에 소프트웨어 여러 곳이 고장난다.
- 이동성 없음. 관련된 위험과 높은 노력 때문에 코드의 일부를 다른 프로젝트에서 재사용할 수 없다.
- 불필요하게 복잡함
- 불필요하게 반복함
- 불투명. 코드를 이해하기 어렵다.
'etc.' 카테고리의 다른 글
[Xcode] Improving the Speed of Incremental Builds 번역 (0) | 2022.10.02 |
---|---|
[Xcode] libc++abi.dylib: terminate_handler unexpectedly threw an exception 해결하기 (0) | 2022.08.19 |
[Design Pattern] SOLID 원칙 - 객체 지향 설계 (0) | 2021.07.17 |
[Architecture pattern] iOS VIPER 란 (0) | 2021.02.02 |
[Design Pattern] Swift Singleton 만들기 (0) | 2021.01.27 |
댓글
공지사항