¸®ÆÑÅ丵ÀÌ °¡´ÉÇÑ °÷¿¡¼­ ÀÎÅÍÆäÀ̽º »ç¿ë

 

ÀÌ ¼½¼ÇÀº Use Interface Where Possible  ¸®ÆÑÅ丵¿¡ ´ëÇØ ´ç½Å¿¡°Ô Æ÷°ýÀûÀΠ overview¿Í  how  ÀÌ ¸®ÆÑÅ丵 ±â´ÉÀÌ IntelliJ IDEA¿¡¼­ »ç¿ëµÉ ¼ö Àִ°¡¸¦ Á¦°øÇÕ´Ï´Ù.

°³¿ä


Use Interface Where Possible ¸®ÆÑÅ丵 ±â´ÉÀº »ç¿ëÀÚ¿¡°Ô º£À̽º Ŭ·¡½º/ÀÎÅÍÆäÀ̽ººÎÅÍ Á¶»ó Ŭ·¡½º ¶Ç´Â °°Àº ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â ³»ºÎ Ŭ·¡½ºÀÇ ÀνºÅϽº·Î ÆÄ»ýÇÑ Á¤ÀÇ ¸Þ¼ÒµåÀÇ ½ÇÇàÀ» À§ÀÓÇÏ´Â °ÍÀ» Çã¶ôÇÕ´Ï´Ù.


¿¹¸¦ µé¸é, ´ç½ÅÀº ´ÙÀ½ Ŭ·¡½º¸¦ °¡Áý´Ï´Ù:

 
public class ClassParent {
               void method1(){
                   //some code here
               }
 
               void method2(){
                   //some code here
               }
}
 
public class ClassChild extends ClassParent
{
               void method1() {
                 super.method1();
               }
               void method2() {
                 super.method2();
               }
}
 
public class UsageClass {
               void myMethod(){
                 ClassChild classChild = new ClassChild();
                 classChild.method1();
                 classChild.method2();
    }
}

 

ClassChild¿¡¼­ ¸®ÆÑÅ丵À» Àû¿ëÇϽʽÿÀ.  UsageClass ´Â ´ÙÀ½°ú °°ÀÌ º¯°æµÉ °ÍÀÔ´Ï´Ù:
 
public class UsageClass {
               void myMethod(){
                 ClassParent classChild = new ClassChild();
                 classChild.method1();
                 classChild.method2();
    }
}
 

°¡´ÉÇϸé ÀÎÅÍÆäÀ̽º »ç¿ë


°¡´ÉÇϸé ÀÎÅÍÆäÀ̽º ¶Ç´Â ½´ÆÛŬ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ­:

 1.   ¿¡µðÅÍ ¶Ç´Â ¸Þ¼Òµå°¡ ºÎ¸ð Ŭ·¡½º ¶Ç´Â ÀÎÅÍÆäÀ̽º·Î À§ÀÓµÈ º¸±â ( Project, Commander ) ÁßÀÇ Çϳª¿¡¼­ Ŭ·¡½º À§ÀÇ Ä³·µÀ» ¼³Á¤ÇÏ°í ¸ÞÀÎ ¸Þ´º, ¶Ç´Â ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÏ¿© ºÒ·ÁÁö´Â ÆË¾÷ ¸Þ´º¿¡¼­ Refactor |  Use Interface Where Possible¸¦ Ŭ¸¯ÇϽʽÿÀ.
 2.   ´ç½ÅÀº Use Interface Where Possible  ´ÙÀ̾ó·Î±×¸¦ º¼ °ÍÀÔ´Ï´Ù.

Change Usages of  <your_package_name>.<your_class_name> to   

´ç½ÅÀÌ »ç¿ëÇÒ Çʿ䰡 ÀÖ´Â °¡¿ëÇÑ ºÎ¸ð Ŭ·¡½º/ÀÎÅÍÆäÀ̽ºÀÇ ¸ñ·ÏÀ¸·ÎºÎÅÍÀÇ ¼±ÅÃÇϽʽÿÀ.

Use interface/superclass  in instanceof  

¸¸ÀÏ ¼±ÅõǸé, IDEA´Â ¼±ÅÃµÈ ½´ÆÛŬ·¡½º/ÀÎÅÍÆäÀ̽º¸¦ À§ÇÑ instanceof ½ºÅ×ÀÌÆ®¸ÕÆ®ÀÇ Á¸À縦 À§ÇØ È®ÀÎÇÒ °ÍÀ̰í, ¸¸ÀÏ ¹«¾ð°¡ ¹ß°ßµÇ¸é ±×°ÍÀ» º¯°æÇÒ °ÍÀÔ´Ï´Ù.
 
¿¹¸¦ µé¸é, ´ç½ÅÀº ParentInterface °¡ ÅÂ±× ÀÎÅÍÆäÀ̽ºÀÎ ´ÙÀ½ÀÇ ÄÚµå(À§ÀÇ ¿¹Á¦¿¡ ±âÃÊÇÏ¿©)¸¦ °¡Áý´Ï´Ù:

 
public interface BaseInterface {
               void myMethod();
}
 
public interface ParentInterface extends BaseInterface  {
            //some code here
}
 
public class ClassChild implements ParentInterface
{
               public void myMethod(){
            //some code here
               }
}
 
public class UsageClass {
               void myMethod(){
                 ClassChild child = new ClassChild();
                 child.myMethod();
 
                 if(child instanceof ParentInterface) {
            //some code here
                 }
               }
}

 

±×¸®°í ¸®ÆÑÅ丵 ÇÁ·Î¼¼½º°¡ ParentInterface ¿¡ Àû¿ëµÇ°í ³­ ÈÄ¿¡ UsageClass ´Â ´ÙÀ½°ú °°ÀÌ º¼ °ÍÀÔ´Ï´Ù:
 
public class UsageClass {
               void myMethod(){
                 ClassChild child = new ClassChild();
                 child.myMethod();
 
                 if(child instanceof BaseInterface) {
            //some code here
                 }
               }
}

 

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

ÀÌ Ã¼Å© ¹Ú½º¸¦ ¼±ÅÃÇÏ¸é ´ç½Å¿¡°Ô »ç¿ëÀÌ ¹ß°ßµÈ °ÍÀÇ Á¤º¸¸¦ °è¼Ó ¾ò´Â °ÍÀ» Çã¶ôÇϰí, ´ç½Å¿¡°Ô ±×µéÀÇ ±³Ã¼¸¦ ½ÂÀÎÇÏ´Â °ÍÀ» Çã¶ôÇÕ´Ï´Ù.  ÀÌ Ã¼Å© ¹Ú½º°¡ ¼±ÅõÇÁö ¾ÊÀ» ¶§, IDEA´Â ±³Ã¼ ±â´É¸¦ ÀÚµ¿ÀûÀ¸·Î ¼öÇàÇÕ´Ï´Ù.


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


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


±×¸®°í ¸¸ÀÏ ¾î¶² Ŭ·¡½º/ÀÎÅÍÆäÀ̽º »ç¿ëµµ ºÎ¸ð Ŭ·¡½º/ÀÎÅÍÆäÀ̽º·Î ±³Ã¼µÉ ¼ö ¾øÀ¸¸é, ´ç½Å¿¡°Ô ´ÙÀ½ÀÇ ¸Þ½ÃÁö°¡ ÇÁ·ÒÇÁÆ® µÉ °ÍÀÔ´Ï´Ù: