리팩터링 2판을 회사 팀 내 스터디로써 진행한다. 스터디에선 따로 책 내용을 정리를 하지 않고 주마다 정해진 분량까지 읽고 감상을 나눈다. 여기선 개인적으로 매 분량에 대한 정리와 짧은 감상을 올린다.
6장 이후로 각 기법의 절차, 예시보단 배경 위주로 정리한다.
리팩터링 기법 명칭은 빨간색으로 표시한다.
10.5 특이 케이스 추가하기
•
특이 케이스(타입) 객체를 만들어 특이 케이스 검사나 처리 값을 객체의 메소드, 속성으로 대체한다.
10.6 어서션 추가하기
•
항상 참이어야 하는 곳에 어서션을 추가한다.
◦
이 코드의 오류는 개발자의 잘못이다 라고 소통할 수 있게 한다.
10.7 제어 플래그를 탈출문으로 바꾸기
•
제어 플래그를 제거하고 return, break, continue의 제어문으로 바꾼다.
11 API 리팩터링
11.1 질의 함수와 변경 함수 분리하기
•
값을 반환하는(=질의 함수)는 ‘겉보기’ 부수효과가 없어야한다.
◦
캐시를 사용한다면 캐시 상태의 변경은 모르기 때문에 겉보기 부수효과이다.
•
상태를 변경하는(=겉보기 부수효과가 있는) 함수와 분리해야한다.
11.2 함수 매개변수화하기
•
여러 함수의 리터럴을 매개변수화한 새 함수를 만들어 호출마다 변경한다.
느낀점
•
go의 any 타입 어서션은 성공 여부를(두번째 반환) 계속 위로 올려야 한다.
◦
객체(구조체) 생성에서 실패하도록 하면 좀 나을까 싶다.
•
disjoint 대신 순회하며 검사하는게 당연하다고 생각했는데 꽤 많은 언어 기본 라이브러리에서 지원한다(하지만 isDisjointWith 가 있는 콜렉션 객체는 없는 듯?).
•
겉보기 부수효과 - observable state martinfowler.combliki: Observable State