ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메서드 추출(Extract Method)
    JAVA 2021. 5. 18. 13:08

    장황한 메서드에는 너무 많은 정보와 복잡한 로직으로 얽혀 있습니다.

    어떤 코드를 그룹으로 묶어도 되겠다고 판단될 땐 그 코드를 빼내어 목적을 잘 나타내는 직관적 이름의 메서드로 만들자

    메서드 추출을 해야할 때

    • 메서드가 너무 길때
    • 코드에 주석을 달아야만 의도를 이해할 수 있을때
    • 한 클래스의 두메서드 안에 같은 코드가 들어 있는 경우
    • 한 클래스의 두 하위클래스에 같은 코드가 들어 있는 경우

    메서드 추출에서 가장 힘든 작업

    •  지역변수를 처리하는 것

    방법

    • 기능을 나타내는 이름의 새 메서드 생성
    • 기존 메서드에서 빼낸 코드를 새로 생성한 메서드로 복사
    • 빼낸 코드에서 기존 메서드의 모든 지역변수 참조를 찾는다.
    • 그것들을 새로 생성한 메서드의 지역변수나 매개변수로 사용하게 된다.
    • 빼낸 코드 안에서만 사용되는 임시변수가 있으면 새로 생성한 메서드 안에 임시변수로 선언

     

    Before

    After

     

    Before

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        void 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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        void 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 리팩토링 나쁜 디자인의 코드를 좋은 디자인으로 바꾸는 방법

    댓글

Designed by Tistory.