ÀÌ ¼½¼ÇÀº Introduce Parameter
¸®ÆÑÅ丵 À§¿¡¼ overview¸¦ Á¦°øÇϰí how ÀÌ ¸®ÆÑÅ丵ÀÌ IntelliJ
IDEA¿¡¼ »ç¿ëµÉ ¼ö Àִ°¡¸¦ Á¦°øÇÕ´Ï´Ù.
¸¸ÀÏ ´ç½ÅÀÌ ¸Þ¼Òµå ÄÝ¿¡¼ ³Ñ¾î°¡´Â ÀϺΠ°ªÀ» ÇÊ¿ä·Î Çϸé Introduce
Parameter ¸®ÆÑÅ丵Àº ¸Å°³ º¯¼ö¸¦ ¸Þ¼Òµå ¼±¾ð¿¡ Ãß°¡Çϱâ À§ÇØ »ç¿ëµË´Ï´Ù. ¸Þ¼Òµå »ç¿ëÀº ¶ÇÇÑ º¯°æµË´Ï´Ù. ¸Å°³ º¯¼ö¿¡ ÂüÁ¶´Â ¸Þ¼Òµå ½Ã±×³ÊÃÄ º¯°æ
¸®ÆÑÅ丵(»ý¼ºµÈ ½ºÅ×ÀÌÆ®¸ÕÆ®°¡ ´Ü¼øÈ÷ ÅØ½ºÆ®·Î¼ »ðÀÔµÈ °÷)°ú °°Áö ¾Ê°Ô ÇØ°áµË´Ï´Ù.
¿¹¸¦ µé¸é, ¸®ÆÑÅ丵 Àü¿¡ ´ÙÀ½ Äڵ尡 ÀÖ½À´Ï´Ù:
public int myMethod(int aParam) {
return aParam + (aParam + 1);
}
public void anotherMethod() {
myMethod(5);
}
±×¸®°í ´ç½ÅÀº ¶Ç ´Ù¸¥ ¸Å°³ º¯¼ö¸¦ (aParam + 1) Ç¥Çö½Ä ´ë½Å¿¡ myMethod ¿¡ »ý¼ºÇÏ´Â °ÍÀ» °áÁ¤Çß½À´Ï´Ù. ¸®ÆÑÅ丵 ÀÌÈÄ ´ç½ÅÀº ´ÙÀ½ Äڵ带 °¡Áú °ÍÀÔ´Ï´Ù:
public int myMethod(int aParam, int newParam) {
return aParam + newParam;
}
public void anotherMethod() {
myMethod(5, (5 + 1));
}
»õ·Î¿î ¸Å°³ º¯¼ö newParam ÀÌ »ý¼ºµÇ¾ú°í ¸Þ¼Òµå ÄÝ¿¡¼ ±× ½ÇÁ¦ °ªÀº ÃʱâȵǾú½À´Ï´Ù.
¸Å°³ º¯¼ö¸¦ »ý¼ºÇϱâ À§ÇØ, ¿¡µðÅÍ¿¡¼ ¸Å°³ º¯¼ö·Î ±³Ã¼µÉ Ç¥Çö½ÄÀ» ¼±ÅÃÇϽʽÿÀ.


|
Introduce Parameter ¸®ÆÑÅ丵À» Àû¿ëÇÑ Ç¥Çö½ÄÀ» ¼±ÅÃÇϱâ À§ÇØ Ctrl +
W (´Ü¾î ¼±ÅÃ)¸¦ »ç¿ëÇÏ´Â °ÍÀº ¾ÆÁÖ Æí¸®ÇÕ´Ï´Ù. ÄÚµåÀÇ ºí·Ï È®ÀåÀ» ¼±ÅÃÇÏ°í ´ç½ÅÀº ij·µÀ» ³»ºÎÀÇ ¾î´À °÷¿¡ ¹èÄ¡Çϰí, Ctrl +
W¸¦ ¸î ¹ø ´·¯¼ ¾î¶² Ç¥Çö½ÄÀÌ¶óµµ ½±°Ô Äڵ忡¼ ¼±ÅÃÇØµµ ÁÁ½À´Ï´Ù.
|
¸ÞÀÎ ¸Þ´º¿¡¼ ¶Ç´Â ¿¡µðÅÍ¿¡¼ ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÏ¿© ºÒ·ÁÁö´Â ÆË¾÷ ¸Þ´º¿¡¼ Refactor
| Introduce
Parameter... À» Ŭ¸¯ÇÕ´Ï´Ù. ¶Ç´Â Ctrl + Alt + P ´ÜÃà۸¦ »ç¿ëÇÕ´Ï´Ù.

