Encapsulate Fields Refactoring  

 

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

°³¿ä


´ç½ÅÀÇ µ¥ÀÌÅ͸¦ ¼û±â°í, ¾×¼¼¼­ ¸Þ¼Òµå(¶ÇÇÑ °ÔÅÍ¿Í ¼¼Å͸¦ ºÎ¸£´Â)¿¡ ±âÃÊÇÏ´Â ¿ÜºÎÀÇ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇÏ¿© ±×°Í¿¡ ¾×¼¼½ºÇÏ´Â °ÍÀº ÀϹÝÀûÀ¸·Î ÁÁÀº IDEAÀÔ´Ï´Ù.  ÈÄ¿¡ ´ç½ÅÀº Ŭ·¡½º¿¡ ÀÇÁ¸ÇÏ´Â ÄÚµå¿Í ÇÔ²² ¿ÏÀü ȣȯ¼º°ú ±× °¡¿ë ¸Þ¼Òµå¸¦ º¸Á¸Çϰí ÀÖ´Â ³»ºÎÀÇ µ¥ÀÌÅ͸¦ º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. Encapsulate Fields  ¸®ÆÑÅ丵Àº ´ç½Å¿¡°Ô ´ç½ÅÀÇ µ¥ÀÌÅ͸¦ ¼û±â°í, ÇÊ¿äÇÑ ¾×¼¼¼­¸¦ »ý¼ºÇÏ´Â °ÍÀ» Çã¶ôÇÕ´Ï´Ù.

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

 
    public class Foo {
        public int field;
 
        public Foo(){
            field = 5;
        }
 
        public int calcValue(int value){
            return field + value;
        }
    }
 
    class Bar {
        private Foo foo;
 
        public int calcValue(int value){
            return foo.field + value;
        }
    }



Çʵåfield´Â ĸ½¶¿¡ ³Ö¾îÁú °Í ÀÔ´Ï´Ù. ¸®ÆÑÅ丵 ÀÌÈÄ, Çʵå´Â ¼û°ÜÁú °ÍÀÌ°í ±× ÂüÁ¶´Â º¯°æµÇ¸ç ¾×¼¼¼­ ¸Þ¼Òµå°¡  »ý¼ºµË´Ï´Ù:

 
    public class Foo {
        private int field;
 
        public Foo(){
            setField(5);
        }
 
        public int calcValue(int value){
            return getField() + value;
        }
 
        public int getField(){
            return field;
        }
 
        public void setField(int field){
            this.field = field;
        }
    }
 
    class Bar {
        private Foo foo;
 
        public int calcValue(int value){
            return foo.getField() + value;
        }
    }


´ç½ÅÀº ¾Æ¸¶µµ  Use accessors even when the field is accessible À» ¼±ÅÃ ÇØÁ¦ÇÏ´Â °Í¿¡ ÀÇÇØ Çʵ尡 º¸ÀÌ´Â °÷¿¡¼­ ¾×¼¼¼­¸¦ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀ» ¼±ÅÃÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

Encapsulating Fields  


Çʵ带 ĸ½¶¿¡ ³Ö±â À§ÇÏ¿©:

 1.   Project º¸±â¿¡¼­
Ŭ·¡½º¸¦ ¼±ÅÃÇÏ°í ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÏ´Â °Í¿¡ ÀÇÇØ ºÒ·ÁÁö´Â ÆË¾÷ ¸Þ´º¿¡¼­ Refactor |  Encapsulate Fields... ¸¦ Ŭ¸¯ÇϽʽÿÀ.
OR
Çʵ带 ¼±ÅÃÇÏ°í ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÏ´Â °Í¿¡ ÀÇÇØ ºÒ·ÁÁö´Â ÆË¾÷ ¸Þ´º¿¡¼­ Refactor |  Encapsulate Fields... ¸¦ Ŭ¸¯ÇϽʽÿÀ.


´ç½ÅÀº Ŭ·¡½º ¶Ç´Â Çʵ带 ¼±ÅÃÇϱâ À§ÇØ ´Ù¸¥ ¾î´À º¸±â, ¿¹¸¦ µé¸é Structure µµ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù .


