¸Þ¼Òµå ½Ã±×³ÊÃÄ ¸®ÆÑÅ丵ÀÇ º¯°æ

 

ÀÌ ¼½¼ÇÀº Change Method Signature  ¸®ÆÑÅ丵 À§¿¡¼­ ´ç½Å¿¡°Ô Æ÷°ýÀûÀÎ  overview¸¦ Á¦°øÇÏ°í  how ÀÌ ¸®ÆÑÅ丵ÀÌ IntelliJ IDEA¿¡¼­ »ç¿ëµÉ ¼ö Àִ°¡¸¦ Á¦°øÇÕ´Ï´Ù.

°³¿ä


Change Method Signature ¸®ÆÑÅ丵Àº ¸Þ¼Òµå ½Ã±×³ÊÃÄ¿¡ ¸¸µé¾îÁú ¼ö ÀÖ´Â ¿©·¯ °¡Áö ´Ù¸¥ º¯°æÀ» Á¶ÇÕÇÕ´Ï´Ù.  

 

°¡´ÉÇÑ º¯°æÀº ´ÙÀ½°ú °°½À´Ï´Ù

 ¸Þ¼Òµå À̸§ º¯°æ
 
µ¡¼À ¸Å°³ º¯¼ö
 
¸Å°³ º¯¼ö Á¦°Å
 
Àç ÁÖ¹® ¸Å°³ º¯¼ö
 
¸®ÅÏ Å¸ÀÔ º¯°æ
 
¸Å°³º¯¼ö ŸÀÔ º¯°æ
 
¸Å°³ º¯¼ö À̸§ º¯°æ


ÀÌ ¸®ÆÑÅ丵Àº »ý¼ºÀÚ¿¡µµ Àû¿ë °¡´ÉÇÏÁö¸¸ ´ç½ÅÀº ±×µéÀÇ À̸§ ¶Ç´Â ¸®ÅÏ ÇüŸ¦ º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù.
½Ã±×³ÊÃÄ ±× ÀÚü¸¦ º¯°æÇÏ´Â °Í¿¡ µû¶ó¼­, IDEA´Â ¸Þ¼ÒµåÀÇ ¸ðµç »ç¿ë¿¡ ´ëÇØ Ž»öÇÒ °ÍÀ̰í, Àüü È£Ãâ, ±¸Çö°ú º¯°æÀ» ¹Ý¿µÇϱâ À§ÇØ ¾ÈÀüÇÏ°Ô º¯°æµÉ ¼ö ÀÖ´Â ¸Þ¼ÒµåÀÇ overridingÀ» ¹Ù²Ü °ÍÀÔ´Ï´Ù.  ¸¸ÀÏ ¸Å°³ º¯¼ö°¡ Ãß°¡µÇ¸é, ±×°ÍÀº ¸Þ¼Òµå ÄÝÀ» À§ÇØ »ç¿ëµÇ´Â µðÆúÆ® °ªÀÌ °ø±ÞµÇ¾î¾ß¸¸ ÇÕ´Ï´Ù.


ÃÖÁ¾ ¼¼ °³ÀÇ ¾Õ¿¡¼­ ¼­¼úÇÑ Ç׸ñ¿¡¼­ ±â¼úµÈ º¯°æÀº ±× ±¸Çö°ú overridingÀ̿ܿ¡ ¸Þ¼Òµå ÄÝ¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù.  ¸¸ÀÏ ´ç½ÅÀÌ ¸Å°³ º¯¼ö ÇüÅ ¶Ç´Â ¸®ÅÏ ÇüŸ¦ º¯°æÇϰí, ¹Ù²î´Â Äڵ带 ÄÄÆÄÀÏ ÇÏ·Á°í ÇÏ¸é ´ç½Å¿¡°Ô ¿¡·¯ ¸Þ½ÃÁö°¡ ÇÁ·ÒÇÁÆ® µÉ °Í ÀÔ´Ï´Ù.  ´ç½ÅÀº ¿µÇâÀ» ¹Þ´Â ¸Þ¼Òµå ÄÝ ¶Ç´Â ¸Þ¼Òµå º¸µð¸¦ ¼öµ¿À¸·Î º¯°æÇؾ߸¸ ÇÒ °ÍÀÔ´Ï´Ù.


