Skip to content

java_refactoring_1

Kyusung, Hwang edited this page Oct 3, 2019 · 1 revision

๋ฆฌํŒฉํ† ๋ง ์‹œ์ 

ํ”„๋กœ๊ทธ๋žจ์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ฝ”๋“œ ๊ตฌ์กฐ๊ฐ€ ์กฐ์žกํ•ด์„œ ๊ทธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋ฉด, ์šฐ์„  ๋ฆฌํŒฉํ† ๋ง์„ ์‹ค์‹œํ•ด์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“  ํ›„ ๊ทธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ž.

๋ฆฌํŒฉํ† ๋ง ์‹œ์ž‘

๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์‹ ๋ขฐ๋„ ๋†’์€ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ์ค€๋น„๋๋Š”์ง€ ํ™•์ธํ•˜์ž, ์ด ํ…Œ์ŠคํŠธ๋“ค์€ ๋ฐ˜๋“œ์‹œ ์ž์ฒด๊ฒ€์‚ฌ๊ฐ€ ๋˜๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค.

๋ฉ”์„œ๋“œ ์ •๋ฆฌ - ๋ฉ”์„œ๋“œ ์ถ”์ถœ (Extract Method)

  • ์š”์•ฝ
    • ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด๋„ ๋˜๊ฒ ๋‹ค๊ณ  ํŒ๋‹จ๋  ๋•Œ, ์ฝ”๋“œ๋ฅผ ๋นผ๋‚ด์–ด ๋ชฉ์ ์„ ์ž˜ ๋‚˜ํƒ€๋‚ด๋Š” ์ง๊ด€์  ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์ž.
  • ๋™๊ธฐ
    • ๋ฉ”์„œ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๊ฑฐ๋‚˜ ์ฝ”๋“œ์— ์ฃผ์„์„ ๋‹ฌ์•„์•ผ๋งŒ์˜๋„๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๋•Œ
  • ๋ฐฉ๋ฒ•
    • ๋ชฉ์ ์— ๋ถ€ํ•ฉํ•˜๋Š” ์ƒˆ ๋ฉ”์„œ๋“œ ์ƒ์„ฑ, ์›๋ฆฌ๊ฐ€ ์•„๋‹Œ ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ด๋ฆ„์œผ๋กœ
    • ๊ธฐ์กด ๋ฉ”์„œ๋“œ์˜ ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜ ์ฐธ์กฐ๋ฅผ ์ฐพ๊ณ , ์ƒˆ ๋ฉ”์„œ๋“œ์˜ ์ง€์—ญ๋ณ€์ˆ˜๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ
    • ์ถ”์ถœ ์ฝ”๋“œ์— ์˜ํ•ด ๋ณ€๊ฒฝ๋˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜ ํŒŒ์•…, ์ถ”์ถœ ์ฝ”๋“œ๋ฅผ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ ๊ฐ€๋Šฅํ•œ์ง€, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ด€๋ จ ๋ณ€์ˆ˜์— ๋Œ€์ž… ๊ฐ€๋Šฅํ•œ์ง€ ํŒŒ์•…
    • ๋‘˜ ์ด์ƒ์˜ ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ => ์ž„์‹œ๋ณ€์ˆ˜ ๋ถ„๋ฆฌ ๊ธฐ๋ฒ•
    • ์ž„์‹œ๋ณ€์ˆ˜ ์ œ๊ฑฐ => ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋กœ ์ „ํ™˜ ๊ธฐ๋ฒ•
    • ๋นผ๋‚ธ ์ฝ”๋“œ์˜ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋Œ€์ƒ ๋ฉ”์„œ๋“œ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ
    • ์ปดํŒŒ์ผ
    • ์›๋ณธ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋กœ ์ˆ˜์ •
    • ์ปดํŒŒ์ผ, ํ…Œ์ŠคํŠธ
  • ์˜ˆ์ œ
    /* ์ง€์—ญ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์•ˆํ•จ **************************/
    /* ๋ณ€๊ฒฝ ์ „ */
    void printOwing() {
        Enumeration e = _orders.elements();
        double outstanding = 0.0;
        
        System.out.println("****************************");
        System.out.println("********* ๊ณ ๊ฐ ์™ธ์ƒ *********");
        System.out.println("****************************");
        
        while (e.hasMoreElement()) {
            Order each = (Order) e.nextElement();
            outstanding += each.getAmount();
        }
    
        System.out.println("๊ณ ๊ฐ๋ช…:" + _name);
        System.out.println("์™ธ์ƒ์•ก:" + outstanding)
    }
    
    /* ๋ณ€๊ฒฝ ํ›„ */
    void printOwing() {
        Enumeration e = _orders.elements();
        double outstanding = 0.0;
        
        printBanner();
    
        while (e.hasMoreElement()) {
            Order each = (Order) e.nextElement();
            outstanding += each.getAmount();
        }
    
        System.out.println("๊ณ ๊ฐ๋ช…:" + _name);
        System.out.println("์™ธ์ƒ์•ก:" + outstanding)
    }
    
    void printBanner() {
        System.out.println("****************************");
        System.out.println("********* ๊ณ ๊ฐ ์™ธ์ƒ *********");
        System.out.println("****************************");
    }
    
    
    /* ์ง€์—ญ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ **************************/
    /* ๋ณ€๊ฒฝ ์ „ */
    void printOwing() {
        Enumeration e = _orders.elements();
        double outstanding = 0.0;
        
        printBanner();
    
        while (e.hasMoreElement()) {
            Order each = (Order) e.nextElement();
            outstanding += each.getAmount();
        }
    
        System.out.println("๊ณ ๊ฐ๋ช…:" + _name);
        System.out.println("์™ธ์ƒ์•ก:" + outstanding)
    }
    
    /* ๋ณ€๊ฒฝ ํ›„ */
    void printOwing() {
        Enumeration e = _orders.elements();
        double outstanding = 0.0;
        
        printBanner();
    
        while (e.hasMoreElement()) {
            Order each = (Order) e.nextElement();
            outstanding += each.getAmount();
        }
    
        printDetails(outstanding);
    }
    
    
    void printDetails(outstanding) {     
        System.out.println("๊ณ ๊ฐ๋ช…:" + _name);
        System.out.println("์™ธ์ƒ์•ก:" + outstanding)
    }
    
    /* ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ ๋Œ€์ž…ํ•˜๋Š” ๊ฒฝ์šฐ **************************/
    /* ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ์˜ ๊ฐ’ ๋Œ€์ž… ์ œ๊ฑฐ ๊ธฐ๋ฒ• */
    /* ๋ณ€๊ฒฝ ์ „ */
    void printOwing() {
        Enumeration e = _orders.elements();
        double outstanding = 0.0;
        
        printBanner();
        
        while (e.hasMoreElement()) {
            Order each = (Order) e.nextElement();
            outstanding += each.getAmount();
        }
    
        printDetails(outstanding);
    }
    
    /* ๋ณ€๊ฒฝ ํ›„ */
    void printOwing() {
        printBanner();
        double outstanding = getOutstanding(); // ๊ณ„์‚ฐ๋ถ€๋ถ„ ์ถ”์ถœ
        printDetails(outstanding);
    }
    
    void getOutstanding() {
        Enumeration e = _orders.elements();
        double result = 0.0; // ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ
        
        while (e.hasMoreElement()) {
            Order each = (Order) e.nextElement();
            result += each.getAmount();
        }
        
        return result;
    }
    
    /* ๋ณต์žกํ•œ ๊ณ„์‚ฐ์— ๋Œ€๋น„ํ•˜์—ฌ ์ด์ „ ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ */
    void printOwing(double previousAmount) {
        printBanner();
        double outstanding = getOutstanding(previousAmount * 1.2);
        printDetails(outstanding);
    }
    
    void getOutstanding(double initialValue) {
        double result = initialValue; // ์ดˆ๊ธฐํ™”
        Enumeration e = _orders.elements();
        while (e.hasMoreElement()) {
            Order each = (Order) e.nextElement();
            result += each.getAmount();
        }
    
        return result;
    }
  • ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ?
    • ๋ณ€์ˆ˜๋ฅผ ๋‘๊ฐœ ์ด์ƒ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ
      • ๋‹ค๋ฅธ ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋นผ๋‚ด์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ž.
    • ์ž„์‹œ๋ณ€์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ
      • ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋กœ ์ „ํ™˜ ๊ธฐ๋ฒ•
    • ๋ฉ”์„œ๋“œ ์ถ”์ถœ์ด ํž˜๋“  ๊ฒฝ์šฐ
      • ๋ฉ”์„œ๋“œ ๊ฐ์ฒด๋กœ ์ „ํ™˜ ๊ธฐ๋ฒ•

