Martin Fowler - Refactoring을 읽고 정리한 글입니다.(240~243p)
예제
// Before
let temp = 2 * (height + width);
temp = height * width;
// After
const perimeter = 2 * (hieght + width); // perimeter : 주변, 외곽
const area = height * width;
temp라는 변수를 let으로 선언하고 수정하고 있는데
밑에는 보면 두 개의 const로 선언해서 쓰고있다.
이렇게 변수를 나누는것.
Motivation
변수는 다양하게 쓰인다. 그 결과 변수의 값이 여러번 할당되기도 한다. for문에서 쓰는 index[i]같은 변수는 실행될때마다 바뀐다. 변수는 값을 메서드가 진행되는 동안 저장한다.
많은 다른 변수들은 간단한 참조를 위해서 장황한 코드가 실행되는 동안 결과를 계속 들고 있는다.
만약에 그 변수들이 여러번 셋 되면 그 변수는 여러 개의 책임을 갖는다는 신호다.
여러 책임을 갖는 어떤 변수든 각각 하나의 책임을 갖는 변수들로 대체되어야 한다.
두개의 다른 역할을 하는 변수를 만드는 것은 읽는 사람에게 매우 혼란스럽다.
Mechanics
- 처음 선언된 변수 이름을 바꿔라 만약에 i = i + something 이런게 있으면, 그건 collecting variable이고 나누지마라. 이런건 sum을 구하거나 string concat이거나 스트림을 쓰거나 콜렉션에 추가하는 변수다.
- 가능하다면 새 변수는 immutable하게 선언해라.
- 변수가 참조하는 모든 레퍼런스를 두번째 할당된 변수로 바꿔라.
- 테스트
- 마지막으로 할당된 변수에 도달할때까지 반복해서 작업한다. 반복할때마다 다음 할당까지 변수이름을 다시 짓고 참조를 바꿔라.
'Web development > Books' 카테고리의 다른 글
Refactoring - Introduce Assertion (0) | 2019.12.31 |
---|---|
Refactoring - Decompose Conditional (0) | 2019.12.31 |
Refactoring - Move Statesments into Function (0) | 2019.12.31 |
Refactoring - Inline Class (0) | 2019.12.31 |
Refactoring - Encapsulate Collection (0) | 2019.12.31 |
댓글