|
·ÎÄà º¯¼ö À§¿¡¼ ¸®ÆÑÅ丵À» Àû¿ëÇϸé¼, ´ç½ÅÀº ¿À·ÎÁö ±×°Í À§¿¡¼ ij·µÀ» ¹èÄ¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª Çʵå À§¿¡¼ ¸®ÆÑÅ丵À» Àû¿ëÇϱâ À§ÇØ, Çʵ尡 ¿¡µðÅÍ¿¡¼ ¼±ÅõǾî¾ß¸¸ ÇÑ´Ù¶ó´Â Á¡¿¡ ÁÖÀÇÇϽʽÿÀ.
|
´ÙÀ½ Introduce
Parameter ´ÙÀ̾ó·Î±×°¡ ³ªÅ¸³³´Ï´Ù:

´ÙÀ̾ó·Î±×´Â ´ÙÀ½ÀÇ Á¦¾î¸¦ °¡Áý´Ï´Ù:
Parameter of type
|
»ý¼ºµÈ ¸Å°³ º¯¼ö¸¦ À§ÇØ Å¸ÀÔÀ» ¼±ÅÃÇϽʽÿÀ.
|
Name
|
»ý¼ºµÈ ¸Å°³ º¯¼ö¸¦ À§ÇÑ À̸§À» ŸÀÌÇÁÇϰųª, IDEA¿¡ ÀÇÇØ Á¦¾ÈµÈ Çϳª¸¦ »ç¿ëÇÕ´Ï´Ù.
|
Declare final
|
¸¸ÀÏ ¼±ÅõǸé, »ý¼ºµÈ ¸Å°³ º¯¼ö´Â ÃÖÁ¾ÀûÀ¸·Î ¼±¾ðµË´Ï´Ù.
|
Preview usages to
be changed
|
ÀÌ Ã¼Å© ¹Ú½º¸¦ ¼±ÅÃÇÏ¸é ´ç½ÅÀº ¾î¶² »ç¿ëÀÌ ¹ß°ßµÇ¾ú´ÂÁö ÃßÀûÇϰí, ±×µéÀÇ ±³Ã¼¸¦ ½ÂÀÎÇϵµ·Ï Çã¶ôÇÕ´Ï´Ù. ÀÌ Ã¼Å© ¹Ú½º°¡ ¼±ÅõÇÁö ¾ÊÀ» ¶§, IDEA´Â ±³Ã¼¸¦ ÀÚµ¿ÀûÀ¸·Î ¼öÇàÇÕ´Ï´Ù.

