2011년 5월 26일 목요일

리팩토링을 시작하기 전에

리팩토링을 시작하기 전에 견고한 테스트 세트를 가지고 있는지 확인하라.
이 테스트는 자체 검사여야 한다.
! 나는 긴 메소드를 볼 때, 메소드를 작은 조각으로 분해 하는것을 생각한다.
! 이름이 마음에 들지 않는것을 바꾼다.
! 이 메소드가 잘못된 객체에 위치해 있는것은 아닌가 의심해 본다.
! 예전의 메소드를 참조하는 모든 곳을 찾아서 새로운 메소드를 사용하게 한다.
! 때때로 기존 메소드가 새 메소드에 작업을 위임하도록 남겨두기도 한다.
이것은 기존 메소드가 public메소드이고 클래스의 인터페이스를 변경하고 싶지 않을 때
유용하다.
! 메소드의 결과로 저장되고 난 후로는 바꾸지 않는 "임시변수"는 가능하면 제거하는것이 좋다.
임시변수는 종종 쓸데없이 많은 파라미터를 만들므로 문제가 된다. 코드를 따라 가다가
임시변수의 목적이 무엇이었는지 잊기도 쉽다. 특히 길이가 긴 메소드에선즌 골칫거리이다.
물론 퍼포먼스 측면에서는 같은 메서드가 여러번 호출되는것이 손해다 그러나 이것은 메서드를 가지는
클래스에서 최적화 될수 있고, 코드가 적절히 분해되어 있다면 더욱 효과적으로 최적화 될수 있다.
! 리팩토링에서는 단계가 적을 수록 좋고, 잘못될 염려도 적다.
! 임시변수는 앞에서 말했드시 루틴내에서만 유용하고, 따라서 길고 복잡한 루틴을 양산할 우려가 있다.
임시변수를 질의 메소들로 바꾼다. 질의 메소드는 클래스내의 어떤 메소드에서도 접근 가능하므로
길고 복잡한 메소드 없이도 깔끔한 디자인을 만들 수있게 한다.
! 가장 먼저 고칠 부분은 switch문이다. 다른 객체의 속성에 기반한 switch문은 별로 좋은 생각이 아니다.
만약 switch문을 사용한다면 자기 자신의 데이터를 사용해야지된다.-->조건문을 다형성(폴리모피즘)으로 바꿀수 있다.
-- 먼저 메소드 내의 지역 변수와 파라미터를 주의 깊게 볼 필요가 있다.
값이 수정되지 않는 변수는 파라미터로 넘길 수있다. 값이 수정되는 변수는 주의가
필요하다. 이런 변수가 하나라면 리턴을 해줄 수 있다.
@ 리팩토링은 작은 단계로 나누어 프로그램을 변경한다. 실수를 하게 되더라도
쉽게 버그를 찾을수있다.
@ 좋은 코드는 그것이 무엇을 하고 있는지를 명확하게 나타내야 하고, 적절한 변수 이름은
명확한 코드를 만드는 핵심 중의 하나이다.

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...