¸Þ¼Òµå ½Ã±×³ÊÃÄÀ» º¯°æÇÏ¸é ´ç½ÅÀº ¸Þ¼Òµå ÄÝÀ» ´Ù·ç´Â µÎ °³ÀÇ ¿É¼ÇÀ» °¡Áý´Ï´Ù.  Ã¹ ¹øÂ°, Modify ´Â ½ÇÁ¦·Î ¸Þ¼Òµå ÄÝÀ» º¯°æÇÕ´Ï´Ù.  µÎ ¹øÂ°, Delegate via overloading method ´Â ±âÁ¸ ¸Þ¼ÒµåÀÇ ½Ã±×³ÊÃÄÀ» ¹Ù²Ù°í, ±âÁ¸ ¸Þ¼ÒµåÀÇ ½Ã±×³ÊÃİú ÇÔ²² »õ·Î¿î ¸Þ¼Òµå¸¦ »ðÀÔÇÕ´Ï´Ù.  ÀÌ »õ·Î¿î ¸Þ¼Òµå´Â »õ·Î¿î ½Ã±×³ÊÃİú ÇÔ²² ¿À·¡µÈ ¸Þ¼Òµå¿¡ ÄÝÀ» Æ÷ÇÔÇÕ´Ï´Ù.

¿¹¸¦ µé¸é, ¿ì¸®´Â ´ÙÀ½ÀÇ Å¬·¡½º¸¦ °¡Áý´Ï´Ù

 
    class AClass {
        public void methodA() {
            //some code here
        }
        public void methodB() {
            //some code here
        }
    }
 
    ...
 
    void foo (AClass aClass){
        aClass.methodA();
    }

 

±×¸®°í Å¸ÀÔ intÀÇ ¸Å°³ º¯¼ö¸¦ Ãß°¡Çϸ鼭 methodAÀÇ ½Ã±×³ÊÃÄÀ» Modify¸¦ °áÁ¤ÇÕ´Ï´Ù¸®ÆÑÅ丵 ÀÌÈÄ ÀÌ Å¬·¡½º´Â ´ÙÀ½°ú °°ÀÌ º¼ °ÍÀÔ´Ï´Ù:
 
    class AClass {
        public void methodA(int aParameter) {
            //some code here
        }
        public void methodB() {
            //some code here
        }
    }


Ãß°¡µÈ ¸Å°³ º¯¼ö¸¦ À§ÇØ µðÆúÆ® °ªÀ» Ãß°¡ÇÏ´Â °Í¿¡ µû¶ó ¼±ÅÃµÈ ¸Þ¼ÒµåÀÇ Àκ¸ÄÉÀ̼ÇÀº º¯°æµÉ °ÍÀÔ´Ï´Ù:

    void foo (AClass aClass){
        aClass.methodA(0);
    }
 

¸¸ÀÏ ´ç½ÅÀÌ Delegate via overloading method ¼±ÅÃÇϸé AClass ÄÚµå´Â ´Ù¸£°Ô º¼ °ÍÀÔ´Ï´Ù.

 
    class AClass {
       public void methodA() {
            methodA(0);
        }
 
        public void methodA(int aParameter) {
            //some code here
        }
        public void methodB() {
            //some code here
        }
    }
 
    ...
 
    void foo (AClass aClass){
        aClass.methodA();
    }



¸Þ¼Òµå ½Ã±×³ÊÃÄ º¯°æ


¸Þ¼Òµå ½Ã±×³ÊÃÄÀ» º¯°æÇϱâ À§Çؼ­

 1.   Project, ¶Ç ´Ù¸¥ º¸±âÀÎ Commander ¿¡¼­ ¸Þ¼Òµå¸¦ ¼±ÅÃÇϰųª ¶Ç´Â ¹®¼­ ÆíÁý±â¿¡¼­ ¸®ÆåÅäµÇ´Â ¸Þ¼Òµå À̸§¿¡¼­ ij·µÀ» À§Ä¡½Ã۰í, ±× ´ÙÀ½ ÆË¾÷ ¸Þ´º(Ŭ·¡½º¸¦ ¿À¸¥ÂÊ ¹öư Ŭ¸¯ÇÏ¿©) ¶Ç´Â ¸ÞÀÎ Menu Bar µÑ Áß ¾î´À ÂÊÀ¸·ÎºÎÅÍ Ctrl + F6 ´©¸£°í OR Refactor Change Signature...¸¦ Ŭ¸¯ÇÕ´Ï´Ù.
 2.   ´ÙÀ½ ´ÙÀ̾ó·Î±× À©µµ¿ì´Â ¸®ÆÑÅ丵 ¸Å°³ º¯¼ö¸¦ ÁöÁ¤Çϱâ À§ÇØ ³ªÅ¸³¯ °ÍÀÔ´Ï´Ù:

À̸§

 

ÀÌ ÅØ½ºÆ® Çʵ忡¼­ ´ç½ÅÀº ¸Þ¼ÒµåÀÇ À̸§À» º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

¸®ÅÏ ÇüÅÂ

 

ÀÌ ÅØ½ºÆ® Çʵ忡¼­ ´ç½ÅÀº ¸Þ¼ÒµåÀÇ ¸®ÅÏ ÇüŸ¦ º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