๋ฉ”์„œ๋“œ ์ •๋ฆฌ - ๋ฉ”์„œ๋“œ ๋‚ด์šฉ ์ง์ ‘ ์‚ฝ์ž… (Inline Method)

  • ์š”์•ฝ

    • ๋ฉ”์„œ๋“œ ๊ธฐ๋Šฅ์ด ๋„ˆ๋ฌด ๋‹จ์ˆœํ•ด์„œ ๋ฉ”์„œ๋“œ๋ช…๋งŒ ๋ด๋„ ๋„ˆ๋ฌด ๋ป”ํ•  ๋•, ๊ทธ ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ์— ๋„ฃ์–ด๋ฒ„๋ฆฌ๊ณ  ๊ทธ ๋ฉ”์„œ๋“œ๋Š” ์‚ญ์ œํ•˜์ž.
  • ๋™๊ธฐ

    • ๋ฆฌํŒฉํ† ๋ง์˜ ํ•ต์‹ฌ์€ ์˜๋„ํ•œ ๊ธฐ๋Šฅ์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ์ง๊ด€์ ์ธ ๋ฉ”์„œ๋“œ๋ช…๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ. ๊ฐ„ํ˜น ๋ฉ”์„œ๋“œ ๊ธฐ๋Šฅ์ด ์ง€๋‚˜์น˜๊ฒŒ ๋‹จ์ˆœํ•  ๋•Œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์—†์• ์ž.
    • ๊ณผ๋‹คํ•œ ์ธ๋‹ค์ด๋ ‰์…˜๊ณผ ๋™์‹œ์— ๋ชจ๋“ ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ์— ๋‹จ์ˆœํžˆ ์œ„์ž„์„ ํ•˜๊ณ  ์žˆ์–ด์„œ ์ฝ”๋“œ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•  ๋• ์ฃผ๋กœ ๋ฉ”์„œ๋“œ ๋‚ด์šฉ ์ง์ ‘ ์‚ฝ์ž…์„ ์‹ค์‹œํ•œ๋‹ค.
  • ๋ฐฉ๋ฒ•

    • ๋ฉ”์„œ๋“œ๊ฐ€ ์žฌ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธ
    • ๊ทธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ฒ€์ƒ‰
    • ๊ฐํ˜ธ์ถœ ๋ถ€๋ถ„์„ ๋ฉ”์„œ๋“œ ๋‚ด์šฉ์œผ๋กœ ๊ต์ฒด
    • ํ…Œ์ŠคํŠธ๋ฅผ ์‹ค์‹œ
    • ๋ฉ”์„œ๋“œ ์ •์˜ ์‚ญ์ œ
  • ์˜ˆ์ œ

    /* ๋ณ€๊ฒฝ ์ „ */
    int getRating() {
        return (moreThanFiveLateDeliveries()) ? 2 : 1;
    }
    boolean moreThanFiveLateDeliveries() {
        return _numberOfLateDeliveries > 5;
    }
    
    /* ๋ณ€๊ฒฝ ํ›„ */
    int getRating() {
        return (_numberOfLateDeliveries > 5) ? 2 : 1;
    }

Clone this wiki locally