😀 책에서 기억하고 싶은 내용을 써보세요.
리팩터링 전
let a = height * width;
리팩터링 후
let area = height * width;
배경
- 명확한 프로그래밍의 핵심은 이름짓기다.
- 변수는 프로그래머가 하려는 일에 관해 많은 것을 설명해준다.
- 단, 이름을 잘 지었을 때만 그렇다.
- 특히 이름의 중요성은 그 사용 범위에 영향을 많이 받는다.
- 한 줄짜리 람다식에서 사용하는 변수는 대체로 쉽게 파악할 수 있다.
- 맥락으로부터 변수의 목적을 명확히 알 수 있어서 한 글자로 된 이름을 짓기도 한다.
- 자바스크립트와 같은 동적 타입 언어라면 이름 앞에 타입을 드러내기도 한다.
- 함수 호출 한 번으로 끝나지 않고 값이 영속되는 필드라면 이름에 더 신경 써야 한다.
절차
- 폭넓게 쓰이는 변수라면 변수 캡슐화하기를 고려한다.
- 이름을 바꿀 변수를 참조하는 곳을 모두 찾아서, 하나씩 변경한다.
- 다른 코드베이스에서 참조하는 변수는 외부에 공개된 변수이므로 이 리팩터링을 적용할 수 없다.
- 변수 값이 변하지 않는다면 다른 이름으로 본제본을 만들어서 하나씩 점진적으로 변경한다. 하나씩 바꿀 때마다 테스트한다.
- 테스트한다.
예시
- 변수 이름 바꾸기의 가장 간단한 예는 임시 변수나 인수처럼 유효범위가 함수 하나로 국한된 변수다.
- 그저 변수를 참조하는 코드를 찾아서 하나씩 바꾸면 되며, 다 바꾼 뒤에는 테스트 진행
함수 밖에서도 참조할 수 있는 변수라면 조심해야 한다.
- 코드베이스 전체에서 두루 참조할 수도 있다.
let tpHd = "untitled";
result += `<h1>${tpHd}</h1>`; // 변수를 읽기만 하는 참조
tpHd = obj['articleTitle']; // 값을 수정하는 참조
저자는 이럴 때 주로 변수 캡슐화로 처리한다고 한다.
result += `<h1>${title()}</h1>`;
setTitle(obj['articleTitle']);
function title() {return tpHd;} // tpHd 변수의 게터
function setTitle(arg) {tpHd = arg;} // tpHd 변수의 세터
캡슐화 후에는 변수 이름을 바꿔도 된다.
let _title = "untitled";
function title() {return _title;}
function setTitle(arg) {_title = arg;}
예시: 상수 이름 바꾸기
상수의 이름은 캡슐화하지 않고도 복제방식으로 점진적으로 바꿀 수 있다.
const cpyNm = "애크미 구스베리";
먼저 원본의 이름을 바꾼 후, 원본의 원래 이름(기존 이름)과 같은 복제본을 만든다.
const companyName = "애크미 구스베리";
const cpyNm = companyName;
- 이제 기존 이름(복제본)을 참조하는 코드들을 새 이름으로 점진적으로 바꿀 수 있다.
- 다 바꿨다면 복제본을 삭제한다.
🤔 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.
- 상당히 짧은 내용의 챕터였지만 코딩을 하면서 어렵다고 느낀 리팩터링 방법입니다.
- 이름은 신중하게 지어놓지 않은 코드들을 보고 정말 고통을 받은 기억이 있습니다.
🔎 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
- 변수를 이상하게 만드는 사람과는 어떻게 협업을 할까?
- 심하게 축약된 변수명은 어떻게 할까?
반응형