¸Å°³ º¯¼ö

ÀÌ ¸ñ·Ï¿¡¼­ ´ç½ÅÀº ¼±ÅÃµÈ ¸Þ¼Òµå(°¢°¢ Add ¶Ç´Â Remove ¹öưÀ» »ç¿ëÇÏ¿©)¿¡ ´ëÇÑ ¸Å°³ º¯¼ö¸¦ Ãß°¡ ¶Ç´Â Á¦°ÅÇÒ ¼ö Àְųª, ±×µéÀÇ ¼ø¼­(°¢°¢ Move up ¶Ç´Â Move down ¹öưÀ» »ç¿ëÇÏ¿©)À» º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.  ¶ÇÇÑ ´ç½ÅÀº »óÀÀÇÏ´Â ¸Å°³ º¯¼ö Çʵ带 Ŭ¸¯ÇÏ´Â °Í¿¡ ÀÇÇØ ¸Å°³ º¯¼öÀÇ Å¸ÀÔÀ» ÆíÁýÇϰųª, À̸§À» Áþ°Å³ª, »õ·Ó°Ô ÀÔ·ÂÇÒ ¼ö ÀÖ´Â ¸Å°³ º¯¼ö¸¦ À§ÇØ µðÆúÆ® °ªÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.  ¸¸ÀÏ ¸Å°³ º¯¼ö ÇüÅ ¶Ç´Â À̸§ÀÌ ºÎÁ¤È®ÇÏ¸é ´ç½Å¿¡°Ô Incorrect Data ´ÙÀ̾ó·Î±×°¡ ÇÁ·ÒÇÁÆ® µÉ °Í ÀÔ´Ï´Ù.


¸¸ÀÏ »õ·Î¿î ¸Å°³ º¯¼ö°¡ Ãß°¡µÇ¸é, ±×°ÍÀº ¸Þ¼Òµå ÄÝÀ» À§ÇØ »ç¿ëµÇ´Â µðÆúÆ® °ªÀÌ Á¦°øµÇ¾î¾ß¸¸ ÇÕ´Ï´Ù.  ±×°ÍÀÌ ¾øÀ¸¸é, ´ç½ÅÀº ´ÙÀ½ÀÇ Incorrect Data ´ÙÀ̾ó·Î±×¸¦ º¼ °ÍÀÔ´Ï´Ù:


Any var Ã¼Å© ¹Ú½º°¡ ¼±ÅõǸé, ¸¸ÀÏ ¸Þ¼Òµå ÄÝ Æ÷ÀÎÆ®¿¡¼­ º¸¿©Áö´Â ±× ŸÀÔ°ú ÇÔ²² ¿À·ÎÁö ÇϳªÀÇ Çʵå/¸Å°³º¯¼ö/°ªÀÌ ÀÖ´Ù¸é

IDEA´Â »óÀÀÇÏ´Â ¸Å°³ º¯¼ö¿¡ ´ëÇØ ÀûÀýÇÑ Å¸ÀÔ°ú ÇÔ²² ¾î¶² °¡¿ëÇÑ Çʵå/¸Å°³º¯¼ö/°ªÀ» È£ÃâÇÏ´Â ¸Þ¼Òµå¿¡¼­ ¸®ÆÑÅ丵 ÇÑ ÈÄ¿¡ ã¾Æ¼­ »ç¿ëÇÏ·Á°í ÇÒ °Í ÀÔ´Ï´Ù. ¸¸ÀÏ ¸î °³ÀÇ ±¸¼º¼Ò°¡ µðÆúÆ® º¸´Ù °¡¿ëÇÑ ±× ŸÀÔ°ú ÇÔ²² ÀÖ´Ù¸é °ªÀº »ç¿ëµË´Ï´Ù. ¸¸ÀÏ Any var Ã¼Å© ¹Ú½º°¡ ¼±ÅõǸé, µðÆúÆ® °ªÀº Ç×»ó Àû¿ëµÉ °ÍÀÔ´Ï´Ù.

½Ã±×³ÊÃÄ ¹Ì¸® º¸±â

 

°Å±â¿¡¼­ ´ç½ÅÀº º¯°æÀÌ Àû¿ëµÇ°í ³­ ÈÄ¿¡ ³ªÅ¸³¯ °ÍÀÎ ¸Þ¼Òµå ½Ã±×³ÊÃÄÀ» ¹Ì¸® º¸±âÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

º¯°æµÈ ¹Ì¸® º¸±â »ç¿ë


