ÀÌ ¼½¼ÇÀº 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 ½Ã±×³ÊÃÄ ¶ÇÇÑ º¯°æµË´Ï´Ù.
|