Closed OikimiO closed 1 year ago
리팩터링 2판
// 쪼개기 전
public void calculate(){
List<Object> list = new ArrayList<>();
int count = 0;
int money = 0;
for(int i = 0; i < 100; i++){
count +=list.get(i).getCount();
money +=list.get(i).getMoney();
}
}
// 쪼갠 후
public void calculate(){
List<Object> list = new ArrayList<>();
int count = totalCount(list);
int money = totalMoney(list);
}
public void totalCount(List<Object> list){
int result = 0;
for(int i = 0; i < list.size(); i++){
result += list.get(i).getCount();
}
return result;
}
public void totalMoney(List<Object> list){
int result = 0;
for(int i = 0; i < list.size(); i++){
result += list.get(i).getMoney();
}
return result;
}
리팩터링 = 소프트웨어의 겉보기 동작은 그대로 유지한 채 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법 리팩터링하다 = 소프트웨어의 겉보기 동작은 그대로 유지한 채 여러가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다 리팩터링을 하고난 이후에는 성능은 변해도 사용자 관점에서 달라지는 점이 없어야 한다 -> 만약 버그가 있는 문제였어도 버그가 그대로 유지해야 된다
리팩터링의 장점
리팩터링을 쉽게 하기 위해서는 자신만의 코드 스타일을 가지고 있어야 한다.
비슷한 일을 세번째 하게 되면 리팩터링을 해라 = 스트라이크 세번이면 리팩터링하자(삼진 리팩터링)
[DOM을 깨우치다]
DOM트리는 다양한 속성을 통해 부모노드, 자식노드, 자매노드 등등에 접근이 가능하다.
<ul><!-- comment-->
<li>item 1</li>
<li>item 2</li>
<!-- comment-->
</ul>
현재 노드의 부모 노드에 접근
첫번째, 마지막 자식 노드에 접근
<script>
const example = document.querySelector("ul")
console.log(example.firstChild.nodeType) // 실행결과: text
console.log(example.firstElementChild.nodeType) // 실행결과: li
</script>
firstElementChild는 text노드, comment 노드를 무시한다. 즉, HTML code에 반영을 위한 접근이 필요하다면 firstElementChild을 쓴다.
수직 거리
개념적으로 유사한 메서드들을 연속되게 묶어 관리해도 좋습니다.
제가 했던 실수 중 하나인데 선언부의 변수 이름이나 할당문의 오른쪽 피연사자를 빠뜨리지 않고 나란히 정렬하는 것이었습니다.