본문 바로가기

Study/Refactoring11

리팩터링 4 4장 테스트 구축하기 리팩터링만으로는 부족하다. 뒷받침 해줄 테스트가 없다면 불가피하게 저지르는 실수를 잡아줄 수 없다. 4.1 자가 테스트 코드의 가치 테스트가 잘 확립되어 있으면 생산성이 급상승 한다. 테스트를 작성하기 가장 좋은 시점은 프로그래밍 시작 전이다. 테스트를 작성하면서 원하는 기능을 추가하기 위해 무엇이 필요한지 고민하게 되어 구현보다는 인터페이스에 집중하게 된다. 테스트를 모두 통과한 시점이 개발 완료 시점임을 확실히 할 수 있다. 4.2 테스트할 샘플 코드 4.3 첫 번째 테스트 import org.junit.Test; import static org.junit.Assert.*; public class ProvinceTest { @Test public void testShortfall.. 2023. 8. 31.
리팩터링 3 코드에서 나는 악취 3.1 기이한 이름 코드를 간단명료하게 표현하는 데 가장 중요한 요소 하나는 바로 ‘이름’이다. 이름을 명확하게 지어 각각이 무슨 일을 하고 어떻게 사용해야 하는지 알 수 있어야 한다. 만약 마땅한 이름이 떠오르지 않는다면 설계에 더 근본적인 문제가 숨어 있을 가능성이 높다. 혼란스러운 이름을 정리하다 보면 코드가 훨씬 간결해질 때가 많다. 3.2 중복 코드 중복 코드는 서로 미묘한 차이점은 없는지 세심하게 확인해야 하고 그 중 하나에 변화가 생기면 다른 비슷한 코드들 역시 세심하게 살펴보고 적절히 수정해야 한다. 3.3 긴 함수 오랜 기간 잘 활용되는 코드는 짧은 함수로 구성되어 있다. 코드가 끝없이 위임하는 방식으로 작성되면 코드를 이해하고, 공유하고, 선택하기 쉬워진다. 짧은 함.. 2023. 8. 31.
리팩터링 2 2장 리팩터링 원칙 리팩터링 전반에 적용되는 원칙 몇 가지를 알아봅시다. 2.1 리팩터링 정의 동사 명사 둘 다 결국 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 특정한 방식에 따라 내부 구조를 변경하는 것이다. 리팩터링하는 동안에는 코드가 항상 정상 작동하기 때문에 전체 리팩터링이 끝나지 않았더라도 언제든 멈출 수 있다. 리팩터링 전 후로 코드가 똑같이 동작해야 하는데 이는 항상 똑같을 수는 없다. 가령 함수 추출하기 를 사용하면 콜스택이 달라져 성능이 변할 수 있다. 하지만 사용자 관점에서는 달려져서는 안된다. 함수 선언 바꾸기 혹은 함수 옮기기 같은 리팩터링을 하면 모듈의 인터페이스가 바뀔 수 있다. 심지어 리팩터링 과정에서 발견된 버그는 리팩터링 후에도 남아 있어야 한다. (.. 2023. 8. 31.
리팩터링 1 1.1 자, 시작해보자! public class Statement { public String statement(Invoice invoice, Map plays) { int totalAmount = 0; int volumeCredits = 0; StringBuilder result = new StringBuilder("Statement for " + invoice.customer + "\n"); NumberFormat format = NumberFormat.getCurrencyInstance(Locale.US); format.setMinimumFractionDigits(2); for (Performance perf : invoice.performances) { Play play = plays.get(pe.. 2023. 8. 31.
728x90