editor ¿¡¼­ : 
¿øÇÏ´Â Çʵ忡¼­ÀÇ Ä³·µÀ» ¹èÄ¡Çϰí, ¸ÞÀÎ ¸Þ´º¿¡¼­ ¶Ç´Â ¿¡µðÅÍ¿¡¼­ ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÏ´Â °Í¿¡ ÀÇÇØ ºÒ·ÁÁö´Â ÆË¾÷ ¸Þ´º¿¡¼­Refactor |  Encapsulate Fields À» Ŭ¸¯ÇÕ´Ï´Ù.
OR

¸®ÆÑÅä Ŭ·¡½º¿¡ ³»ºÎÀÇ ¾î´Â Àå¼Ò¿¡¼­ ij·µÀ» ¹èÄ¡Çϰí, ¸ÞÀÎ ¸Þ´º¿¡¼­ ¶Ç´Â ¿¡µðÅÍ¿¡¼­ ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÏ´Â °Í¿¡ ÀÇÇØ ºÒ·ÁÁö´Â ÆË¾÷ ¸Þ´º¿¡¼­Refactor |  Encapsulate Fields À» Ŭ¸¯ÇÕ´Ï´Ù.

 2.   ±× ÈÄ, ´ÙÀ½ À©µµ¿ì´Â ¸®ÆÑÅ丵 ¸Å°³ º¯¼ö¸¦ ÁöÁ¤Çϱâ À§ÇØ ³ªÅ¸³¯ °ÍÀÔ´Ï´Ù.  ¸¸ÀÏ Çʵ尡 ÀÌÀü¿¡ ¼±ÅÃµÇ¸é ±×µéÀº ÀÌ ´ÙÀ̾ó·Î±× À©µµ¿ì¿¡¼­ ¼±ÅÃµÉ °ÍÀÔ´Ï´Ù.



Encapsulate Fields  ´ÙÀ̾ó·Î±×´Â ¾Æ·¡ ±â¼úÇÑ ´ÙÀ½ÀÇ ¿É¼Ç ±×·ìÀ» °¡Áý´Ï´Ù:

Fields to  Encapsulate  

ÀÌ ¿É¼Ç ±×·ìÀº Getter ¿Í Setter  ¸Þ¼Òµå¿¡ ´ëÇÑ À̸§°ú ÇÔ²² Ŭ·¡½º¿¡¼­ ÇʵåÀÇ ¸ñ·ÏÀ» Æ÷ÇÔÇÕ´Ï´Ù.  ¿©±â¿¡¼­´Â ´ç½ÅÀº ÇÊ¿äÇÑ Çʵ带 ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù.  ¶ÇÇÑ ´ç½ÅÀº ±×°ÍÀ» Ŭ¸¯ÇÏ´Â °Í¿¡ ÀÇÇØ ¸Þ¼Òµå À̸§ÀÇ ÆíÁýÀ» ½ÃÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸¸ÀÏ °°Àº ½Ã±×³ÊÃÄÀÌ ÀÖ´Â ¸Þ¼Òµå°¡ ¸®ÆÑÅä µÈ Å¬·¡½º¿¡ ÀÌ¹Ì Á¸ÀçÇϸé, Method ¾ÆÀÌÄÜÀº »óÀÀÇÏ´Â °¡½Ã¼º ¾ÆÀÌÄܰú ÇÔ²² ¾×¼¼¼­ À̸§ÀÇ ¿ÞÂÊÀ¸·Î ³ªÅ¸³³´Ï´Ù.  ¾î¶² »õ·Î¿î ¾×¼¼¼­ ¸Þ¼Òµåµµ ÀÌ °æ¿ì »ý¼ºµÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.  ±âÁ¸ ¸Þ¼Òµå´Â º¯°æµÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ±×¸®°í ÀϹÝÀûÀ¸·Î, ±× ¹ÛÀÇ ¾Æ¹«°Íµµ ºÎ°¡ÀûÀ¸·Î È®ÀεÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.  ÀÌ °æ¿ì ±âÁ¸ ¸Þ¼Òµå°¡ ¾×¼¼¼­ÀÇ ½ÇÁ¦·Î ±â´ÉÀ» ÇÏ´ÂÁö ´ç½ÅÀº ÁÖÀÇÇØ¾ß¸¸ ÇÕ´Ï´Ù.  ±×·¸Áö ¾ÊÀ¸¸é, ´ç½ÅÀº ¾×¼¼¼­ÀÇ ¶Ç ´Ù¸¥ À̸§À» ¼±ÅÃÇϰųª ¿¡µðÅÍ·Î µ¹¾Æ¿Ã Çʿ䰡 ÀÖÀ»Áöµµ ¸ð¸£°í, ±âÁ¸ ¸Þ¼Òµå¸¦ º¯°æÇÒÁöµµ ¸ð¸£¸é, ¿À·ÎÁö ±× ´ÙÀ½ Encapsulate Fields ¸®ÆÑÅ丵À» ´Ù½Ã È£ÃâÇÒÁöµµ ¸ð¸¨´Ï´Ù. ¸¸ÀÏ ±âÁ¸ ¸Þ¼Òµå°¡ ºÎ¸ð Ŭ·¡½ºÀÇ ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵å Çϰųª ¶Ç´Â ±¸ÇöÇÑ´Ù¸é, ±×°ÍÀº Overrides method     ¶Ç´Â  Implements method     ¾ÆÀÌÄÜÀ¸·Î ¸¶Å©µÉ °Í ÀÔ´Ï´Ù.

