๐ญ Chapter 2: ์๋ฏธ์๋ ์ด๋ฆ
๐ ์๋๋ฅผ ๋ถ๋ช ํ ๋ฐํ๋ผโ
์ข์ ์ด๋ฆ์ ์ง์ผ๋ ค๋ฉด ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง๋ง ์ข์ ์ด๋ฆ์ผ๋ก ์ ์ฝํ๋ ์๊ฐ์ด ํจ์ฌ ๋ ๋ง๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด๋ฆ์ ์ฃผ์ ๊น๊ฒ ์ดํด ๋ ๋์ ์ด๋ฆ์ด ๋ ์ค๋ฅด๋ฉด ๊ฐ์ ํ๊ธฐ ๋ฐ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ด ์ข ๋ ํ๋ณตํด์ง๋ฆฌ๋ผ.
๋ณ์๋ ํจ์ ๊ทธ๋ฆฌ๊ณ ํด๋์ค ์ด๋ฆ์ ๋ค์๊ณผ ๊ฐ์ ๊ตต์งํ ์ง๋ฌธ์ ๋ชจ๋ ๋ตํด์ผ ํ๋ค. ๋ณ์(ํน์ ํจ์๋ ํด๋์ค)์ ์กด์ฌ ์ด์ ๋? ์ํ ๊ธฐ๋ฅ์? ์ฌ์ฉ ๋ฐฉ๋ฒ์? ๋ฐ๋ก ์ฃผ์์ด ํ์ํ๋ค๋ฉด ์๋๋ฅผ ๋ถ๋ช ํ ๋๋ฌ๋ด์ง ๋ชปํ๋ค๋ ๋ง์ด๋ค.
int d; // ๊ฒฝ๊ณผ ์๊ฐ(๋จ์: ๋ ์ง)
์ด๋ฆ d
๋ ์๋ฌด ์๋ฏธ๋ ๋๋ฌ๋์ง ์๋๋ค. ๊ฒฝ๊ณผ ์๊ฐ์ด๋ ๋ ์ง๋ผ๋ ๋๋์ด ์ ๋ ๋ค. ์ธก์ ํ๋ ค๋ ๊ฐ๊ณผ ๋จ์๋ฅผ ํํํ๋ ์ด๋ฆ์ด ํ์ํ๋ค.
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
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;
}
์ฝ๋๊ฐ ํ๋ ์ผ์ ์ง์ํ๊ธฐ ์ด๋ ต๋ค. ๋ฌธ์ ๋ ์ฝ๋์ ๋จ์์ฑ์ด ์๋๋ผ ์ฝ๋์ ํจ์ถ์ฑ์ด๋ค. ๋ค์ ๋งํด, ์ฝ๋ ๋งฅ๋ฝ์ด ์ฝ๋ ์์ฒด์ ๋ช ์์ ์ผ๋ก ๋๋ฌ๋์ง ์๋๋ค. ์ ์ฝ๋๋ ์์๋ฆฌ์ ๋ ์์ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
theList
์ ๋ฌด์์ด ๋ค์๋๊ฐ?theList
์์ 0๋ฒ์งธ ๊ฐ์ด ์ด์งธ์ ์ค์ํ๊ฐ?- ๊ฐ 4๋ ๋ฌด์จ ์๋ฏธ์ธ๊ฐ?
- ํจ์๊ฐ ๋ฐํํ๋ ๋ฆฌ์คํธ
list1
์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๊ฐ?
์ ์ฝ๋ ์ํ์ ์ด์ ๊ฐ์ ์ ๋ณด๊ฐ ๋๋ฌ๋์ง ์๋๋ค. ํ์ง๋ง ์ ๋ณด ์ ๊ณต์ ์ถฉ๋ถํ ๊ฐ๋ฅํ์๋ค. ์ง๋ขฐ์ฐพ๊ธฐ ๊ฒ์์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ์. ๊ทธ๋ฌ๋ฉด theList
๊ฐ ๊ฒ์ํ์ด๋ผ๋ ์ฌ์ค์ ์๋ค. theList
๋ฅผ gameBoard
๋ก ๋ฐ๊ฟ๋ณด์.
๊ฒ์ํ์์ ๊ฐ ์นธ์ ๋จ์ ๋ฐฐ์ด๋ก ํํํ๋ค. ๋ฐฐ์ด์์ 0๋ฒ์งธ ๊ฐ์ ์นธ ์ํ๋ฅผ ๋ปํ๋ค. ๊ฐ 4๋ ๊น๋ฐ์ด ๊ฝํ ์ํ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๊ฐ ๊ฐ๋ ์ ์ด๋ฆ๋ง ๋ถ์ฌ๋ ์ฝ๋๊ฐ ์๋นํ ๋์์ง๋ค.
public List<int[]> getFlaggedCells() {
List<int[]> flaggedCells = new ArrayList<int[]>();
for (int[] cell : gameBoard)
if (cell[STATUS_VALUE] == FLAGGED)
flaggedCells.add(cell);
return flaggedCells;
}
์์์ ๋ณด๋ฏ, ์ฝ๋์ ๋จ์์ฑ์ ๋ณํ์ง ์์๋ค. ์ฐ์ฐ์ ์์ ์์ ์๋ ์์ ์์ ๋๊ฐ์ผ๋ฉฐ, ๋ค์ฌ์ฐ๊ธฐ ๋จ๊ณ๋ ๋์ผํ๋ค. ๊ทธ๋ฐ๋ฐ๋ ์ฝ๋๋ ๋์ฑ ๋ช ํํด์ก๋ค.
ํ ๊ฑธ์ ๋ ๋์๊ฐ, int
๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๋์ , ์นธ์ ๊ฐ๋จํ ํด๋์ค๋ก ๋ง๋ค์ด๋ ๋๊ฒ ๋ค. isFlagged
๋ผ๋ ์ข ๋ ๋ช
์์ ์ธ ํจ์๋ฅผ ์ฌ์ฉํด FLAGGED
๋ผ๋ ์์๋ฅผ ๊ฐ์ถฐ๋ ์ข๊ฒ ๋ค.
public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cell : gameBoard)
if (cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}
๋จ์ํ ์ด๋ฆ๋ง ๊ณ ์ณค๋๋ฐ๋ ํจ์๊ฐ ํ๋ ์ผ์ ์ดํดํ๊ธฐ ์ฌ์์ก๋ค. ๋ฐ๋ก ์ด๊ฒ์ด ์ข์ ์ด๋ฆ์ด ์ฃผ๋ ์๋ ฅ์ด๋ค.
๐ ๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ํผํ๋ผโ
ํ๋ก๊ทธ๋๋จธ๋ ์ฝ๋์ ๊ทธ๋ฆ๋ ๋จ์๋ฅผ ๋จ๊ฒจ์๋ ์ ๋๋ค. ๊ทธ๋ฆ๋ ๋จ์๋ ์ฝ๋ ์๋ฏธ๋ฅผ ํ๋ฆฐ๋ค. ๋๋ฆ๋๋ก ๋๋ฆฌ ์ฐ์ด๋ ์๋ฏธ๊ฐ ์๋ ๋จ์ด๋ฅผ ๋ค๋ฅธ ์๋ฏธ๋ก ์ฌ์ฉํด๋ ์ ๋๋ค. ์๋ฅผ ๋ค์ด, hp
, aix
, sco
๋ ๋ณ์ ์ด๋ฆ์ผ๋ก ์ ํฉํ์ง ์๋ค. ์ ๋์ค ํ๋ซํผ์ด๋ ์ ๋์ค ๋ณ์ข
์ ๊ฐ๋ฆฌํค๋ ์ด๋ฆ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๋ฌ ๊ณ์ ์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ ๋, ์ค์ List
๊ฐ ์๋๋ผ๋ฉด, accountList
๋ผ ๋ช
๋ช
ํ์ง ์๋๋ค. ํ๋ก๊ทธ๋๋จธ์๊ฒ List
๋ผ๋ ๋จ์ด๋ ํน์ํ ์๋ฏธ๋ค. ๊ทธ๋ฌ๋ฏ๋ก accountGroup
, bunchOfAccounts
, ์๋๋ฉด ๋จ์ํ Accounts
๋ผ ๋ช
๋ช
ํ๋ค.
์๋ก ํก์ฌํ ์ด๋ฆ์ ์ฌ์ฉํ์ง ์๋๋ก ์ฃผ์ํ๋ค. ํ ๋ชจ๋์์ XYZControllerForEfficientHandlingOfStrings
๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉํ๊ณ , ์กฐ๊ธ ๋จ์ด์ง ๋ชจ๋์์ XYZControllerForEfficientStorageOfStrings
๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ค๋ฉด? ์ฐจ์ด๋ฅผ ์์์ฑ๋๊ฐ? ๋ ๋จ์ด๋ ๊ฒ๋๊ฒ ๋น์ทํ๋ค.
์ ์ฌํ ๊ฐ๋
์ ์ ์ฌํ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค. ์ด๊ฒ๋ ์ ๋ณด๋ค. ์ผ๊ด์ฑ์ด ๋จ์ด์ง๋ ํ๊ธฐ๋ฒ์ ๊ทธ๋ฆ๋ ์ ๋ณด๋ค. ์ด๋ฆ์ผ๋ก ๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์ง์ง ๋์ฐํ ์๊ฐ ์๋ฌธ์ L
์ด๋ ๋๋ฌธ์ O
๋ณ์๋ค. ๋ ๋ณ์๋ฅผ ํ๊บผ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋์ฑ ๋์ฐํด์ง๋ค. ์๋ฌธ์ L
์ ์ซ์ 1์ฒ๋ผ ๋ณด์ด๊ณ ๋๋ฌธ์ O
๋ ์ซ์ 0์ฒ๋ผ ๋ณด์ธ๋ค.
๐ ์๋ฏธ ์๊ฒ ๊ตฌ๋ถํ๋ผโ
์ปดํ์ผ๋ฌ๋ ์ธํฐํ๋ฆฌํฐ๋ง ํต๊ณผํ๋ ค๋ ์๊ฐ์ผ๋ก ์ฝ๋๋ฅผ ๊ตฌํํ๋ ํ๋ก๊ทธ๋๋จธ๋ ์ค์ค๋ก ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค. ์๋ฅผ ๋ค์ด, ๋์ผํ ๋ฒ์ ์์์๋ ๋ค๋ฅธ ๋ ๊ฐ๋ ์ ๊ฐ์ ์ด๋ฆ์ ์ฌ์ฉํ์ง ๋ชปํ๋ค. ์ด๋ฆ์ด ๋ฌ๋ผ์ผ ํ๋ค๋ฉด ์๋ฏธ๋ ๋ฌ๋ผ์ ธ์ผ ํ๋ค.
์ฐ์์ ์ธ ์ซ์๋ฅผ ๋ง๋ถ์ธ ์ด๋ฆ(a1, a2, ..., aN)์ ์๋์ ์ธ ์ด๋ฆ๊ณผ ์ ๋ฐ๋๋ค. ์ด๋ฐ ์ด๋ฆ์ ๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์ด๋ฆ๋ ์๋๋ฉฐ, ์๋ฌด๋ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ๋ชปํ๋ ์ด๋ฆ์ผ ๋ฟ์ด๋ค. ์ ์ ์๋๊ฐ ์ ํ ๋๋ฌ๋์ง ์๋๋ค.
public static void copyChars(char a1[], char a2[]) {
for (int i = 0; i < a1.length; i++) {
a2[i] = a1[i];
}
}
ํจ์ ์ธ์ ์ด๋ฆ์ผ๋ก source
์ destination
์ ์ฌ์ฉํ๋ค๋ฉด ์ฝ๋ ์ฝ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ฌ์์ง๋ค.
๋ถ์ฉ์ด๋ฅผ ์ถ๊ฐํ ์ด๋ฆ ์ญ์ ์๋ฌด๋ฐ ์ ๋ณด๋ ์ ๊ณตํ์ง ๋ชปํ๋ค. Product
๋ผ๋ ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์. ๋ค๋ฅธ ํด๋์ค๋ฅผ ProductInfo
ํน์ ProductData
๋ผ ๋ถ๋ฅธ๋ค๋ฉด ๊ฐ๋
์ ๊ตฌ๋ถํ์ง ์์ ์ฑ ์ด๋ฆ๋ง ๋ฌ๋ฆฌํ ๊ฒฝ์ฐ๋ค. Info
๋ Data
๋ a
, an
, the
์ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฏธ๊ฐ ๋ถ๋ถ๋ช
ํ ๋ถ์ฉ์ด๋ค.
a
๋ the
์ ๊ฐ์ ์ ๋์ด๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ๋ ์๋ฆฌ๊ฐ ์๋๋ค. ์๋ฏธ๊ฐ ๋ถ๋ช
ํ ๋ค๋ฅด๋ค๋ฉด ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ๋ค.
๋ถ์ฉ์ด๋ ์ค๋ณต์ด๋ค. ๋ณ์ ์ด๋ฆ์ variable
์ด๋ผ๋ ๋จ์ด๋ ๋จ์ฐ์ฝ ๊ธ๋ฌผ์ด๋ค. ํ์ด๋ฆ์ table
์ด๋ผ๋ ๋จ์ด๋ ๋ง์ฐฌ๊ฐ์ง๋ค. NameString
์ด Name
๋ณด๋ค ๋ญ๊ฐ ๋์๊ฐ? Name
์ด ๋ถ๋์์๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋๊ฐ? ๊ทธ๋ ๋ค๋ฉด ์์ ์ธ๊ธํ "๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ํผํ๋ผ" ๊ท์น์ ์๋ฐํ๋ค.
๊ฐ๋ฐ์๋ฅผ ๋ณดํธํ๊ณ ์ ์ด๋ฆ์ ๋ฐ๊ฟจ์ผ๋ ์ค๋ฅ ํํ๋ ์ ํํ ๋ค์๊ณผ ๊ฐ๋ค.
getActiveAccount();
getActiveAccounts();
getActiveAccountInfo();
์ด ํ๋ก์ ํธ์ ์ฐธ์ฌํ ํ๋ก๊ทธ๋๋จธ๋ ์ด๋ ํจ์๋ฅผ ํธ์ถํ ์ง ์ด๋ป๊ฒ ์๊น?
๋ช
ํํ ๊ด๋ก๊ฐ ์๋ค๋ฉด ๋ณ์ moneyAmount
๋ money
์ ๊ตฌ๋ถ์ด ์ ๋๋ค. customerInfo
๋ customer
์, accountData
๋ account
์, theMessage
๋ message
์ ๊ตฌ๋ถ์ด ์ ๋๋ค. ์ฝ๋ ์ฌ๋์ด ์ฐจ์ด๋ฅผ ์๋๋ก ์ด๋ฆ์ ์ง์ด๋ผ.
๐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ผโ
๋ฐ์ํ๊ธฐ ์ด๋ ค์ด ์ด๋ฆ์ ํ ๋ก ํ๊ธฐ๋ ์ด๋ ต๋ค. ๋ฐ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ค์ํ๋ค. ํ๋ก๊ทธ๋๋ฐ์ ์ฌํ ํ๋์ด๊ธฐ ๋๋ฌธ์ด๋ค.
class DtaRcrd102 {
private Date genymdhms;
private Date modymdhms;
private final String pszqint = "102";
/* ... */
}
class Customer {
private Date generationTimestamp;
private Date modificationTimestamp;
private final String recordId = "102";
/* ... */
}
๋์งธ ์ฝ๋๋ ์ง์ ์ธ ๋ํ๊ฐ ๊ฐ๋ฅํด์ง๋ค. "๋ง์ดํค, ์ด ๋ ์ฝ๋ ์ข ๋ณด์ธ์. 'Generation Timestamp'๊ฐ์ด ๋ด์ผ ๋ ์ง์ ๋๋ค! ์ด๋ป๊ฒ ์ด๋ ์ฃ ?"
๐ ๊ฒ์ํ๊ธฐ ์ฌ์ด ์๋ฆ์ ์ฌ์ฉํ๋ผโ
๋ฌธ์ ํ๋๋ฅผ ์ฌ์ฉํ๋ ์ด๋ฆ๊ณผ ์์๋ ํ ์คํธ ์ฝ๋์์ ์ฝ๊ฒ ๋์ ๋์ง ์๋๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
MAX_CLASSES_PER_STUDENT
๋ grep
์ผ๋ก ์ฐพ๊ธฐ๊ฐ ์ฝ์ง๋ง, ์ซ์ 7์ ์๊ทผํ ๊น๋ค๋กญ๋ค. 7์ด ๋ค์ด๊ฐ๋ ํ์ผ ์ด๋ฆ์ด๋ ์์์ด ๋ชจ๋ ๊ฒ์๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฐ ๊ด์ ์์ ๊ธด ์ด๋ฆ์ด ์งง์ ์ด๋ฆ๋ณด๋ค ์ข๋ค. ๊ฒ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ด ์์๋ณด๋ค ์ข๋ค.
๊ฐ์ธ์ ์ผ๋ก๋ ๊ฐ๋จํ ๋ฉ์๋์์ ๋ก์ปฌ ๋ณ์๋ง ํ ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ฆ ๊ธธ์ด๋ ๋ฒ์ ํฌ๊ธฐ์ ๋น๋กํด์ผ ํ๋ค. ๋ณ์๋ ์์๋ฅผ ์ฝ๋ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ๋ค๋ฉด ๊ฒ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ด ๋ฐ๋์งํ๋ค.
// 1
for (int j = 0; j < 34; j++) {
s += (t[j] * 4) / 5;
}
// 2
int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for (int j = 0; j < NUMBER_OF_TASKS; j++) {
int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK);
sum += realTaskWeeks;
}
์ ์ฝ๋์์ sum
์ด ๋ณ๋ก ์ ์ฉํ์ง ์์ผ๋ ์ต์ํ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค. ์ด๋ฆ์ ์๋ฏธ์๊ฒ ์ง์ผ๋ฉด ํจ์๊ฐ ๊ธธ์ด์ง๋ค. ํ์ง๋ง WORK_DAYS_PER_WEEK
๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ผ๋ง๋ ์ฌ์ด์ง ์๊ฐํด๋ณด๋ผ. ๊ทธ๋ฅ 5๋ฅผ ์ฌ์ฉํ๋ค๋ฉด 5๊ฐ ๋ค์ด๊ฐ๋ ์ด๋ฆ์ ๋ชจ๋ ์ฐพ์ ํ ์๋ฏธ๋ฅผ ๋ถ์ํด ์ํ๋ ์์๋ฅผ ๊ฐ๋ ค๋ด์ผ ํ๋ฆฌ๋ผ.
๐ ์ธ์ฝ๋ฉ์ ํผํ๋ผโ
๋ฌธ์ ํด๊ฒฐ์ ์ง์คํ๋ ๊ฐ๋ฐ์์๊ฒ ์ธ์ฝ๋ฉ์ ๋ถํ์ํ ์ ์ ์ ๋ถ๋ด์ด๋ค. ์ธ์ฝ๋ฉํ ์ด๋ฆ์ ๊ฑฐ์๋ค ๋ฐ์ํ๊ธฐ ์ด๋ ค์ฐ๋ฉฐ ์คํ๊ฐ ์๊ธฐ๊ธฐ๋ ์ฝ๋ค.
๐ ํ๊ฐ๋ฆฌ์ ํ๊ธฐ๋ฒโ
์์ฆ ๋์ค๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํจ์ฌ ๋ง์ ํ์ ์ ์ง์ํ๋ค. ๋ํ ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ ๊ธฐ์ตํ๊ณ ๊ฐ์ ํ๋ค. ๊ฒ๋ค๊ฐ ํด๋์ค์ ํจ์๋ ์ ์ฐจ ์์์ง๋ ์ถ์ธ๋ค. ์ฆ, ๋ณ์๋ฅผ ์ ์ธํ ์์น์ ์ฌ์ฉํ๋ ์์น๊ฐ ๋ฉ์ง ์๋ค.
์๋ฐ ํ๋ก๊ทธ๋๋จธ๋ ๋ณ์ ์ด๋ฆ์ ํ์ ์ ์ธ์ฝ๋ฉํ ํ์๊ฐ ์๋ค. ๊ฐ์ฒด๋ ๊ฐํ ํ์ ์ด๋ฉฐ, IDE๋ ์ฝ๋๋ฅผ ์ปดํ์ผํ์ง ์๊ณ ๋ ํ์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ๋๋ก ๋ฐ์ ํ๋ค. ๋ฐ๋ผ์ ์ด์ ๋ ํ๊ฐ๋ฆฌ์ ํ๊ธฐ๋ฒ์ด๋ ๊ธฐํ ์ธ์ฝ๋ฉ ๋ฐฉ์์ด ์คํ๋ ค ๋ฐฉํด๊ฐ ๋ ๋ฟ์ด๋ค. ๋ณ์, ํจ์, ํด๋์ค ์ด๋ฆ์ด๋ ํ์ ์ ๋ฐ๊พธ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ฉฐ, ์ฝ๊ธฐ๋ ์ด๋ ค์์ง๋ค.
PhoneNumber phoneString;
// ํ์
์ด ๋ฐ๋์ด๋ ์ด๋ฆ์ ๋ฐ๋์ง ์๋๋ค!
๐ ๋ฉค๋ฒ ๋ณ์ ์ ๋์ดโ
์ด์ ๋ฉค๋ฒ ๋ณ์์ m_
์ด๋ผ๋ ์ ๋์ด๋ฅผ ๋ถ์ผ ํ์๋ ์๋ค. ํด๋์ค์ ํจ์๋ ์ ๋๊ฐ ํ์์์ ์ ๋๋ก ์์ ์ผ ๋ง๋
ํ๋ค. ๋ํ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๋ค๋ฅธ ์์์ผ๋ก ํ์ํ๊ฑฐ๋ ๋์ ๋๊ฒ ๋ณด์ฌ์ฃผ๋ IDE๋ฅผ ์ฌ์ฉํด์ผ ๋ง๋
ํ๋ค.
// 1
public class Part {
private String m_dsc; // ์ค๋ช
๋ฌธ์์ด
void setName(String name) {
m_dsc = name;
}
}
// 2
public class Part {
String description;
void setDescription(String description) {
this.description = description;
}
}
๊ณ๋ค๊ฐ ์ฌ๋๋ค์ ์ ๋์ด(๋๋ ์ ๋ฏธ์ด)๋ฅผ ๋ฌด์ํ๊ณ ์ด๋ฆ์ ํด๋ ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ๋นจ๋ฆฌ ์ตํ๋ค. ์ฝ๋๋ฅผ ์ฝ์ผ์๋ก ์ ๋์ด๋ ๊ด์ฌ ๋ฐ์ผ๋ก ๋ฐ๋ ค๋๋ค. ๊ฒฐ๋ฃฉ ์ ๋์ด๋ ์๋ ์ ์์ฑํ ๊ตฌ๋ฅ๋ค๋ฆฌ ์ฝ๋๋ผ๋ ์งํ๊ฐ ๋๋ฒ๋ฆฐ๋ค.
๐ ์ธํฐํ์ด์ค ํด๋์ค์ ๊ตฌํ ํด๋์คโ
๋๋ก๋ ์ธ์ฝ๋ฉ์ด ํ์ํ ๊ฒฝ์ฐ๋ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ํ์ ์์ฑํ๋ ABSTRACT FACTORY
๋ฅผ ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํ์. ์ด ํฉํ ๋ฆฌ๋ ์ธํฐํ์ด์ค ํด๋์ค๋ค. ๊ตฌํ์ ๊ตฌ์ฒด ํด๋์ค์์ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ ํด๋์ค ์ด๋ฆ์ ์ด๋ป๊ฒ ์ง์ด์ผ ์ข์๊น? ๊ฐ์ธ์ ์ผ๋ก ์ธํฐํ์ด์ค ์ด๋ฆ์ ์ ๋์ด๋ฅผ ๋ถ์ด์ง ์๋ ํธ์ด ์ข๋ค๊ณ ์๊ฐํ๋ค. ์๋ ์ฝ๋์์ ๋ง์ด ์ฌ์ฉํ๋ ์ ๋์ด I
๋ ์ฃผ์๋ฅผ ํํธ๋ฆฌ๊ณ ๊ณผ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. ํด๋์ค ์ฌ์ฉ์๋ ๊ทธ๋ฅ ShapeFactory
๋ผ๊ณ ๋ง ์๊ฐํ์ผ๋ฉด ์ข๊ฒ ๋ค. ๊ทธ๋์ ์ธํฐํ์ด์ค ํด๋์ค ์ด๋ฆ๊ณผ ๊ตฌํ ํด๋์ค ์ด๋ฆ ์ค ํ๋๋ฅผ ์ธ์ฝ๋ฉํด์ผ ํ๋ค๋ฉด ๊ตฌํ ํด๋์ค ์ด๋ฆ์ ํํ๊ฒ ๋ค. ShapeFactoryImp
๋ ์ฌ์ง์ด CShapeFactory
๊ฐ IShapeFactory
๋ณด๋ค ์ข๋ค.
๐ ์์ ์ ๊ธฐ์ต๋ ฅ์ ์๋ํ์ง ๋ง๋ผโ
๋ ์๊ฐ ์ฝ๋๋ฅผ ์ฝ์ผ๋ฉด์ ๋ณ์ ์ด๋ฆ์ ์์ ์ด ์๋ ์ด๋ฆ์ผ๋ก ๋ณํํด์ผ ํ๋ค๋ฉด ๊ทธ ๋ณ์ ์ด๋ฆ์ ๋ฐ๋์งํ์ง ๋ชปํ๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ์์ญ์ด๋ ํด๋ฒ ์์ญ์์ ์ฌ์ฉํ์ง ์๋ ์ด๋ฆ์ ์ ํํ๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ๋ฌธ์ ๋ค.
๋ฌธ์ ํ๋๋ง ์ฌ์ฉํ๋ ๋ณ์ ์ด๋ฆ์ ๋ฌธ์ ๊ฐ ์๋ค. ๋ฃจํ์์ ๋ฐ๋ณต ํ์๋ฅผ ์ธ๋ ๋ณ์ i
, j
, k
๋ ๊ด์ฐฎ๋ค. (l
์ ์ ๋ ์ ๋๋ค!) ๋จ, ๋ฃจํ ๋ฒ์๊ฐ ์์ฃผ ์๊ณ ๋ค๋ฅธ ์ด๋ฆ๊ณผ ์ถฉ๋ํ์ง ์์ ๋๋ง ๊ด์ฐฎ๋ค. ๋ฃจํ์์ ๋ฐ๋ณต ํ์ ๋ณ์๋ ์ ํต์ ์ผ๋ก ํ ๊ธ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ ์ธ์๋ ๋๋ถ๋ถ ์ ์ ํ์ง ๋ชปํ๋ค.
๋๋ํ ํ๋ก๊ทธ๋๋จธ์ ์ ๋ฌธ๊ฐ ํ๋ก๊ทธ๋๋จธ ์ฌ์ด์์ ๋ํ๋๋ ์ฐจ์ด์ ํ๋๋ง ๋ค์๋ฉด, ์ ๋ฌธ๊ฐ ํ๋ก๊ทธ๋๋จธ๋ ๋ช ๋ฃํจ์ด ์ต๊ณ ๋ผ๋ ์ฌ์ค์ ์ดํดํ๋ค. ์ ๋ฌธ๊ฐ ํ๋ก๊ทธ๋๋จธ๋ ์์ ์ ๋ฅ๋ ฅ์ ์ข์ ๋ฐฉํฅ์ผ๋ก ์ฌ์ฉํด ๋จ๋ค์ด ์ดํดํ๋ ์ฝ๋๋ฅผ ๋ด๋๋๋ค.
๐ ํด๋์ค ์ด๋ฆโ
ํด๋์ค ์ด๋ฆ๊ณผ ๊ฐ์ฒด ์ด๋ฆ์ ๋ช
์ฌ๋ ๋ช
์ฌ๊ตฌ๊ฐ ์ ํฉํ๋ค. Customer
, WikiPage
, Account
, AddressParser
๋ฑ์ ์ข์ ์๋ค. Manager
, Processor
, Data
, Info
๋ฑ๊ณผ ๊ฐ์ ๋จ์ด๋ ํผํ๊ณ , ๋์ฌ๋ ์ฌ์ฉํ์ง ์๋๋ค.
๐ ๋ฉ์๋ ์ด๋ฆโ
๋ฉ์๋ ์ด๋ฆ์ ๋์ฌ๋ ๋์ฌ๊ตฌ๊ฐ ์ ํฉํ๋ค. postPayment
, deletePage
, save
๋ฑ์ด ์ข์ ์๋ค. ์ ๊ทผ์, ๋ณ๊ฒฝ์, ์กฐ๊ฑด์๋ javabean
ํ์ค์ ๋ฐ๋ผ ๊ฐ ์์ get
, set
, is
๋ฅผ ๋ถ์ธ๋ค.
String name = employee.getName();
customer.setName("mike");
if (paycheck.isPosted()) // ...
์์ฑ์(Constructor)๋ฅผ ์ค๋ณต์ ์(overload)ํ ๋๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. ๋ฉ์๋๋ ์ธ์๋ฅผ ์ค๋ช ํ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ๋ ์์ ๋ฅผ ์ดํด๋ณด์.
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
์ ์ฝ๋๊ฐ ์๋ ์ฝ๋๋ณด๋ค ์ข๋ค.
Complex fulcrumPoint = new Complex(23.0);
์์ฑ์ ์ฌ์ฉ์ ์ ํํ๋ ค๋ฉด ํด๋น ์์ฑ์๋ฅผ private
๋ก ์ ์ธํ๋ค.
๐ ๊ธฐ๋ฐํ ์ด๋ฆ์ ํผํ๋ผโ
HolyHandGrenade
๋ผ๋ ํจ์๊ฐ ๋ฌด์์ ํ๋์ง ์๊ณ๋๊ฐ? ๊ธฐ๋ฐํ ์ด๋ฆ์ด์ง๋ง DeleteItems
๊ฐ ๋ ์ข๋ค. ์ฌ๋ฏธ๋ ์ด๋ฆ๋ณด๋ค ๋ช
๋กํ ์ด๋ฆ์ ์ ํํ๋ผ.
ํน์ ๋ฌธํ์์๋ง ์ฌ์ฉ๋๋ ๋๋ด์ ํผํ๋ ํธ์ด ์ข๋ค. ์๋๋ฅผ ๋ถ๋ช ํ๊ณ ์์งํ๊ฒ ํํํ๋ผ.
๐ ํ ๊ฐ๋ ์ ํ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ผโ
์ถ์์ ์ธ ๊ฐ๋ ํ๋์ ๋จ์ด ํ๋๋ฅผ ์ ํํด ์ด๋ฅผ ๊ณ ์ํ๋ค. ๋ฉ์๋ ์ด๋ฆ์ ๋ ์์ ์ด๊ณ ์ผ๊ด์ ์ด์ด์ผ ํ๋ค. ๊ทธ๋์ผ ์ฃผ์์ ๋ค์ ธ๋ณด์ง ์๊ณ ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฉ์๋๋ฅผ ์ ํํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก, ๋์ผ ์ฝ๋ ๊ธฐ๋ฐ์ controller
, manager
, driver
๋ฅผ ์์ด ์ฐ๋ฉด ํผ๋์ค๋ฝ๋ค. DeviceManager
์ ProtocolController
๋ ๊ทผ๋ณธ์ ์ผ๋ก ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ? ์ด์งธ์ ๋ ๋ค Controller
๊ฐ ์๋๊ฐ? ์ด์งธ์ ๋ ๋ค Manager
๊ฐ ์๋๊ฐ? ์ด๋ฆ์ด ๋ค๋ฅด๋ฉด ๋
์๋ ๋น์ฐํ ํด๋์ค๋ ๋ค๋ฅด๊ณ ํ์
๋ ๋ค๋ฅด๋ฆฌ๋ผ ์๊ฐํ๋ค.
์ผ๊ด์ฑ ์๋ ์ดํ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฐ๊ฐ๊ฒ ์ฌ๊ธธ ์ ๋ฌผ์ด๋ค.
๐ ๋ง์ฅ๋์ ํ์ง ๋ง๋ผโ
ํ ๋จ์ด๋ฅผ ๋ ๊ฐ์ง ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ง๋ผ. ๋ค๋ฅธ ๊ฐ๋ ์ ๊ฐ์ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๊ฒ์ ๋ง์ฅ๋์ ๋ถ๊ณผํ๋ค.
์๋ฅผ ๋ค์ด, ์ง๊ธ๊น์ง ๊ตฌํํ add
๋ฉ์๋๋ ๋ชจ๋ ๊ธฐ์กด ๊ฐ ๋ ๊ฐ๋ฅผ ๋ํ๊ฑฐ๋ ์ด์ด์ ์๋ก์ด ๊ฐ์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ์. ์๋ก ์์ฑํ ๋ฉ์๋๋ ์งํฉ์ ๊ฐ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ค. ์ด ๋ฉ์๋๋ฅผ add
๋ผ ๋ถ๋ฌ๋ ๊ด์ฐฎ์๊น? ์ ๋ฉ์๋๋ ๊ธฐ์กด add
๋ฉ์๋์ ๋งฅ๋ฝ์ด ๋ค๋ฅด๋ค. ๊ทธ๋ฌ๋ฏ๋ก insert
๋ append
๋ผ๋ ์ด๋ฆ์ด ์ ๋นํ๋ค. ์ ๋ฉ์๋๋ฅผ add
๋ผ ๋ถ๋ฅธ๋ค๋ฉด ์ด๋ ๋ง์ฅ๋์ด๋ค.
ํ๋ก๊ทธ๋๋จธ๋ ์ฝ๋๋ฅผ ์ต๋ํ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ง์ผ ํ๋ค. ์ง์ค์ ์ธ ํ๊ตฌ๊ฐ ํ์ํ ์ฝ๋๊ฐ ์๋๋ผ ๋์ถฉ ํ์ด๋ด๋ ์ดํดํ ์ฝ๋ ์์ฑ์ด ๋ชฉํ๋ค. ์๋ฏธ๋ฅผ ํด๋ ํ ์ฑ ์์ด ๋ ์์๊ฒ ์๋ ๋ ผ๋ฌธ ๋ชจ๋ธ์ด ์๋๋ผ ์๋๋ฅผ ๋ฐํ ์ฑ ์์ด ์ ์์๊ฒ ์๋ ์ก์ง ๋ชจ๋ธ์ด ๋ฐ๋์งํ๋ค.
๐ ํด๋ฒ ์์ญ์์ ๊ฐ์ ธ์จ ์ด๋ฆ์ ์ฌ์ฉํ๋ผโ
์ฝ๋๋ฅผ ์ฝ์ ์ฌ๋๋ ํ๋ก๊ทธ๋๋จธ๋ผ๋ ์ฌ์ค์ ๋ช ์ฌํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ์ฐ ์ฉ์ด, ์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ, ํจํด ์ด๋ฆ, ์ํ ์ฉ์ด ๋ฑ์ ์ฌ์ฉํด๋ ๊ด์ฐฎ๋ค. ๋ชจ๋ ์ด๋ฆ์ ๋ฌธ์ ์์ญ์์ ๊ฐ์ ธ์ค๋ ์ ์ฑ ์ ํ๋ช ํ์ง ๋ชปํ๋ค. ๊ธฐ์ ๊ฐ๋ ์๋ ๊ธฐ์ ์ด๋ฆ์ด ๊ฐ์ฅ ์ ํฉํ ์ ํ์ด๋ค.
๐ ๋ฌธ์ ์์ญ์์ ๊ฐ์ ธ์จ ์ด๋ฆ์ ์ฌ์ฉํ๋ผโ
์ ์ ํ 'ํ๋ก๊ทธ๋๋จธ ์ฉ์ด'๊ฐ ์๋ค๋ฉด ๋ฌธ์ ์์ญ์์ ์ด๋ฆ์ ๊ฐ์ ธ์จ๋ค. ๊ทธ๋ฌ๋ฉด ์ฝ๋๋ฅผ ๋ณด์ํ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ถ์ผ ์ ๋ฌธ๊ฐ์๊ฒ ์๋ฏธ๋ฅผ ๋ฌผ์ด ํ์ ํ ์ ์๋ค.
์ฐ์ํ ํ๋ก๊ทธ๋๋จธ์ ์ค๊ณ์๋ผ๋ฉด ํด๋ฒ ์์ญ๊ณผ ๋ฌธ์ ์์ญ์ ๊ตฌ๋ถํ ์ค ์์์ผ ํ๋ค. ๋ฌธ์ ์์ญ ๊ฐ๋ ๊ณผ ๊ด๋ จ์ด ๊น์ ์ฝ๋๋ผ๋ฉด ๋ฌธ์ ์์ญ์์ ์ด๋ฆ์ ๊ฐ์ ธ์์ผ ํ๋ค.
๐ ์๋ฏธ ์๋ ๋งฅ๋ฝ์ ์ถ๊ฐํ๋ผโ
์ค์ค๋ก ์๋ฏธ๊ฐ ๋ถ๋ช ํ ์ด๋ฆ์ด ์์ง ์๋ค. ํ์ง๋ง ๋๋ค์ ์ด๋ฆ์ ๊ทธ๋ ์ง ๋ชปํ๋ค. ๊ทธ๋์ ํด๋์ค, ํจ์, ์ด๋ฆ ๊ณต๊ฐ์ ๋ฃ์ด ๋งฅ๋ฝ์ ๋ถ์ฌํ๋ค. ๋ชจ๋ ๋ฐฉ๋ฒ์ด ์คํจํ๋ฉด ๋ง์ง๋ง ์๋จ์ผ๋ก ์ ๋์ด๋ฅผ ๋ถ์ธ๋ค.
์๋ฅผ ๋ค์ด, firstName
, lastName
, street
, houseNumber
, city
, state
, zipcode
๋ผ๋ ๋ณ์๊ฐ ์๋ค. ๋ณ์๋ฅผ ํ์ด๋ณด๋ฉด ์ฃผ์๋ผ๋ ์ฌ์ค์ ๊ธ๋ฐฉ ์์์ฑ๋ค. ํ์ง๋ง ์ด๋ ๋ฉ ์๋๊ฐ state
๋ผ๋ ๋ณ์ ํ๋๋ง ์ฌ์ฉํ๋ค๋ฉด? ๋ณ์ state
๊ฐ ์ฃผ์์ ์ผ๋ถ๋ผ๋ ์ฌ์ค์ ๊ธ๋ฐฉ ์์์ฑ๊น?
์๋ ์์ ๋ ๋งฅ๋ฝ์ด ๋ถ๋ช
ํ ๋ณ์๋ค. ์ธ ๋ณ์๋ ํ์คํ๊ฒ GuessStatisticsMessage
์ ์ํ๋ค. ์ด๋ ๊ฒ ๋งฅ๋ฝ์ ๊ฐ์ ํ๋ฉด ํจ์๋ฅผ ์ชผ๊ฐ๊ธฐ๊ฐ ์ฌ์์ง๋ฏ๋ก ์๊ณ ๋ฆฌ์ฆ๋ ์ข ๋ ๋ช
ํํด์ง๋ค.
public class GuessStatisticsMessage {
private String number;
private String verb;
private String pluralModifier;
public String make(char candidate, int count) {
createPluralDependentMessageParts(count);
return String.format(
"There %s %s %s%s",
verb, number, candidate, pluralModifier
);
}
private void createPluralDependentMessageParts(int count) {
if (count == 0) {
thereAreNoLetters();
} else if (count == 1) {
thereIsOneLetter();
} else {
thereAreManyLetters(count);
}
}
private void thereAreManyLetters(int count) {
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
private void thereIsOneLetter() {
number = "1";
verb = "is"
pluralModifier = "";
}
private void thereAreNoLetters() {
number = "no";
verb = "are";
pluralModifier = "s";
}
}
๐ ๋ถํ์ํ ๋งฅ๋ฝ์ ์์ ๋ผโ
์ผ๋ฐ์ ์ผ๋ก ์งง์ ์ด๋ฆ์ด ๊ธด ์ด๋ฆ๋ณด๋ค ์ข๋ค. ๋จ, ์๋ฏธ๊ฐ ๋ถ๋ช ํ ๊ฒฝ์ฐ์ ํํด์๋ค. ์ด๋ฆ์ ๋ถํ์ํ ๋งฅ๋ฝ์ ์ถ๊ฐํ์ง ์๋๋ก ์ฃผ์ํ๋ค.
accountAddress
์ customerAddress
๋ Address
ํด๋์ค ์ธ์คํด์ค๋ก๋ ์ข์ ์ด๋ฆ์ด๋ ํด๋์ค ์ด๋ฆ์ผ๋ก๋ ์ ํฉํ์ง ๋ชปํ๋ค. Address
๋ ํด๋์ค ์ด๋ฆ์ผ๋ก ์ ํฉํ๋ค. ํฌํธ ์ฃผ์, MAC ์ฃผ์, ์น ์ฃผ์๋ฅผ ๊ตฌ๋ถํด์ผ ํ๋ค๋ฉด PostalAddress
, MAC
, URI
๋ผ๋ ์ด๋ฆ๋ ๊ด์ฐฎ๊ฒ ๋ค. ๊ทธ๋ฌ๋ฉด ์๋ฏธ๊ฐ ์ข ๋ ๋ถ๋ช
ํด์ง๋ค. ๋ฐ๋ก ์ด๊ฒ์ด ์ด๋ฆ์ ๋ถ์ด๋ ์ด์ ๊ฐ ์๋๋๊ฐ?