์๋๋ฅผ ๋ถ๋ช ํ ๋ฐํ๋ผ
์ข์ ์ด๋ฆ์ ์ง๊ธฐ ์ํด์๋ ์๊ฐ์ด ๋ง์ด ๋ค์ง๋ง ์ข์ ์ด๋ฆ์ผ๋ก ์ ์ฝํ๋ ์๊ฐ์ ํจ์ฌ ๋ ๋ง๋ค.
๋ณ์, ํจ์๋ ํด๋์ค์ ๊ฐ์ด ์กด์ฌ ์ด์ , ์ํ ๊ธฐ๋ฅ์ ๋ฐ๋ก ์ฃผ์์ฒ๋ฆฌํด์ผ ํ๋ค๋ฉด ์๋๋ฅผ ๋ถ๋ช ํ ๋๋ฌ๋ด์ง ์์๋ค๋ ๊ฒ์ด๋ค.
int d;
์ด๊ฒ์ ๋ฌด์์ ์๋ฏธํ ๊น?
์๊ฐ? ๊ฑฐ๋ฆฌ? ์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ์ฃผ์์ด ์์ผ๋ฉด ๋ณ์์ ์๋์ ์๋ฏธ๋ ์์์ฑ๊ธฐ ํ๋ค๋ค.
๋ฐ๋ผ์ ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ฏธ ์๋ ์ด๋ฆ์ผ๋ก ์ง์ด์ผ ํ๋ค.
int fileAgeInDays;
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ํ์.
public list<int[]> getThem(){
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4)
list1.add(x);
return list1;
}
๊ฒจ์ฐ 6์ค๋ฐ์ ์ ๋๋ ์ฝ๋๋ฅผ ์ดํดํ๋ ๊ฒ์ ์ด๋ ต๋ค.
์ด ์ฝ๋์ ๋ฌธ์ ์ ์ ๋จ์์ฑ์ด ์๋๋ผ ์ฝ๋์ ํจ์ถ์ฑ์ด๋ค.
๐ ์ฝ๋์ ๋งฅ๋ฝ์ด ์ฝ๋ ์์ฒด์ ๋ช ์์ ์ผ๋ก ๋๋ฌ๋์ง ์๋๋ค.
์ ์ฝ๋์๋ ์ฃผ์ ์์ด ์ ๋ณด ์ ๊ณต์ด ๊ฐ๋ฅํ์์๋ ๋ถ๊ตฌํ๊ณ ์ด๋ ํ ์ ๋ณด๋ ๋ค์ด์์ง ์๋ค.
์ ์ฝ๋์ ๊ฐ์ ์ฝ๋๋ก ์ง๋ขฐ ์ฐพ๊ธฐ ๊ฒ์์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ๋ค.
๊ทธ๋ผ theList๋ ๊ฒ์ํ์ด๋ฉฐ, ์ด ๋ณ์๋ฅผ gameBoard๋ผ๊ณ ๋ฐ๊ฟ๋ณด์.
public List<int[]> gatFlaggedCells(){
List<int[]> flaggedCells = new ArrayList<int[]>();
for (int[] cell : gameBoard)
if (cell [STATUS_VALUE] == FLAGGED)
flaggedCells.add(cell);
return flaggedCells;
}
์ฒ์ ์ฝ๋์ ๋น๊ตํด์ 0๋ฒ์งธ ๊ฐ์ ์นธ ์ํ๋ฅผ ๋ปํ๋ฉฐ, 4๋ ๊น๋ฐ์ด ๊ฝํ ์ํ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ฝ๋์ ๋จ์์ฑ์ ๋ณํ์ง ์์์ง๋ง ๊ฐ๋ ์ ์ด๋ฆ์ ๋ถ์์ผ๋ก์จ ์ฝ๋๋ ๋์ฑ ๋ช ํํด์ก๋ค.
โ ๋ฐฐ์ด์ ์ฌ์ฉํ์ง ์๊ณ ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ ๋ช ์์ ์ผ๋ก ๋ฐ๊ฟ ์๋ ์๋ค.
public List<int[]> gatFlaggedCells(){
List<int[]> flaggedCells = new ArrayList<int[]>();
for (int[] cell : gameBoard)
if (cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}
๊น๋ฐ์ด ๊ฝํ๋์ง ์ฌ๋ถ๋ฅผ ํจ์๋ก ๋ํ๋ธ๋ค๋ฉด ๋ ๋ช ์์ ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.
๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ํผํ๋ผ
โ๏ธ ๊ทธ๋ฆ๋๋ค๋ ‘์ด๋ค ์ผ์ด ์ฌ๋ฆฌ์ ๋ง์ง ์๋ํ๋ค’๋ผ๋ ๋ป์ด๋ค.
- ํ๋ก๊ทธ๋๋จธ๋ ์ฝ๋์ ๊ทธ๋ฆ๋ ๋จ์๋ฅผ ๋จ๊ฒจ์๋ ์ ๋๋ค.
- ๋๋ฆฌ ์ฐ์ด๋ ์๋ฏธ๊ฐ ์๋ ๋จ์ด๋ฅผ ๋ค๋ฅธ ์๋ฏธ๋ก ์ฌ์ฉํด๋ ์๋๋ค.
EX) hp, aix, sco๋ ๋ณ์ ์ด๋ฆ์ผ๋ก ์ ํฉํ์ง ์๋ค. ์ ๋์ค ํ๋ซํผ์ด๋ ์ ๋์ค ๋ณ์ข ์ ๊ฐ๋ฆฌํค๋ ์ด๋ฆ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ง๊ฐ ์ผ๊ฐํ์ ๋น๋ณ(hypotenuse)์ ๊ตฌํํ ๋๋ hp๊ฐ ํ๋ฅญํ ์ฝ์ด์ฒ๋ผ ๋ณด์ด์ง๋ง ๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด๋ค.
- ์ฌ๋ฌ ๊ณ์ ์ ๋ฌถ์ ๋ ์ค์ List๊ฐ ์๋๋ผ๋ฉด List๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉํด์๋ ์๋๋ค.
- ์๋ก ํก์ฌํ ์ด๋ฆ์ ์ฌ์ฉํ์ง ์๋๋ก ์ฃผ์ํ๋ค.
- ์ ์ฌํ ๊ฐ๋ ์ ์ ์ฌํ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค. → ์ผ๊ด์ฑ์ด ๋จ์ด์ง๋ ํ๊ธฐ๋ฒ์ ๊ทธ๋ฆ๋ ์ ๋ณด์ด๋ค.
๐ฑ ์ด๋ฆ์ผ๋ก ๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋์ฐํ ์๊ฐ ์๋ฌธ์ L์ด๋ ๋๋ฌธ์ O์ด๋ค.
why? ์๋ฌธ์ L์ ์ซ์ 1์ฒ๋ผ ๋ณด์ด๊ณ , ๋๋ฌธ์ O๋ ์ซ์ 0์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฏธ ์๊ฒ ๊ตฌ๋ถํ๋ผ
โ๏ธ ๋ถ์ฉ์ด๋ ‘์๋ฏธ๊ฐ ์๋ ๋จ์ด’๋ฅผ ์๋ฏธํ๋ค.
- ๋ถ์ฉ์ด ์ฌ์ฉ์ ์ง์ํ๋ค.
ProductInfo๋ ProductData๋ ์ด๋ค ์๋ฏธ์ ์ฐจ์ด๊ฐ ์๋๊ฐ. ๊ฐ๋ ์ ๋ฑํ ๊ตฌ๋ถํ์ง ์์ ์ฑ ๋ถ์ฉ์ด์ธ Info, Data๋ฅผ ๋ถ์ธ ๊ฒ์ด๋ค.
getActiveAccount(), getActiveAccounts(), getActiveAccountInfo() ์ค์ ์ด ํ๋ก์ ํธ์ ์ฐธ์ฌํ ํ๋ก๊ทธ๋๋จธ๋ ์ด๋ ํจ์๋ฅผ ํธ์ถํ ์ง ์ด๋ป๊ฒ ์๊น?
โญ ์ฝ๋ ์ฌ๋์ด ์ฐจ์ด๋ฅผ ์๋๋ก ์ด๋ฆ์ ์ง์ด๋ผ
๋ฐ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ผ
class DtaRcrd102{
private Date genymdhms;
private Date modymdhms;
private final String qszqint = "102";
};
class Customer{
private Date generationTimestamp;
private Date modificationTimestamp;
private final String recordId = "102";
};
๋ ์ค ๋น๊ตํด๋ณด์. ๋ฌด์์ด ๋ ์ข์ ์ฝ๋์ด๊ฒ ๋๊ฐ?
์ฒซ ๋ฒ์งธ๋ ์ถฉ๋ถํ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์๋ค.
์ค์ ๋ก ์ด๋ ํ์ฌ๋ genymdhms(generate date, year, month, day, hour, minute, second)๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ค. ์ด ๋จ์ด๋ฅผ ๋งํ๊ธฐ ์ฝ๊ฒ “์ ์์ด ์ ๋ ์์ด์ทจ ์ ์์ค”๋ผ๊ณ ๋ฐ์ํ๊ฑฐ๋ “์ ์ผ ๋ฌด๋ค ํ์ฆ”๋ผ๊ณ ๋ฐ์ํ ์๋ ์๋ค.
ํ์ง๋ง ์ด ๋จ์ด๋ ์๋ก์ด ์ง์์ด ์จ๋ค๋ฉด ์ผ์ผ์ด ์ค๋ช ์ ํด์ฃผ์ด์ผ ํ๋ค.
๋ฐ๋ผ์, ์ง์ ์ธ ๋ํ๊ฐ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด ๋ ๋ฒ์งธ์ฒ๋ผ generationTimestamp ๊ฐ์ ๋จ์ด๋ฅผ ์ฌ์ฉํ์.
๊ฒ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ผ
๋ฌธ์ ํ๋๋ฅผ ์ฌ์ฉํ๋ ์ด๋ฆ๊ณผ ์์๋ ํ ์คํธ ์ฝ๋์์ ์ฝ๊ฒ ๋์ ๋์ง ์๋๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
๐ฑ e๋ผ๋ ๋ฌธ์๋ ๋ณ์ ์ด๋ฆ์ผ๋ก ์ ์ ํ์ง ์๋ค. ์์ด์์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ฌธ์์ด๋ค.
๋ฐ๋ผ์ ๊ฒ์์ด ์ด๋ ต๋ค. ์ด๋ฐ ๊ด์ ์์๋ ๊ธด ์ด๋ฆ์ด ์งง์ ์ด๋ฆ๋ณด๋ค ์ข๋ค.
์ฆ, ๊ฒ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ด ์์๋ณด๋ค ์ข๋ค.
for (int j = 0; j <34; j++){
s += (t[j]*4)/5;
}
int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEKS = 5;
int sum = 0;
for (int j = 0; j <NUMBER_OF_TASKS; j++){
int realTaskDays = taskEsimate[j] + realDaysPerIdealDay;
int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEKS);
sum += realTaskWeeks;
}
์ ๋ ์ฝ๋๋ฅผ ๋น๊ตํด๋ณด์. s๋์ ์ฌ์ฉํ sum์ ์ ์ฉํ ๊ธฐ๋ฅ์ ์๋์ง๋ง ์ต์ํ ๊ฒ์์ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง, WORK_DAYS_PER_WEEK๋ฅผ ์ฐพ๊ธฐ๋ ์ผ๋ง๋ ์ฌ์ด๊ฐ
โญ ๋ณ์๋ ์์๋ฅผ ์ฝ๋ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ๋ค๋ฉด ๊ฒ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ธ์ฝ๋ฉ์ ํผํด๋ผ
โ๏ธ ์ธ์ฝ๋ฉ์ ๋ฌธ์๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ์ด์ง๋ฒ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋งํ๋ค.
(์ฌ๊ธฐ์๋ ๋ญ๊ฐ.. ๋ฌธ์์ ์ด๋ค ํ์ ์ธ์ง ์ด๋ค ์ ํ์ธ์ง ์ํธํํ๋ ๋๋์ธ ๋ฏํ๋ค.)
์ด๋ฆ์๋ ์ธ์ฝ๋ฉํ ์ ๋ณด๊ฐ ์์ฃผ ๋ง์๋ฐ ์ ํ์ด๋ ๋ฒ์ ์ ๋ณด๊น์ง ์ธ์ฝ๋ฉํ๋ฉด ๊ทธ๋งํผ ์ด๋ฆ์ ํด๋ ํ๊ธฐ ์ด๋ ค์์ง๋ค.
๋ํ, ์ธ์ฝ๋ฉ ์ธ์ด๊น์ง ์ตํ๋ผ๋ ์๊ตฌ๋ ๋งค์ฐ ๋นํฉ๋ฆฌ์ ์ด๋ค.
ํ๊ฐ๋ฆฌ์ ํ๊ธฐ๋ฒ
→ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ณ์ ๋ฐ ํจ์์ ์ธ์ ์ด๋ฆ ์์ ๋ฐ์ดํฐ ํ์ ์ ๋ช ์ํ๋ ์ฝ๋ฉ ๊ท์น์ด๋ค.
- ํฌํธ๋์ ์ฒซ ๊ธ์๋ก ์ ํ์ ํํํ๋ค.
- ์ด์ฐฝ๊ธฐ ๋ฒ ์ด์์ ๊ธ์ ํ๋์ ์ซ์ ํ๋๋ง ํ์ฉํ๋ค.
๊ณผ๊ฑฐ์๋ ํ๊ฐ๋ฆฌ์ ํ๊ธฐ๋ฒ์ ๊ต์ฅํ ์ค์ํ๊ฒ ์๊ฐํ๋ค.
๐ why? ๊ณผ๊ฑฐ์๋ ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ ์ ๊ฒํ์ง ์์์ผ๋ฏ๋ก ํ๋ก๊ทธ๋๋จธ์๊ฒ ํ์ ์ ๊ธฐ์ตํ ๋จ์๊ฐ ํ์ํ๋ค.
๐ฑ ํ์ง๋ง ์์ฆ ๋์ค๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํจ์ฌ ๋ง์ ํ์ ์ ์ง์ํ ๋ฟ๋๋ฌ ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ ๊ธฐ์ตํ๊ณ ๊ฐ์ ํ๋ค.
๋ฐ๋ผ์, ํ๋ก๊ทธ๋๋จธ๋ ๋ณ์ ์ด๋ฆ์ ํ์ ์ ์ธ์ฝ๋ฉํ ํ์๊ฐ ์์ด์ก๋ค.
๋ฉค๋ฒ ๋ณ์ ์ ๋์ด
์ด์ ๋ ๋ฉค๋ฒ ๋ณ์์ m_์ด๋ผ๋ ์ ๋์ด๋ฅผ ๋ถ์ผ ํ์๊ฐ ์๋ค.
- ํด๋์ค์ ํจ์๋ ์ ๋์ด๊ฐ ํ์ ์์ ์ ๋๋ก ์์์ผ ํ๋ค.
- ๋ฉค๋ฒ ๋ณ์๋ฅผ ๋ค๋ฅธ ์์์ผ๋ก ํ์ํ๊ฑฐ๋ ๋์ ๋๊ฒ ๋ณด์ฌ์ฃผ๋ IDE๋ฅผ ์ฌ์ฉํด์ผ ๋ง๋ ํ๋ค.
์ธํฐํ์ด์ค ํด๋์ค์ ๊ตฌํ ํด๋์ค
๋๋ก๋ ์ธ์ฝ๋ฉ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋ํ์ ์์ฑํ๋ ABSTRACT FACTORY๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ์ธํฐํ์ด์ค ํด๋์ค์ ๊ตฌ์ฒด ํด๋์ค๊ฐ ํ์ํ๋ค.
→ ๋ ํด๋์ค ์ด๋ฆ์ ์ด๋ป๊ฒ ์ง๋ ๊ฒ ์ข์๊น?
๐ฑ ์ธํฐํ์ด์ค ํด๋์ค์ ์ ๋์ด I๋ฅผ ๋ถ์ด๋ ๊ฒ์ ์ฃผ์๋ฅผ ํฉํธ๋ฆฌ๊ณ ๊ณผ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
์ธํฐํ์ด์ค ํด๋์ค ์ด๋ฆ๊ณผ ๊ตฌํ ํด๋์ค ์ด๋ฆ ์ค ํ๋๋ฅผ ์ธ์ฝ๋ฉํด์ผ ํ๋ค๋ฉด ๊ตฌํ ํด๋์ค ์ด๋ฆ์ ์ธ์ฝ๋ฉํ๋ค.
how? ShapeFactoryImp ๋๋ CShapeFactory๊ฐ IShapeFactory๋ณด๋ค ์ข๋ค.
์์ ์ ๊ธฐ์ต๋ ฅ์ ์๋ํ์ง ๋ง๋ผ
๋ ์๊ฐ ์ฝ๋๋ฅผ ์ฝ์ผ๋ฉด์ ๋ณ์ ์ด๋ฆ์ ๋ณธ์ธ์ด ์๋ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๋ง์์ด ๋ ๋ค๋ฉด ๊ทธ ๋ณ์ ์ด๋ฆ์ ๋ฐ๋์งํ์ง ๋ชปํ๋ค.
๐ฑ ๋ฌธ์ ํ๋๋ง ์ฌ์ฉํ๋ ๋ณ์ ์ด๋ฆ์ ๋ฌธ์ ๊ฐ ์๋ค. (but, ๋ฃจํ์์ ๋ฐ๋ณต ํ์๋ฅผ ์ธ๋ ๋ณ์ i, k, j๋ ๊ด์ฐฎ๋ค.)
โญ ๋ณ์ r์ด ๋ฌด์์ธ์ง ๊ธฐ์ตํ๋ ํ๋ก๊ทธ๋๋จธ๋ ์์ฃผ ๋๋ํ๋ค.
ํ์ง๋ง ์ ๋ฌธ๊ฐ ํ๋ก๊ทธ๋๋จธ๋ ๋จ๋ค์ด ์ดํดํ๋ ์ฝ๋๋ฅผ ๋ด๋๋๋ค.
ํด๋์ค ์ด๋ฆ
โญ ํด๋์ค ์ด๋ฆ๊ณผ ๊ฐ์ฒด ์ด๋ฆ์ ๋ช ์ฌ๋ ๋ช ์ฌ๊ตฌ๊ฐ ์ ํฉํ๋ค.
ex) Customer, WiKiPage, Account, AddressParser
๋ฉ์๋ ์ด๋ฆ
โญ๋ฉ์๋ ์ด๋ฆ์ ๋์ฌ๋ ๋์ฌ๊ตฌ๊ฐ ์ ํฉํ๋ค.
ex) postPayment , deletePage , save
Stirng name = employee.getName();
customer.setName("mike");
if (paycheck.isPost()) ...
์ ๊ทผ์ → get
๋ณ๊ฒฝ์ → set
์กฐ๊ฑด์ → is
๐ฑ ์์ฑ์๋ฅผ ์ค๋ณต ์ ์ํ ๋๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
Complex fulcrumPoint = Complex.FromRealNumber(23.0); -> good
Complex fulcrumPoint = new Complex(23.0);
// ์์ฑ์ ์ฌ์ฉ์ ์ ํํ๋ ค๋ฉด private๋ก ์ ์ธํ๊ธฐ!
๊ธฐ๋ฐํ ์ด๋ฆ์ ํผํ๋ผ
โญ ์ฌ๋ฏธ๋ ์ด๋ฆ๋ณด๋ค ๋ช ๋ฃํ ์ด๋ฆ์ ์ ํํ๋ผ
ํ ๊ฐ๋ ์ ํ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ผ
๋๊ฐ์ ๋ฉ์๋๋ฅผ ํด๋์ค๋ง๋ค ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ๋ถ๋ฅด๋ฉด ํผ๋์ค๋ฝ๋ค.
๊ฐ๊ฐ์ ์ด๋ฆ์ ๊ธฐ์ตํ์ง ๋ชปํ๋ฉด ๊ณผ๊ฑฐ์ ์ฝ๋ ์์ ๋ ํค๋๋ฅผ ์ดํผ๋๋ฐ ์๊ฐ์ด ๋ง์ด ๋ค๊ฒ ๋๋ค.
์ดํด๋ฆฝ์ค๋ ์ธํ ๋ฆฌ์ ์ด ๋ฑ ์ต์ IDE๋ ๋ฌธ๋งฅ์ ๋ง๋ ๋จ์๋ฅผ ์ ๊ณตํด์ค๋ค.
ํ์ง๋ง ์ด๋ ์ ๋๋ง ํํธ๋ฅผ ์ค ๋ฟ ์ฃผ์์ ๋ณด์ฌ์ฃผ์ง ์๋๋ค.
DeviceManager์ ProtocolController๋ ๊ทผ๋ณธ์ ์ผ๋ก ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ. ๋ ๋ค controller? ๋ ๋ค Manager? ์ด๋ฆ์ด ๋ค๋ฅด๋ฉด ๋น์ฐํ ํ์ ๊ณผ ์ญํ ์ด ๋ค๋ฅด๋ค๊ณ ์๊ฐํ๋ค.
โญ์ฃผ์์ ๋ค์ ธ๋ณด์ง ์๊ณ ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฉ์๋๋ฅผ ์ ํํ๊ธฐ ์ํด์๋ ๋ฉ์๋ ์ด๋ฆ์ด ๋ ์์ ์ด๊ณ ์ผ๊ด์ ์ด์ด์ผ ํ๋ค.
๋ง์ฅ๋์ ํ์ง ๋ง๋ผ
ํ๋ก๊ทธ๋๋จธ๊ฐ ์ผ๊ด์ฑ์ ์ํด add๋ผ๋ ๋ฉ์๋๋ฅผ ํต์ผํด์ ์ฌ์ฉํ๋ค๊ณ ์น์.
๊ธฐ์กด์ add๋ ๋ ๊ฐ์ ๊ฐ์ ๋ํด ์๋ก์ด ๊ฐ์ ๋์ถํด๋ด๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
ํ์ง๋ง ์ค๊ฐ์ ๊ฐ์๊ธฐ ์๋ก์ด ๊ฐ์ด ๋ํด์ง๋ค๋ฉด ์ด ๋ฉ์๋๋ฅผ add๋ผ๊ณ ๋ถ๋ฅผ ์ ์์๊น?
NO! ์ด๊ฒ์ ์ผ๊ด์ฑ์ด ์๋ ๊ฒ์ด ์๋๋ผ ๋ง์ฅ๋์ด๋ค.
๐ ์ด๋ด ๊ฒฝ์ฐ์๋ insert๋ append๋ผ๊ณ ๋ถ๋ฌ์ผ ํ๋ค.
โญ ๋ค๋ฅธ ๊ฐ๋ ์ ๊ฐ์ ๋จ์ด๋ฅผ ์ฌ์ฉํ์ง ๋ง์๋ผ. ๋ํ ํ ๋จ์ด๋ฅผ ๋ ๊ฐ์ง ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ง์๋ผ.
ํด๋ฒ ์์ญ์์ ๊ฐ์ ธ์จ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ
์ฝ๋๋ฅผ ์ง๋ ์ฌ๋๋ ์ฝ๋ ์ฌ๋๋ ํ๋ก๊ทธ๋๋จธ์ด๋ค.
๋ฐ๋ผ์ ์ ์ฐ ์ฉ์ด, ์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ, ํจํด ์ด๋ฆ ๋ฑ๋ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
ํ์ง๋ง ๋ชจ๋ ์ด๋ฆ์ ๋ฌธ์ ์์ญ์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ํ๋ช ํ์ง ๋ชปํ๋ค.
โญ ๋ฐ๋ผ์, ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ต์ํ ๊ธฐ์ ๊ฐ๋ ์ ์ฌ์ฉํ์.
๋ฌธ์ ์์ญ์์ ๊ฐ์ ธ์จ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ
์ ์ ํ ํ๋ก๊ทธ๋๋จธ ์ฉ์ด ๊ฐ ์๋ค๋ฉด ๋ฌธ์ ์์ญ์์ ์ด๋ฆ์ ๊ฐ์ ธ์จ๋ค.
์ฐ์ํ ํ๋ก๊ทธ๋๋จธ์ ์ค๊ณ์๋ผ๋ฉด ํด๋ฒ ์์ญ๊ณผ ๋ฌธ์ ์์ญ์ ๊ตฌ๋ถํ ์ค ์์์ผ ํ๋ค. ๋ฌธ์ ์์ญ๊ณผ ๊ด๋ จ๋ ์ฝ๋๋ผ๋ฉด ๋ฌธ์ ์์ญ์์ ์ด๋ฆ์ ๊ฐ์ ธ์จ๋ค.
์๋ฏธ ์๋ ๋งฅ๋ฝ์ ์ถ๊ฐํ๋ผ
firstName, lastName, street, houseNumber๋ฅผ ์ญ ํ์ด๋ณด๋ฉด ์ฃผ์ ๋ณ์๋ฅผ ์๋ฏธํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ํ์ง๋ง firstName๋ง ์ฌ์ฉํ๋ค๋ฉด ๋ฌด์จ ์๋ฏธ์ธ์ง ์ ์ ์์๊น?
์ด๋ด ๋๋ addr๋ผ๋ ์ ๋์ด๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฌด์จ ์๋ฏธ์ธ์ง ์ ์ ์๋ค.
์ด๋ ๊ฒ ๋งฅ๋ฝ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข๋ค.
private void printGuessStatistics(char candidate, int count){
String number;
String verb;
String pluralModifier;
if (count == 0){
number = "no";
verb = "are";
pluralModifier = "s";
} else if (count == 1){
number = "1";
verb = "is";
pluralModifier = "";
} else{
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
String guessMessage = String.format("There %s %s %s%s", verb, number, candidate, pluralModifier);
print(guessMessage);
}
์ด ์ฝ๋์์ ํจ์๋ ๋งฅ๋ฝ ์ผ๋ถ๋ง์ ์ ๊ณตํ๋ฉฐ ์๊ณ ๋ฆฌ์ฆ์ด ๋๋จธ์ง ๋งฅ๋ฝ์ ์ ๊ณตํ๋ค. ๋ค ์ฝ๊ณ ๋์์ผ number, verb, pluralModifier๋ผ๋ ๋ณ์๊ฐ ํต๊ณ ์ถ์ธก์ ์ฌ์ฉ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๋ ์๊ฐ ๋งฅ๋ฝ์ ์ ์ถํด์ผ ํ๋ค๋ ๋ป์ด๋ค.
๋งฅ๋ฝ์ด ๋ถ๋ช ํด์ง๊ฒ ๋ง๋ค์ด๋ณด์.
GuessStaticsMessage๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ๋ณ์๋ฅผ ํด๋์ค์ ๋ฃ์ด์ ๋งฅ๋ฝ์ ๋ถ๋ช ํ๊ฒ ๋ง๋ ๋ค.
public class GuessStaticsMessage{
private String number;
private String verb;
private String pluralModifier;
public String make(char candidate, int count){
createPluralDependentMessage(count);
return String.format("There %s %s %s%s", verb, number, candidate, pluralModifier);
}
private void createPluralDependentMessageParts(int count){
if (count == 0){
threrAreNoLetters();
}else if (count == 1){
thereIsOneLetter();
}else{
thereAreManyLetters();
}
}
private void thereAreManyLetters(int count){
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
private void thereIsOneLetter(){
number = "1";
verb = "is";
pluralModifier = "";
}
private void thereNoLetters(){
number = "no";
verb = "are";
pluralModifier = "s";
}
}
โญ ๋๋ค์์ ์ด๋ฆ์ ์ค์ค๋ก ์๋ฏธ๊ฐ ๋ถ๋ช ํ์ง ์๋ค. ๋ฐ๋ผ์ ํด๋์ค, ํจ์, ์ด๋ฆ ๊ณต๊ฐ์ ๋ฃ์ด ๋งฅ๋ฝ์ ๋ถ์ฌํ๋ค. ๋ชจ๋ ๋ฐฉ๋ฒ์ด ์คํจํ๋ฉด ๋ง์ง๋ง ์๋จ์ผ๋ก ์ ๋์ด๋ฅผ ๋ถ์ธ๋ค.
๋ถํ์ํ ๋งฅ๋ฝ์ ์์ ๋ผ
accountAddress์ customerAddress๋ Address ํด๋์ค ์ธ์คํด์ค๋ก๋ ์ข์ ์ด๋ฆ์ด์ง๋ง ํด๋์ค ์ธ์คํด์ค๋ก๋ ์ ํฉํ์ง ๋ชปํ๋ค.
Address๋ ํด๋์ค ์ด๋ฆ์ผ๋ก ์ ํฉํ๋ค.
๋ง์ฝ ํฌํธ ์ฃผ์, MAC ์ฃผ์, ์น ์ฃผ์๋ฅผ ๊ตฌ๋ถํด์ผ ํ๋ค๋ฉด PostalAddress, MAC, URI๋ผ๋ ์ด๋ฆ์ด ์ ํฉํ ๊ฒ์ด๋ค.
โญ ์ผ๋ฐ์ ์ผ๋ก๋ ์งง์ ์ด๋ฆ์ด ๊ธด ์ด๋ฆ๋ณด๋ค ์ข๋ค. ๋จ, ์๋ฏธ๊ฐ ๋ถ๋ช ํ ๊ฒฝ์ฐ์ ํํด์๋ค. ์ด๋ฆ์ ๋ถํ์ํ ๋งฅ๋ฝ์ ์ถ๊ฐํ์ง ์๋๋ก ์ฃผ์ํ๋ค.
'Books' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ค๋ธ์ ํธ] ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2024.06.17 |
---|---|
[์ค๋ธ์ ํธ] ๊ฐ์ฒด ์ค๊ณ์ ๋ํด์ (0) | 2024.05.17 |
[Clean Code (ํด๋ฆฐ์ฝ๋)] ch.1 ๊นจ๋ํ ์ฝ๋ (2) | 2022.11.30 |
์ ๋ฐํ๋ผ๋ฆฌ - ์ฌํผ์์ค (0) | 2021.08.11 |