|
½ÉÁö¾î üũ ¹Ú½º°¡ ¼±ÅõÇÁö ¾Ê¾ÒÀ» ¶§µµ, ¸¸ÀÏ ¹ß°ßµÈ »ç¿ëÀÌ ¾î¶² Àбâ Àü¿ë ÆÄÀÏ¿¡¼ Á¸ÀçÇÏ¸é ´ç½ÅÀº »ç¿ë ±³Ã¼¸¦ È®ÀÎÇÏ´Â ÇÁ·ÒÇÁÆ®°¡ ´ç½Å¿¡ ´ë±âµÉ °Í ÀÔ´Ï´Ù.
|
|
|
¸®ÆÑÅ丵À» Àû¿ëÇϱâ À§ÇØ Enter¸¦ ´©¸£½Ê½Ã¿À.
´ÙÀ½ ƯÁ¤ÀÇ À̽´´Â ¾ð±ÞµÇ¾î¾ß¸¸ ÇÕ´Ï´Ù:
¸¸ÀÏ Çʵ尡 ¸Þ¼Òµå ¼±¾ð¿¡¼ »õ·Î¿î ¸Å°³ º¯¼ö·Î¼ Á¦°øµÇ±â¸¦ ¿øÇϸé, ¸Þ¼Òµå ÄÝ¿¡¼ ÀÌ Çʵå´Â Ŭ·¡½º ÀνºÅϽºÀÇ Çʵå·Î¼ Á¦°øµÉ °ÍÀÔ´Ï´Ù.
À§ÀÇ ¿¹Á¦¸¦ »ç¿ëÇϰí ÀÖ´Â Çʵ带 Ãß°¡ÇÕ´Ï´Ù:
public class AClass {
public int myField;
public int myMethod(int aParam) {
return aParam + (myField + 1);
}
}
public class AnotherClass {
AClass aClass = new AClass();
public void anotherMethod() {
aClass.myMethod(5);
}
}
¸®ÆÑÅ丵 ÀÌÈÄ ´ç½ÅÀº ´ÙÀ½ÀÇ Äڵ带 °¡Áú °ÍÀÔ´Ï´Ù:
public class AClass {
public int myField;
public int myMethod(int aParam, int newParam) {
return aParam + newParam;
}
}
public class AnotherClass {
AClass aClass = new AClass();
public void anotherMethod() {
aClass.myMethod(5, (aClass.myField + 1));
}
}
¸¸ÀÏ Å¬·¡½º ±¸¼º ¿ä¼Ò°¡ Á¢±ÙÇϱ⠾î·Á¿ì¸é(¿¹¸¦ µé¸é, À§ÀÇ ¿¹Á¦¿¡¼ Çʵå´Â privateÀÔ´Ï´Ù), ±×°ÍÀº ¸Þ¼Òµå ÄÝ¿¡ »ðÀ﵃ °ÍÀÔ´Ï´Ù. ±×·¯³ª ÀÌ ÆÄÀÏÀ» ÄÄÆÄÀÏ ¾ÈµÇ°Ô ¸¸µå´Â ¿¡·¯·Î¼ °Á¶µÉ °ÍÀÔ´Ï´Ù.
¸¸ÀÏ ´ç½ÅÀÌ °ÔÅÍ¿Í ÇÔ²² Introduce
Parameter ¸®ÆÑÅ丵À» À§ÇØ Çʵ带 »ç¿ëÇϸé, ´ç½Å¿¡°Ô È®ÀåµÈ ´ÙÀ̾ó·Î±×·Î ÇÁ·ÒÇÁÆ®µÉ °ÍÀÔ´Ï´Ù:

´ÙÀ̾ó·Î±×´Â ¿É¼Ç ±×·ì Replace
fields used in expressions with their gettersÀ» °®½À´Ï´Ù:
Do not
replace
|
ÇʵåÀÇ ¾î´À °Íµµ °ÔÅÍ¿¡ ÄÝ·Î ±³Ã¼µÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.
|
Replace
fields inaccessible in usage context
|
»ç¿ë ¹®¸ÆÀ¸·ÎºÎÅÍ Á÷Á¢ ¾×¼¼½ºµÉ ¼ö ¾ø´Â Çʵ常ÀÌ °ÔÅÍ¿¡ ÄÝ·Î ±³Ã¼µÉ °ÍÀÔ´Ï´Ù.
|
Replace all
fields
|
¸ðµç Çʵå´Â °ÔÅÍ¿¡ ÄÝ·Î ±³Ã¼µÉ °ÍÀÔ´Ï´Ù.
|
|
·ÎÄà º¯¼ö À§¿¡¼ ¸®ÆÑÅ丵À» Àû¿ëÇÏ¸é µÎ °³ÀÇ ºÎ°¡ÀÇ Ã¼Å© ¹Ú½º¿Í ÇÔ²² Introduce
Parameter ´ÙÀ̾ó·Î±×¸¦ ºÎ¸¦ °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, ´ç½ÅÀº ´ÙÀ½ÀÇ Äڵ带 °¡Áý´Ï´Ù:
public int myMethod(int firstPar) {
int secondPar = firstPar + 1;
return firstPar + secondPar;
}
±×¸®°í ´ç½ÅÀº secondPar º¯¼ö¸¦ ¼±ÅÃÇϰí ÀÖ´Â Introduce
Parameter ¸®ÆÑÅ丵À» Àû¿ëÇÕ´Ï´Ù .
´ç½ÅÀº ´ÙÀ½ÀÇ ´ÙÀ̾ó·Î±× À©µµ¿ìÀ» º¼ °ÍÀÔ´Ï´Ù:

