- 함수를 복잡하고 중복적이고, 이상한 자료유형을 쓰는거만큼 거지같은게 없다
- 이건 나도 항상 느끼는 바이다.
- 구현에 급급해서 대충 함수를 만들면 거의 패치워크로 만든 옷같아서...어느 부분이 어느 기능을 담는지 알아보기어렵다.
- 메소드 몇개를 추출하고, 이름을 변경하고, 구조를 조금만 손봐도 깔끔해진다.
- 근데 자꾸...귀찮아서 리팩토링을 안한다... 열심히 살자
- 작게, 한기능만 하게 만들어라
- 제일 중요한 규칙
- 거의 3-5줄 정도밖에 안되게 줄여야함
- 즉, if/else/while에 들어가는 블록이 한줄정도여야한다는거임
- 이럴려면, 중첩구조가 생길만큼 함수를 크게 키우지 말아야한다
- 들여쓰기가 1단, 2단을 넘어서면 안됨
- 예시로 줬던 첫 목록은 세가지 일을함
- (페이지가 테스트인지 확인 / 그러면 설정&해체 페이지 넣기 / HTML로 렌더링)
- 이걸 다 쪼개라는거임
- 함수당 추상화 수준은 하나로
- 함수 내 모든 문장의 추상화 수준이 같아야 한가지 일만 함
- 예를 들어 목록 3-1은,
- getHtml()은 추상화 수준이 높음
- String pagePathName = PathParser.render(pagepath);은 중간수준
- 그리고 .append("\n");은 추상화 수준이 아주 낮음
- 내려가기 규칙으로, 코드는 위에서 아래로 읽혀야함
- 한 함수 다음에 나오는 함수는 추상화 수준이 한단계낮은 함수가 나오는식
- switch문?
- 스위치문은 작게 만들기 어려움
- 대신 스위치문을 저차원 클래스에 숨겨놓고 절대로 반복하지 않는 방법이 있음 (다형성 이용)
- SRP가 뭔지 찾아보자...OCP도
- 쨋든 abstract...추상 클래스에 숨겨놓자
- 이 코드는 굉장히 중요해 보이니까 실제로 적용해보자 (내가 인터페이스와 추상화를 잘 안씀)
- 이름은 서술적으로
- 이름 길어지는걸 두려워하지말자
- 이름 붙일때 일관성이 있어야함!!
- includeSetupAndTeardownPages
- includeSetupPages
- includeSuiteSetupPage
- 등등
- 함수 인수는 어떻게 할까
- 이상적인 인수개수는 0개
- 3항은 최대한 피하기, 4개 이상은 특별한 이유가 있어도 사용 ㄴ
- 3-7에서 StringBuffer를 인스턴스 변수로 선언안하고 함수인수로 할 수 있는데도 안한거임
- 테스트할때도 어렵기 때문에 하지말자
- 여러형식들 쓰는경우 (그 경우가 아니면 쓰지말기)
- 단항 - 인수에 질문 던지는 경우, 뭔가를 변환해서 반환하는 경우, 이벤트에 씀
- 플래그 인수 -추하다고한다...나 가끔 썼는데...ㅠ 왜냐하면 함수가 여러일을 한다는 반증이기때문! true면 이걸하고 false면 이걸하니까
- 이항 - 좌표계에서는 씀. 그 외에는 단항으로 바꿀수있다면 바꾸기
- 인수 객체 - 객체를 생성해서 인수를 줄이는건 눈속임이 아니다. 개념을 표현하는것임
- 이름짓기 - 함수는 동사, 인수는 명사로 짓기
- 부수효과 절대 no
- 거짓말과 다름없음
- 하나만 하겠다고 하고 남몰래 다른걸 하는거니까
- 예를 들면 전역변수를 수정해버리는 경우
- 이런경우 시간적인 결합이 어긋나서 혼란이 오는 경우가 있음
- 명령과 조회는 나누어서하자
- 뭐가를 수행하거나 / 뭔가에 답하거나 둘중 1개만
- 오류코드 x 예외처리하기
- 막 if()이거이면~ 이런식으로 오류처리하지말자
- try catch로 깔끔하게!!
- 그리고 try catch는 추하니까....별도 함수로 뽑아낸다
- 오류처리도 한가지 작업이기에 함수로 처리하는것임
- 반복되는 알고리즘 없애기
- 구조적 프로그래밍
- return문은 하나여야함.
- goto같은건 절대 절대 절대 쓰지마라
- break와 continue도 별로안좋다..
- 만약 함수가 작다면 간혹가다가 return break continue를 여러번 써도 괜찮긴하다.
'클린코드' 카테고리의 다른 글
[클린코드 독서] 5장 - 형식 맞추기 (0) | 2022.03.09 |
---|---|
[클린코드 독서] 6장 - 객체와 자료구조 (0) | 2022.02.20 |
[클린코드 독서] 4장 - 주석 (0) | 2022.02.06 |
[클린코드 독서] 2장 - 의미 있는 이름 (0) | 2022.01.23 |
[클린코드 독서] 1장 - 깨끗한 코드 (0) | 2022.01.23 |