-
메서드 추출(Extract Method)JAVA 2021. 5. 18. 13:08
장황한 메서드에는 너무 많은 정보와 복잡한 로직으로 얽혀 있습니다.
어떤 코드를 그룹으로 묶어도 되겠다고 판단될 땐 그 코드를 빼내어 목적을 잘 나타내는 직관적 이름의 메서드로 만들자
메서드 추출을 해야할 때
- 메서드가 너무 길때
- 코드에 주석을 달아야만 의도를 이해할 수 있을때
- 한 클래스의 두메서드 안에 같은 코드가 들어 있는 경우
- 한 클래스의 두 하위클래스에 같은 코드가 들어 있는 경우
메서드 추출에서 가장 힘든 작업
- 지역변수를 처리하는 것
방법
- 기능을 나타내는 이름의 새 메서드 생성
- 기존 메서드에서 빼낸 코드를 새로 생성한 메서드로 복사
- 빼낸 코드에서 기존 메서드의 모든 지역변수 참조를 찾는다.
- 그것들을 새로 생성한 메서드의 지역변수나 매개변수로 사용하게 된다.
- 빼낸 코드 안에서만 사용되는 임시변수가 있으면 새로 생성한 메서드 안에 임시변수로 선언
Before
After
Before
123456789101112131415void printOwing(double amount) {Enumeration e = _orders.elements();double outstanding = 0.0;printBanner();while (e.hasMoreElements()) {Order each = (Order) e.nextElement();outstanding += each.getAmount();}System.out.println("name:" + _name);System.out.println("amouunt:" + amount);}cs After
1234567891011121314151617void printOwing() {printBanner();double outstanding = getOutstanding();printDetails(outstanding);}private double getOutstanding() {Enumeration e = _orders.elements();double outstanding = 0.0;while (e.hasMoreElements()) {Order each = (Order) e.nextElement();outstanding += each.getAmount();}return outstanding;}cs 같이 봐야 하는 것
- 임시변수를 메서드 호출로 전환
- 임시변수 분리
- 메서드를 메서드 객체로 전환
- 매개변수로의 값 대입 제거
- 알고리즘 전환
참고도서 : Refactoring 리팩토링 나쁜 디자인의 코드를 좋은 디자인으로 바꾸는 방법
'JAVA' 카테고리의 다른 글
TDD 요약 정리 - 테스트 주도 개발/테스팅 패턴, 빨간/초록 막대 (0) 2022.07.04 TDD - 2부 xUnit 간단 정리 (0) 2022.06.27 TDD 17장. Money 회고 요약 및 정리 (0) 2022.06.27 primitive type vs wrapper class (0) 2021.10.31 Builder Pattern (0) 2021.06.03