Replace all occurrences
(<number_of_occurences> occurrences)
|
°¡´ÉÇϸé, ¼±ÅÃµÈ º¯¼öÀÇ ¸ðµç ¹ß»ýÀº ¸Å°³ º¯¼ö·Î ±³Ã¼µÉ °ÍÀÔ´Ï´Ù. ±×¸®°í Delete
variable üũ ¹Ú½º´Â »ç¿ë °¡´ÉÇÏ°Ô ÇÏ°Ô µË´Ï´Ù.
±×·¸Áö ¾ÊÀ¸¸é, ¿À·ÎÁö ¼±ÅÃµÈ º¯¼ö »ç¿ëÀº ¸Å°³ º¯¼ö·Î ±³Ã¼µÉ °ÍÀÔ´Ï´Ù.

|
¿À·ÎÁö ¼±ÅÃµÈ º¯¼öÀÇ µÑ ÀÌ»óÀÇ ´õ ¸¹Àº ¹ß»ýÀÌ ÀÖÀ» °æ¿ì¿¡ ÀÌ Ã¼Å© ¹Ú½º´Â ³ªÅ¸³³´Ï´Ù.
|
|
Delete
variable definition
|
°¡´ÉÇϸé, º¯¼ö Á¤ÀÇ´Â »èÁ¦µÉ °ÍÀÔ´Ï´Ù.
|
Use variable initializer
to initialize parameter
|
°¡´ÉÇϸé, º¯¼ö À̴ϼȶóÀÌÀú´Â ¸Þ¼Òµå ÄÝ¿¡¼ ¸Å°³ º¯¼ö¸¦ ÃʱâÈÇϱâ À§ÇØ »ç¿ëµÉ °ÍÀÔ´Ï´Ù.
|
|
Enter¸¦ ´©¸£¸é ¸®ÆÑÅ丵À» Àû¿ëÇÒ °ÍÀÔ´Ï´Ù.
|
¸¸ÀÏ ½ÇÁ¦ ¸Þ¼Òµå ¸Å°³ º¯¼öÀΠŬ·¡½º ÀνºÅϽº ¶Ç´Â Ç¥Çö½Ä À§¿¡¼ Àû¿ëµÈ´Ù¸é, Introduce Parameter ¸®ÆÑÅ丵À» »ç¿ëÇÏ´Â °ÍÀº ¿¹»ó¿ÜÀÇ ºÎÀÛ¿ëÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, ±×·± ÄÚµåÀÇ °æ¿ì¿¡´Â:
class AClass {
int field;
int method() {
return field;
}
}
class Usage {
void method(List list) {
int sum = 0;
for(Iterator it = list.iterator(); it.hasNext(); ) {
sum += ((AClass) it.next()).method();
}
}
}
±×¸®°í field Çʵ带 À§ÇØ Àû¿ëµÈ ¸®ÆÑÅ丵 ÈÄÀÇ ÄÚµå:
class AClass {
int field;
int method(int newfield) {
return newfield;
}
}
class Usage {
void method(List list) {
int sum = 0;
for(Iterator it = list.iterator; it.hasNext(); ) {
sum += ((AClass) it.next()).method(((AClass) it.next()).field);
}
}
¹Ýº¹ °ªÀº ½ÇÁ¦·Î ´ç½ÅÀÌ ¿¹»óÇß´ø ¹ÝÀÀÀÌ ¾Æ´Ñ µÎ ¹è·Î Áõ°¡µË´Ï´Ù
±×·¯³ª, IDEAÀº ÀϽÃÀû º¯¼ö¸¦ ¼º°øÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ°í, ÁõºÐ/°¨·®/´ëÀÔ ¿¬»ê°ú new Ű¿öµå »ç¿ë°ú °°Àº °æ¿ì¸¦ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¸é:
public int myMethod(List list) {
return list.size();
}
public void anotherMethod() {
myMethod(new ArrayList());
}
±×¸®°í ¸®ÆÑÅ丵 ÈÄÀÇ ÄÚµå:
public int myMethod(List list, int newPar) {
return list.size();
}
public void anotherMethod() {
final ArrayList list = new ArrayList();
myMethod(list, list.size());
}
»õ·Î¿î º¯¼ö list ÀÌ »ý¼ºµÇ°í ¸Þ¼Òµå ÄÝÀ» À§ÇØ »ç¿ëµÇ´Â ¸ðµç ¸Å°³ º¯¼ö´Â ÀÌ º¯¼ö¸¦ »ç¿ëÇÏ¸é¼ Á¦°øµË´Ï´Ù.
|