Extract Interface
Refactoring |
|
|
ÀÌ ¼½¼ÇÀº Extract Interface ¸®ÆÑÅ丵 À§¿¡¼ ´ç½Å¿¡°Ô Æ÷°ýÀûÀÎ overview¿Í how ÀÌ ¸®ÆÑÅ丵ÀÌ IntelliJ IDEA¿¡¼ »ç¿ëµÉ ¼ö Àִ°¡¸¦ Á¦°øÇÕ´Ï´Ù.
µÎ ¹øÂ° (Rename
original class and use interface where possible) ´Â ¿ø·¡ÀÇ Å¬·¡½ºÀÇ À̸§À» º¯°æÇÏ°í »õ·Ó°Ô »ý¼ºµÈ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÕ´Ï´Ù. ±×·± °æ¿ì, °¡´ÉÇϸé IDEA´Â ±×¶§ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇϱâ À§ÇØ ¸ðµç ¿ø·¡ÀÇ Å¬·¡½º »ç¿ëÀ» ¹Ù²ß´Ï´Ù (±×¸®°í ±×°ÍÀÌ ÀÖÁö ¾ÊÀº °÷¿¡¼ ±×°ÍµéÀ» º¯°æÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù). ¶ÇÇÑ, ÃÖÃÊÀÇ Å¬·¡½º¿¡¼ ¼±¾ðµÈ Á¤ÀûÀÎ ÃÖÁ¾ÀûÀÎ Çʵå´Â ÀÎÅÍÆäÀ̽º·Î À̵¿µÉ ¼ö ÀÖ½À´Ï´Ù. ±× °á°ú, ÀÎÅÍÆäÀ̽º´Â ƯÁ¤ÀÇ ¸Þ¼Òµå¿Í Çʵ带 Æ÷ÇÔÇÏ¸é¼ »ý¼ºµÉ °ÍÀÔ´Ï´Ù. ±× ¶§¹®¿¡, Á¤ÀÇµÈ Å¬·¡½º ¸Þ¼Òµå´Â »óÀÀÇÏ´Â ÀÎÅÍÆäÀ̽º ¸Þ¼ÒµåÀÇ ±¸ÇöÀÌ µË´Ï´Ù. Extract Interface ¿É¼ÇÀ» À§ÇÑ ¿¹Á¦ ÄÚµå: ¿ì¸®´Â ´ÙÀ½ÀÇ Å¬·¡½º¸¦ °¡Áý´Ï´Ù:
class AClass { public static final double CONSTANT=3.14; public void publicMethod() {//some code here} public void secretMethod() {//some code here} }
¸®ÆÑÅ丵 ÀÌÈÄ, »õ·Î¿î ÀÎÅÍÆäÀ̽º´Â »ý¼ºµÉ °ÍÀÔ´Ï´Ù: public interface AnInterface { double CONSTANT=3.14; void publicMethod(); }
class AClass implements AnInterface { public void publicMethod() {//some code here} public void secretMethod() {//some code here} }
¸¸ÀÏ Rename
original class and use interface where possible ¿É¼ÇÀÌ ¼±ÅõǸé Äڵ带 ¿¹½ÃÇϽʽÿÀ:
±×¸®°í ÀÌÀüÀÇ Å¬·¡½ºÀÇ À̸§À» °¡Áö´Â »õ·Ó°Ô »ý¼ºµÈ ÀÎÅÍÆäÀ̽º:
´ç½ÅÀº ¶Ç ´Ù¸¥ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¹Ì ½ÇÇàÇϴ Ŭ·¡½º·ÎºÎÅÍ ÀÎÅÍÆäÀ̽º¸¦ ÃßÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.
class AClass implements AnotherInterface { public void publicMethod() { //some code here } public void secretMethod() { //some code here } }
Extracted
Interface:
public interface AnotherInterface extends AnInterface { }
Source
class implements both interfaces
class AClass implements AnInterface, AnotherInterface { public void publicMethod() { //some code here } public void secretMethod() { //some code here } }
Extracted
Interface: public interface AnotherInterface { }
ÀÎÅÍÆäÀ̽º°¡ ÃßÃâµÇ¾ú´õ¶ó¸é, IDEA´Â Ŭ·¡½ºÀÇ »ç¿ëÀ» °Ë»öÇϰí, ÀÎÅÍÆäÀ̽ºÀÇ »ç¿ëÀ¸·Î ±×µéÀ» °¡´ÉÇÏ¸é ±³Ã¼ÇÒ °ÍÀ» Á¦¾ÈÇÒ °ÍÀÔ´Ï´Ù. ´ç½ÅÀº IDEA°¡ ÀÌ µ¿ÀÛÀ» ÀÚµ¿ÀûÀ¸·Î ¼öÇàÇÏ°Ô ÇÒ ¼ö Àְųª, »ç¿ëÀÌ ¹ß°ßµÇ°í, ±×µéÀÇ ±³Ã¼¸¦ ½ÂÀÎÇÏ´Â °ÍÀÇ Á¤º¸¸¦ °è¼Ó ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ¿¹Á¦ ÄÚµå: class AClass implements AnInterface { public void publicMethod() {//some code here} public void secretMethod() {//some code here}
} ... ...
//This usage can be modified by changing the //parameter type from 'AClass' to 'AnInterface'
void foo (AClass aClass){ aClass.publicMethod(); }
... ...
//This usage will not be suggested for //refactoring because it is not specified in the interface
void bar (AClass aClass){ aClass.secretMethod(); }
Members
to Form Interface ÆÐ³Î¿¡¼, ´ç½ÅÀÌ ÀÎÅÍÆäÀ̽º¿¡ Æ÷ÇԵDZ⸦ ¿øÇÏ´Â ¸Þ¼Òµå¿Í Çʵ带 ¼±ÅÃÇϽʽÿÀ.
|