diff --git a/Refactoring/Refactoring.md b/Refactoring/Refactoring.md index 7ff9e40..cb85707 100644 --- a/Refactoring/Refactoring.md +++ b/Refactoring/Refactoring.md @@ -287,5 +287,64 @@ 잘못될 수 있는 경계조건을 생각한 뒤, 그 상황의 테스트에 집중해라 -뭔가 에러가 있으리라 예상될 때, 그 예외가 정말로 발생하는지 꼭 확인해라. +뭔가 에러가 있으리라 예상될 때, 그 예외가 정말로 발생하는지 꼭 확인해라. + + + +## 5. 리팩토링 기법 카탈로그에 대해 + + + +## 6. 메서드 정리 + + + +리팩토링의 주된 작업은 코드를 포장하는 메서드를 적절히 정리하는 것이다. 거의 모든 문제점은 장황한 메서드로 인해 생긴다. 장황한 메서드에는 많은 정보가 들어 있는데, 마구 얽힌 복잡한 로직에 이 정보들이 묻혀버린다. 핵심적인 리팩토링 기법은 코드 뭉치를 별도의 메소드로 빼내는 메서드 추출이다. 그와 반대로 메서드 내용 직접 삽입은 개별 메서드로 빼내고 보니 그렇게 만들어진 일부 메서드가 제 역할을 못하거나 그 메서드들을 쪼갠 방식을 바꿔야 할 때는 메소드 내용 직접 삽입 기법을 적용해야 한다. + + + +### 6.1 메서드 추출 Extract Method + + + +어떤 코드를 그룹으로 묶어도 되겠다고 판단될 땐 그 코드를 빼내어 목적을 잘 나타내는 직관적 이름의 메서드로 만들자. + + + +```java +void printOwing(double amount) { + printBanner(); + + System.out.println("name:" + _name); + System.out.println("amount:" + amount); +} +``` + + + +```java +void printOwing(double amount) { + printBanner(); + printDetails(amount); +} + +void printDetails(double amount) { + System.out.println("name:" + _name); + System.out.println("amount:" + amount); +} +``` + + + +#### 동기 + +메서드가 너무 길거나 코드에 주석을 달아야만 의도를 이해할 수 있을 때 + +간결한 메서드가 좋은 이유는 세가지. + +1. 다른 메서드에서 쉽게 사용할 수 있다. +2. 상위 계층에 메서드에서 주석 같은 더 많은 정보를 읽어들일 수 있다. +3. 재정의하기에 훨씬 수월하다. + + 메서드 내용이 간결한 것도 중요하지만, 효과를 보려면 메서드 이름도 잘 지어야 한다.