리팩터링 9장 데이터 조직화

이종호·2022년 6월 19일
0

Refactoring

목록 보기
4/4

9.1 변수 쪼개기

역할이 둘 이상인 변수가 있다면 쪼개야 한다.
그리고 변경이 없다면 js에서 항상 let대신 const를 쓸것

매개변수를 변경하는 일은 굉장히 위험할 수 있다.
매개변수를 다른 값에 할당하고 해당 값을 변경하여 사용하는 것이 역할을 다르게 쓰는 패턴중 하나다.

9.2 필드 이름 바꾸기

이름(데이터 구조)는 프로그램을 이해하는 데 큰 역할을 한다.
데이터 구조는 중요한 만큼 반드시 쌀끔하게 관리해야 한다.

9.3 파생 변수를 질의 함수로 바꾸기

파생 변수: 가볍게 계산해서 얻을 수 있는 변수(클래스에선 필드로 사용된다.)
질의 함수: 기존의 값을 계산한 값을 리턴하는 함수

가변 데이터는 소프트웨어에 문제를 일으키는 가장 큰 졸칫거리에 속한다.
한 쪽 코드에서 수정한 값이 연쇄 효과를 일으켜 다른 쪽 코드에 원인을 찾기 어려운 문제를 야기하기도 한다.

가변데이터(필드)의 유효범위를 가능한 좁혀야 한다고 힘주어 주장해본다.
가변데이터(필드)의 유효범위를 아예 줄일 수는 없지만, 질의함수(계산한 값을 리턴)로 사용할 수 있는 필드라면, 그렇게 getter로 위장해 줄일 수 있다.

9.4 참조를 값으로 바꾸기

값과 참조의 차이
값을 즈 자체가 더이상 불변하는 형태이기 때문에 나중에 그 값이 몰래 바뀌어서 내부에 영향을 줄까 염려하지 않아도 된다.

클래스에서 다른 클래스를 참조할 때, 해당 클래스를 값처럼 사용하려면,
사용할 때 마다 새로운 클래스를 생성할 수 있도록 변경하면 된다.

get officeAreaCode(){ // 참조를 넘기는 경우
  return this._telephoneNumber.areaCode;
}
get officeAreaCode(){ // 새로운 클래스를 생성하여 값처럼 넘기는 경우(불변성)
  return new TelephoneNumber(arg, this.officeNumber);
}

9.5 값을 참조로 바꾸기

참조를 사용해야할 때,
논리적으로 같은 데이터를 물리적으로 복제해 사용할 때 가장 크게 문제되는 상황은
그 데이터를 갱신해야할 때다.
모든 복제본을 찾아서 빠짐없이 생신해야 하며,
하나라도 놓치면 데이터 일관성이 깨져버린다.
이런 상황이라면 복제된 데이터를 모두 참조로 바꿔주는 게 좋다.

Repository Pattern
특정한 값을 매필해서 찾아야 하는 경우라면 이 방법을 쓸 수 있다.

9.6 매직 리터럴 바꾸기

코드 자체가 뜻을 분명하게 드러내는 게 좋다.
상수를 저의하고 숫자 대신 상수를 사용하도록 바꾸면 될 것이다.

profile
코딩은 해봐야 아는 것

0개의 댓글