ÀÌ Ã¼Å© ¹Ú½º¸¦ ¼±ÅÃÇÏ¸é ´ç½ÅÀº ¾î¶² »ç¿ëÀÌ ¹ß°ßµÇ¾ú´ÂÁö ÃßÀûÇϰí, ±×µéÀÇ ±³Ã¼¸¦ ½ÂÀÎÇϵµ·Ï Çã¶ôÇÕ´Ï´Ù.  ÀÌ Ã¼Å© ¹Ú½º°¡ ¼±ÅõÇÁö ¾ÊÀ» ¶§, IDEA´Â ±³Ã¼¸¦ ÀÚµ¿ÀûÀ¸·Î ¼öÇàÇÕ´Ï´Ù.


½ÉÁö¾î üũ ¹Ú½º°¡ ¼±ÅõÇÁö ¾Ê¾ÒÀ» ¶§µµ, ¸¸ÀÏ ¹ß°ßµÈ »ç¿ëÀÌ ¾î¶² Àбâ Àü¿ë ÆÄÀÏ¿¡¼­ Á¸ÀçÇÏ¸é ´ç½ÅÀº ±³Ã¼ »ç¿ëÀ» È®ÀÎÇÏ´Â ÇÁ·ÒÇÁÆ®°¡ ´ç½Å¿¡ ´ë±âµÉ °Í ÀÔ´Ï´Ù.


Refactoring Preview ´ÙÀ̾ó·Î±×(¸¸ÀÏ ±×°ÍÀÌ ³ªÅ¸³ª¸é)¿¡¼­ ´ç½ÅÀº ¼öÇàµÈ º¯°æÀ» ºÐ¼®ÇÒ ¼ö ÀÖ½À´Ï´Ù.  ¸®ÆÑÅ丵°ú ÇÔ²² ÁøÇàÇϱâ À§Çؼ­, Do Refactor¸¦ Ŭ¸¯ÇÕ´Ï´Ù±×·¸Áö ¾Ê´Ù¸é Cancel À» Ŭ¸¯ÇÕ´Ï´Ù. »ó¼¼ÇÑ °ÍÀ» º¸·Á¸é Refactoring Preview¸¦ º¸½Ê½Ã¿À.


 3.  OK¸¦ ´©¸¨´Ï´Ù, ±×¸®°í ¸Þ¼Òµå ½Ã±×³ÊÃÄÀº º¯°æµÉ °ÍÀÔ´Ï´Ù.

 4.  ´ç½ÅÀÌ Change Method Signature ÀÇ ÀÌÀüÀÇ º£À̽º Ŭ·¡½º ¸Þ¼Òµå¸¦ Override Çϰųª ¶Ç´Â ImplementÇÏ´Â ¸Þ¼Òµå¸¦ Refactor ÇÏ·Á°í ÇÒ ¶§, ´ç½Å¿¡°Ô ´ÙÀ½ÀÇ ´ÙÀ̾ó·Î±×°¡ °æ°íµÉ °Í ÀÔ´Ï´Ù.




No¸¦ ´©¸£¸é ´ç½ÅÀÌ º£À̽º Ŭ·¡½º ¸Þ¼Òµå¸¦ ¹Ù²ÙÁö ¾Ê°í ¼±ÅÃµÈ ¸Þ¼Òµå¸¸À» RefactorÇϵµ·Ï Çã¶ôÇÕ´Ï´Ù.

Yes¸¦ ´©¸£¸é ´ç½ÅÀÌ º£À̽º Ŭ·¡½º±îÁö ¸ðµç ¸Þ¼Òµå¸¦ º¯°æÇÏ´Â °ÍÀ» Çã¶ôÇÕ´Ï´Ù.  ±×·¯³ª, ¸¸ÀÏ ±×°ÍÀÌ ¾î¶² ÀÌÀ¯¿¡¼­µç ºÒ°¡´ÉÇÏ¸é ´ç½ÅÀº »óÀÀÇÏ´Â ¿À·ù ¸Þ½ÃÁö¸¦ º¼ °ÍÀÔ´Ï´Ù, ¿¹¸¦ µé¸é:



 5.   ¸¸ÀÏ Delegate via overloading method °¡ ¼±ÅÃµÇ°í ´ç½ÅÀº ±×·± Äڵ带 °¡Áý´Ï´Ù : 

 
        class A{
            public void method(){
                //some code
            };
        }
 
        class B extends A{
            public void method(){
                //some code
            };
        }
    

A Å¬·¡½º(ºÎ¸ð) ¸Þ¼Òµå¿¡ Àû¿ëµÈ ¸®ÆÑÅ丵 ÈÄ¿¡

 
    class A{
        public void method(){
            method(1);
        }
 
        public void method(int param){
            //some code
        };
    }
 
    class B extends A{
        public void method(int param){
            //some code
        };
    }
    

A.method°¡ º¯°æµÇ°í, B.method ½Ã±×³ÊÃÄ ¶ÇÇÑ º¯°æµË´Ï´Ù