¿¢¼¼¼­ ¸Þ¼Òµå°¡ ¸®ÆÑÅäµÈ Ŭ·¡½ºÀÇ ¾È¿¡ Á¸ÀçÇÏÁö ¾ÊÁö¸¸ ±×·¯³ª ¸¸¾à »ý¼ºµÇ¾ú´Ù¸é, ¸¸ÀÏ ±×°ÍÀÌ ºÎ¸ð Ŭ·¡½ºÀÇ ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵å Çϰųª ¶Ç´Â ±¸ÇöÇÏ´Â °ÍÀ» »ý¼ºÇÑ´Ù¸é, ±×·± ¸Þ¼Òµå´Â ¿À·ÎÁö ¾×¼¼¼­ À̸§ÀÇ ¿ÞÂÊ¿¡ Overrides method     ¶Ç´Â Implements method     ¾ÆÀÌÄÜÀ¸·Î ¸¶Å©µÉ °Í ÀÔ´Ï´Ù. »õ·Î¿î ¾×¼¼¼­ ¸Þ¼Òµå´Â »ý¼ºµÉ °ÍÀÔ´Ï´Ù.  ±×·¯³ª, ´ç½ÅÀº À̰ÍÀÌ ¾×¼¼¼­ ¸Þ¼Òµå¸¦ »õ·Ó°Ô »ý¼ºÇß´Ù´Â »ç½ÇÀÌ ¹Ýµå½Ã ´ç½ÅÀÌ ±×°ÍÀ» °èȹÇß´ø °ÍÀÌ ¾Æ´ÒÁöµµ ¸ð¸£´Â ºÎ¸ð Ŭ·¡½ºÀÇ ¸Þ¼Òµå¸¦ ½ÇÁ¦·Î ¿À¹ö¶óÀ̵å Çϰųª ±¸ÇöÇÒ °ÍÀÎ °ÍÀ» ¾Ë°í ÀÖ¾î¾ß¸¸ ÇÕ´Ï´Ù.  ÀÌ °æ¿ì, ´ç½ÅÀº ¾×¼¼¼­ÀÇ ¶Ç ´Ù¸¥ À̸§À» ¼±ÅÃÇϰųª ¿¡µðÅÍ¿¡ µ¹¾Æ¿Ã Çʿ䰡 ÀÖÀ»Áöµµ ¸ð¸£°í, ±âÁ¸ ¸Þ¼Òµå¸¦ º¯°æÇÒÁöµµ ¸ð¸£°í, ´ÜÁö ±× ´ÙÀ½ Encapsulate Fields ¸®ÆÑÅ丵À» ´Ù½Ã È£ÃâÇÒÁöµµ ¸ð¸¨´Ï´Ù.

Encapsulate  

