본문 바로가기

Study14

리팩터링 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.
리팩터링 12 12장 상속 다루기 12.1 메서드 올리기 반대 리팩터링 : 메서드 내리기 배경 여러 메서드들의 본문 코드가 똑같을 때 적용하기 가장 쉽다. 여러 클래스의 두 메서드를 각각 매개변수화 하면 궁극적으로 같은 메소드가 되기도 하는데, 이런 경우 각각의 함수를 매개변수화 한 다음 메서드를 상속 계층의 위로 올린다. 만약 해당 메서드의 본문에서 참조하는 필드들이 서브 클래스에만 있는 경우에는 해당 필드들을 먼저 슈퍼 클래스로 올린 후에 메서드를 올린다. 절차 똑같이 동작하는 메서드인지 면밀히 살핀다. 하는 일은 같지만 코드가 다른 경우 본문 코드가 똑같아질 때까지 리팩터링 한다. 메서드 안에서 호출하는 다른 메서드와 참조하는 필드들을 슈퍼클래스에서도 호출하고 참조할 수 있는지 확인한다. 메서드 시그니처가 다르다.. 2023. 8. 30.
리팩터링 11 11장 API 리팩터링 11.1 질의 함수와 변경 함수 분리하기 배경 우리는 외부에서 관찰할 수 있는 겉보기 부수효과가 전혀 없이 값을 반환해주는 함수를 추구해야 한다. 이를 위해 “질의 함수(읽기 함수)는 모두 부수효과가 없어야 한다”는 규칙을 따르는 것이다. 물론 이 규칙이 절대적인것은 아니지만 분명 유용하다. 만약 값을 반환하면서 부수효과도 가지는 함수가 있다면 상태를 변경하는 부분과 질의하는 부분의 분리를 시도해본다. 절차 대상 함수를 복제하고 질의 목적에 충실한 이름을 짓는다. 함수 내부를 살펴 무엇을 반환하는지 찾는다. 어떤 변수의 값을 반환한다면 그 변수 이름이 훌륭한 단초가 될 것이다. 새 질의 함수에서 부수효과를 모두 제거한다. 정적 검사를 수행한다. 원래 함수(변경 함수)를 호출하는 곳.. 2023. 8. 29.
리팩터링 챕터 10 10장 조건부 로직 간소화 10.1 조건문 분해하기 배경 조건부 로직이 복잡하면 프로그램을 복잡하게 만든다. 코드를 부위별로 분해하고 각 덩어리의 의도를 살린 이름의 함수 호출로 바꿔 전체적인 의도를 살린다. 절차 조건식과 그 조건식에 딸린 조건절 각각을 함수로 추출한다. 예시 if (!aDate.isBefore(plan.getSummerStart()) && !aDate.isAfter(plan.getSummerEnd())) { charge = quantity * plan.getSummerRate(); } else { charge = quantity * plan.getRegularRate() + plan.getRegularServiceCharge(); } 1. 조건 부분을 별도 함수로 추출하기 if (su.. 2023. 8. 28.
728x90