본문 바로가기

Today I Learned

리팩터링 2판 챕터11 - API 리팩터링(2)

8. 생성자를 팩터리 함수로 바꾸기

생성자는 객체를 초기화한다. 생성자에는 제약이 몇가지 있는데,

  • 생성자의 이름은 고정되어 있다.
  • 서브클래스의 인스턴스나 프락시를 반환할 없다.
  • 생성자를 호출하려며 특별한 연산자(주로 new) 사용해야한다.

 

팩터리 함수에는 이러한 제약이 없다.

*팩터리 함수란? 객체를 반환하는 함수이다.

 

// 생성자
const engineer = new Employee(document.engineer, "E");
// 팩터리 함수
const engineer = createEngineer(document.engineer);

function createEngineer(name){
	return new Employee(name, "E");
}
 

 

9. 함수를 명령으로 바꾸기 (↔️령을 함수로 바꾸기)

*명령(객체)? 함수를 함수만을 위한 객체 안으로 캡슐화한 것이다. 즉, 함수를 함수 자신을 포함한 클래스로 만든 것이다. 명령은 함수보다 유연하고 일급 함수처럼 표현가능하다.

*일급 함수란? 일반 변수처럼 다룰 있는 함수를 말한다. 매개변수를 담거나, 함수를 반환하거나, 변수에도 할당할 있다. 자바스크립트는 일급 함수를 가진 언어이다.

 

명령객체 예시)

class Scorer {
    constructor(){}
    execute(){
		this._result = 0;
		this._level = 0;
    }
}
 

 

 

10. 명령을 함수로 바꾸기 (↔️수를 명령으로 바꾸기)

명령은 사실 함수를 하나 호출할 뿐이다. 로직이 크게 복잡하지 않다면, 함수를 쓰는 것이 좋다.

 

 

11. 수정된 반환하기

데이터가 어떻게 수정됐는지 추적하는 일은 어렵다. 추적을 쉽게 하기 위해서는 변수를 하나 고정해서 값이 수정되었음을 알려주는 것이 좋다.

 

예시)

function calculateSomething(data){
  let result = 0;
  for(let i = 0; i < data.length; i++){
    result += data[i].number;
  }
  return result;
}
 

 

12. 오류 코드를 예외로 바꾸기

예외는 정확히 예상 밖의 동작일 때만 쓰여야한다. 예외를 던지는 코드를 프로그램 종료 코드로 바꿔도 프로그램이 동작해야한다! (아마 C기반의 오래된 프레임워크를 쓰는 개발자라면 공감할 내용이라고 한다.)