ÀÌ ¼½¼ÇÀº ´ç½Å¿¡°Ô 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 À» ¼±ÅÃ ÇØÁ¦ÇÏ´Â °Í¿¡ ÀÇÇØ Çʵ尡 º¸ÀÌ´Â °÷¿¡¼ ¾×¼¼¼¸¦ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀ» ¼±ÅÃÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
Çʵ带 ĸ½¶¿¡ ³Ö±â À§ÇÏ¿©:
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¸¦ Ŭ¸¯ÇϽʽÿÀ. ±×¸®°í ¿øÇÏ´Â Çʵå´Â ĸ½¶¿¡ ³Ö¾îÁú °ÍÀÔ´Ï´Ù.
|