Ŭ·¡½º ½Ã±×³ÊÃÄ ¸®ÆÑÅ丵ÀÇ º¯°æ

 

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

°³¿ä

 

Change Class Signature Àº ŸÀÔ ¸Å°³ º¯¼ö¸¦ ¹Ù²Ù°í, ±×µéÀÇ ¼ø¼­¸¦ º¯°æÇϱâ À§ÇØ »ç¿ëµÇ´Â Generics ¿¡ ƯÀ¯ÇÑ ¸®ÆÑÅ丵ÀÔ´Ï´Ù. 
 
¿¹¸¦ µé¸é, ¿ì¸®´Â ¸®ÆÑÅ丵 Àü¿¡ ´ÙÀ½ Äڵ带 °¡Áý´Ï´Ù:  
 
public void changingClassSingatureMethod(){
    NewClass newClass = new NewClass();
    //some code here...
}

 

Change Class Signature ¸®ÆÑÅ丵 ÀÌÈÄ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ º¼ °ÍÀÔ´Ï´Ù:  
 
    public void changingClassSingatureMethod(){
        NewClass<String> newClass = new NewClass<String>();
    // some code here...

 

´ç¿¬È÷, Ŭ·¡½º ¼±¾ðÀº ¹Ù²ð °ÍÀÔ´Ï´Ù.

*   ¸®ÆÑÅ丵 Àü¿¡
    
public class  NewClass { 

*   ¸®ÆÑÅ丵 ÀÌÈÄ
   
public class  NewClass <NewParam> { 

 

Ŭ·¡½º ½Ã±×³ÊÃÄ º¯°æ


Ŭ·¡½º ½Ã±×³ÊÃÄÀ» º¯°æÇϱâ À§Çؼ­:

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

 2.  ´ÙÀ½ ´ÙÀ̾ó·Î±× À©µµ¿ì´Â ¸®ÆÑÅ丵 ¸Å°³ º¯¼ö¸¦ ÁöÁ¤Çϱâ À§ÇØ ³ªÅ¸³¯ °ÍÀÔ´Ï´Ù:

¸Å°³ º¯¼ö ±×·ì

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


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


 

À̸§

¸Å°³ º¯¼ö À̸§À» Ç¥½ÃÇÕ´Ï´Ù.

 

µðÆúÆ® °ª

µðÆúÆ® ¸Å°³ º¯¼ö¸¦ Ç¥½Ã/ÆíÁý ÇÕ´Ï´Ù.  ÄÚµå ¿Ï·á¿Í intention actionÀÌ ÀÌ¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.

 

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

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


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


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


 3.   OK¸¦ ´©¸¨´Ï´Ù, ±×¸®°í Ŭ·¡½º »ç¿ë°ú ÇÔ²² Ŭ·¡½º ½Ã±×³ÊÃÄÀº º¯°æµÉ °ÍÀÔ´Ï´Ù.


¸¸ÀÏ ´ç½ÅÀÌ µðÆúÆ® °ªÀÌ ±âÁ¸ ¸Å°³ º¯¼öÀÇ ¾î´À Çϳª¿¡ ÀÇÁ¸ÇÏ´Â ¸Å°³ º¯¼ö¸¦ Ãß°¡Çϸé, ±×·± °ªÀº »ç¿ë¿¡¼­ Àû¿ëµÉ °ÍÀÔ´Ï´Ù.


 

ÄÉÀ̽º »ç¿ë

 

*   ŸÀÔ ¸Å°³º¯¼ö´Â ´Ù¸¥ Ŭ·¡½º·ÎºÎÅÍ ´Ù¸¥ ŸÀÔÀÇ ¸Å°³º¯¼ö¸¦ Æ÷ÇÔÇÏ¿© ´Ù¸¥ ±¸¼º¼Ò¸¦ È®ÀåÇÏ´Â ¹Ù¿îµå¸¦ °¡Áú ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, public class ClassA <T, E> °°Àº ÄÚµå´Â public class ClassA <T, E extends T>·Î ½±°Ô º¯ÇüµÉ ¼ö ÀÖ½À´Ï´Ù.
±×·¸Áö¸¸ ¸Å°³ º¯¼ö ¼ø¼­°¡ óÀ½¿¡ public class ClassA <E, T> ¿´´Ù¸é, Change Class Signature ¸®ÆÑÅ丵Àº ¸ðµç ±× »ç¿ë »Ó¸¸¾Æ´Ï¶ó Ŭ·¡½º ½Ã±×³ÊÃÄ¿¡¼­ ±× ¸Å°³ º¯¼ö ¼ø¼­¸¦ º¯°æÇϱ⿡ À¯¿ëÇÒ °Í ÀÔ´Ï´Ù.

*   ¸¸ÀÏ ÇÑ ¸Å°³ º¯¼ö°¡ ´Ù¸¥ °Í¿¡ ÀÇÁ¸ÇÑ´Ù¸é IDEA´Â ¿ÀÈ÷·Á º¹ÀâÇÑ ÄÉÀ̽º¸¦ ¼º°øÀûÀ¸·Î ó¸®ÇÏ°í ¸Å°³ º¯¼ö¿Í »óÀÀÇÏ´Â »ç¿ëÀ» º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.  ¿¹¸¦ µé¸é ´ç½ÅÀº ´ÙÀ½ÀÇ Å¬·¡½º¸¦ °¡Áý´Ï´Ù:

 
public class TheClass <FirstParam> {
    //class code
}

 

±×¸®°í TheClass°¡ ¿¹¸¦ µé¾î ¼³¸íÇÏ´Â °÷¿¡ ÀÖ´Â UsageClass

 
public class UsageClass {
TheClass<String> theClass = new TheClass<String>();
TheClass<Integer> theClassInt = new TheClass<Integer>();
//class code
}
 

¸®ÆÑÅ丵À» Àû¿ëÇϰí TheClass ¿¡¼­ µðÆúÆ® °ª List<FirstParam> ¿Í ÇÔ²² SecondParam »õ·Î¿î ¸Å°³ º¯¼ö¸¦ Ãß°¡ÇϽʽÿÀ.

±×·±µ¥, ¸¸ÀÏ List°¡ ¾ÆÁ÷ ÀÓÆ÷Æ®µÇÁö ¾ÊÀ¸¸é, ´ç½Å¿¡°Ô »óÀÀÇÏ´Â Import Assistant  Á¦¾È°ú ÇÔ²² ÇÁ·ÒÇÁÆ® µÉ °ÍÀÔ´Ï´Ù.


ÄÚµå ¿Ï·á´Â ¶ÇÇÑ ÀÌ¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.



¸®ÆÑÅ丵 Äڵ尡 ´ÙÀ½°ú °°ÀÌ º¸ÀÎ ÈÄ¿¡:

public class TheClass <FirstParam,SecondParam> {
    //class code
}
 
public class UsageClass {
   TheClass<String, List<String>> theClass = new TheClass<String, List<String>>();
   TheClass<Integer, List<Integer>> theClassInt = new TheClass<Integer, List<Integer>>();
 
    //class code
}

 

¸Å°³ º¯¼ö´Â Ŭ·¡½º ÀνºÅϽº ¸Å°³ º¯¼ö¿¡¼­ ÀûÇÕÇÑ º¯°æ°ú ÇÔ²² Ãß°¡µË´Ï´Ù.