😀 책에서 기억하고 싶은 내용을 써보세요.

리팩터링 전

let a = height * width;

리팩터링 후

let area = height * width;

 

 

배경

  • 명확한 프로그래밍의 핵심은 이름짓기다.
    • 변수는 프로그래머가 하려는 일에 관해 많은 것을 설명해준다.
    • 단, 이름을 잘 지었을 때만 그렇다.

 

  • 특히 이름의 중요성은 그 사용 범위에 영향을 많이 받는다.
    • 한 줄짜리 람다식에서 사용하는 변수는 대체로 쉽게 파악할 수 있다.
    • 맥락으로부터 변수의 목적을 명확히 알 수 있어서 한 글자로 된 이름을 짓기도 한다.
    • 자바스크립트와 같은 동적 타입 언어라면 이름 앞에 타입을 드러내기도 한다.

 

  • 함수 호출 한 번으로 끝나지 않고 값이 영속되는 필드라면 이름에 더 신경 써야 한다.

 

절차

  1. 폭넓게 쓰이는 변수라면 변수 캡슐화하기를 고려한다.
  2. 이름을 바꿀 변수를 참조하는 곳을 모두 찾아서, 하나씩 변경한다.
    • 다른 코드베이스에서 참조하는 변수는 외부에 공개된 변수이므로 이 리팩터링을 적용할 수 없다.
    • 변수 값이 변하지 않는다면 다른 이름으로 본제본을 만들어서 하나씩 점진적으로 변경한다. 하나씩 바꿀 때마다 테스트한다.
  3. 테스트한다.

 

 

예시

  • 변수 이름 바꾸기의 가장 간단한 예는 임시 변수나 인수처럼 유효범위가 함수 하나로 국한된 변수다.
    • 그저 변수를 참조하는 코드를 찾아서 하나씩 바꾸면 되며, 다 바꾼 뒤에는 테스트 진행

 

함수 밖에서도 참조할 수 있는 변수라면 조심해야 한다.

  • 코드베이스 전체에서 두루 참조할 수도 있다.
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;
  • 이제 기존 이름(복제본)을 참조하는 코드들을 새 이름으로 점진적으로 바꿀 수 있다.
    • 다 바꿨다면 복제본을 삭제한다.

 

🤔 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.

  • 상당히 짧은 내용의 챕터였지만 코딩을 하면서 어렵다고 느낀 리팩터링 방법입니다.
  • 이름은 신중하게 지어놓지 않은 코드들을 보고 정말 고통을 받은 기억이 있습니다.

 

 

🔎 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 변수를 이상하게 만드는 사람과는 어떻게 협업을 할까?
  • 심하게 축약된 변수명은 어떻게 할까?

 

 

반응형

+ Recent posts