ÀÌ ¿É¼Ç ±×·ìÀº ´ç½ÅÀÌ ¿øÇÏ´Â Çʵ带 À§ÇÏ¿© »ý¼ºµÇ±â¸¦ ¿øÇÏ´Â ¾×¼¼¼­ ¸Þ¼Òµå( Getter  , Setter  ¶Ç´Â µÑ´Ù)¸¦ ±×°ÍÀ» ¼±ÅÃÇÏ´Â °ÍÀ» »ç¿ëÀÚ¿¡°Ô Çã¿ëÇÕ´Ï´Ù.  ¸¸ÀÏ Ã¼Å© ¹Ú½º ÁßÀÇ ÇÑ °³°¡ Fields to Encapsulate ¿¡¼­ Àüü »óÀÀÇÏ´Â Ä®·³(Getter ¶Ç´Â Setter  )À» ¼±ÅÃ ÇØÁ¦µÇ¸é Å×À̺íÀº ȸ»öÀ¸·Î µÉ °ÍÀÔ´Ï´Ù.

¿É¼Ç

¸¸ÀÏ Use accessors even when the field is accessibleÀÌ ¼±ÅõÇÁö ¾ÊÀ¸¸é, Çʵ尡 Á÷Á¢ ¾×¼¼½º °¡´ÉÇÒ ¼ö ÀÖ´Â ¿øÇÏ´Â Çʵ忡¼­ ÂüÁ¶´Â ¹Ù²îÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.  ±×·¸Áö ¾ÊÀ¸¸é, ¸¸ÀÏ Ã¼Å© ¹Ú½º°¡ ¼±ÅÃµÇ¸é ¿øÇÏ´Â Çʵ忡¼­ ¸ðµç ÂüÁ¶´Â ¾×¼¼¼­ ÄÝ·Î ±³Ã¼µÉ °ÍÀÔ´Ï´Ù.  ±×°Íµµ ¾Æ·¡¿¡ ±â¼úµÈ Encapsulated Fields' Visibility ¿¡¼­ ´ç½ÅÀÇ ¼±Åÿ¡ ÀÇÁ¸ÇÕ´Ï´Ù.

¿¹¸¦ µé¸é, ¸¸ÀÏ ´ç½ÅÀÌ Use accessors even when the field is accessible üũ ¹Ú½º¸¦ ¼±ÅÃ ÇØÁ¦Çϰí, Çʵ带 À§ÇØ private ÀÇ °¡½Ã¼ºÀ» ¼±ÅÃÇϸé, Ŭ·¡½º ³»¿¡¼­ ±×µéÀÌ °°Àº °ÍÀ¸·Î ³²¾Æ ÀÖÀ» °ÍÀÎ µ¿¾È Ŭ·¡½º ¹Ù±ùÂÊÀÇ ÇʵåÀÇ »ç¿ëÀº º¯°æµÉ °ÍÀÔ´Ï´Ù.

Encapsulated Fields'  Visibility  

ÀÌ ¿É¼Ç ±×·ìÀº ¸®ÆÑÅ丵 ÀÌÈÄ Çʵ尡 °¡Áú ¿øÇÏ´Â Çʵ带 À§ÇØ °¡½Ã¼º º¯°æÀÚ¸¦ ÁöÁ¤Çϱâ À§ÇØ »ç¿ëµË´Ï´Ù:

 Private  

 
Package local  

 
Protected  

 
Retain visibility as previously set  


ÀÌ °æ¿ì Use accessors even when the field is accessible Ã¼Å© ¹Ú½º´Â ºÒ°¡´ÉÇÏ°Ô µË´Ï´Ù.

Accessors' Visibility 

ÀÌ ¿É¼Ç ±×·ìÀº °¡½Ã¼º ¹üÀ§¸¦ »ý¼ºµÈ ¾×¼¼¼­ ¸Þ¼Òµå¿¡ ¸ÂÃß±â À§ÇØ »ç¿ëµË´Ï´Ù:

 Public  

 
Protected  

 
Package local  

 
Private  

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

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


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


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


OK¸¦ Ŭ¸¯ÇϽʽÿÀ.  ±×¸®°í ¿øÇÏ´Â Çʵå´Â ĸ½¶¿¡ ³Ö¾îÁú °ÍÀÔ´Ï´Ù.