ÀÌ ¼½¼ÇÀº 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
}
¸Å°³ º¯¼ö´Â Ŭ·¡½º ÀνºÅϽº ¸Å°³ º¯¼ö¿¡¼ ÀûÇÕÇÑ º¯°æ°ú ÇÔ²² Ãß°¡µË´Ï´Ù.
|