๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ ๋ฆฌํ๊ธฐ โ๏ธ
์๋ ๊ฐํธ ์ค๋ธ์ ํธ
-
๋ฌธ์์ด๊ณผ ์์๊ฐ์ ํฌ์ฅํด๋ผ
-
๋ฐํ ๊ฐ์ ๋ชจ๋ ์ผ๊ธ ์ปฌ๋ ์
์ธ์์ ๊ฐ์ผ๋ก null์ ์ ๋ ํ์ฉํ์ง ๋ง์ธ์
public Iterable<File> find(String mask) {
if (mask == null) {
// .
} else {
// .
} }
null์ ์ฒดํฌํ๋ ๋ก์ง์ ๊ตฌํํ๋ ๊ฒ์ ๊ฐ์ฒด๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ด๋ค.
mask ๊ฐ์ฒด๋ฅผ ์กด์คํ๋ค๋ฉด ์กฐ๊ฑด์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๊ฐ์ฒด ์ค์ค๋ก ๊ฒฐ์ ํ๊ฒ ํ์ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ํด ์์ ๊ฐ๊ณผ ๋ฌธ์์ด์ ํฌ์ฅํ๋ฉด null์ ํ์ฉํ์ง ์์ ์ ์๋ค.
์ด ๋ถ๋ถ์ด randomNumber๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ด ์๋๊ฐ.
randomNumber๋ฅผ ๊ฐ์ฒด๋ก ๋ง๋ ๋ค. (์์๊ฐ ํฌ์ฅ).
๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋๋ก ๋ฆฌํฉํ ๋งํ๋ค.
ํ ์คํธ ๊ฐ๋ฅํ๊ฒ ์ค๋ฒ๋ผ์ด๋ฉ.
RandomNumber์ null ์ฒดํฌ ์ํด์ค๋ ๋๋ ?
์ด ๋ฉ์๋๊ฐ ์ธ๋ถ์ ์ฐ์ธ๋ค๋ฉด ๊ณ ๋ฏผํด๋ด์ผํ์ง๋ง, ๋ด๋ถ์์๋ง move๊ฐ ํธ์ถ๋๋ฉด
null ์ฒดํฌ๋ฅผ ๊ตณ์ด ์ํด์ค๋ ์ข๋ค.
๋ด๊ฐ ์ปจํธ๋กคํ ์ ์๋ ๋ฒ์๋ผ๋ฉด ์ํด๋ ๋ ๊ฒ ๊ฐ๋ค.
move()
๋ฅผ ์ฌ์ฉํ๋ ๋ฒ์๊ฐ ์ด๋๊น์ง์ธ์ง์ ๋ฐ๋ผ null ์ฒดํฌ ์ฌ๋ถ๊ฐ ๋ฌ๋ฆฐ ๊ฒ ๊ฐ๋ค.
final์ด๊ฑฐ๋ abstract ์ด๊ฑฐ๋
์์์ ๊ฐ์ฒด๋ค์ ๊ด๊ณ๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋๋ ์ต๋ํ ์์ ํ๊ณ ,
final์ด๋ abstract๋ก ๋ง๋ค์ด๋ผ
๋ณ์์ final
์ ๋ถ์ด๋ฉด ์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, ๋ฉ์๋์ ๋ถ์ด๋ฉด ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ถ๊ฐํ๋ค.
ํด๋์ค์ final
์ ์์์ ๋ถ๊ฐ๋ฅํ๊ฒ ํ๋ค.
final ํด๋์ค๊ฐ ํ ์คํธ ๊ฐ๋ฅํ๋๋ก ํ๋ ๋ฒ. ์ธํฐํ์ด์ค๋ก ๋ง๋ ๋ค.
RandomNumber ํด๋์ค๋ฅผ final๋ก ๋ง๋ค๊ณ Number ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ ๋ค.
๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ Number ์ธํฐํ์ด์ค์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ๋๋ค.
์ธํฐํ์ด์ค์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ๋๊ฒ final ํด๋์ค์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ ๋ณด๋ค ํ
์คํธ๊ฐ ๋ ์ฉ์ดํ๋ค.
ํด๋์ค์ final์ ๋ถ์ด๋ ๊ฒ์ ์ข์ ์ต๊ด์ด๋ค.
final์ ํ
์คํธํ๊ณ ์ถ์ผ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ์ถ์ถํ๋ฉด ๋๋ค.
์ธํฐํ์ด์ค ๊ตฌํ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ๊ฐ ๋๋ฉด ์ค๋ณต๋ค์ด ๋ง์์ง๋๋ฐ,
์ด ์ค๋ณต์ ์ด๋ป๊ฒ ์์ ๋ ?
์ธํฐํ์ด์ค ๊ตฌํ์ฒด ์ค๊ฐ์ ์ถ์ ํด๋์ค๋ฅผ ๋๋ค.
Car - ์ธํฐํ์ด์ค
AbstractCar - ์ถ์ ํด๋์ค
Sonatar - ํด๋์ค
์ด๋ฌ๋ฉด ์ถ์ ํด๋์ค์ ํ์์ฑ์ ๋๋ ์ ์์ ๊ฒ์ด๋ค.
๊ทผ๋ฐ default ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ ?
ํฌ๋น๋ default ๋ฅผ ๋จ์ฉํ์ง ์๋๋ค. ์ถ์ ํด๋์ค๋ฅผ ์ฐ๋๊ฒ ๋ ์ข๋ค.
์ค๋ณต์ ์ ๊ฑฐํ ๋ ์ถ์ ํด๋์ค์ ์ธ์คํด์ค ๋ณ์, ์ฆ ์ธ์คํด์ค์ ์ข
์๋ ๋ฉ์๋๋ฉด default ๋ฉ์๋๋ฅผ ๋ง๋ค๊ธฐ ์ด๋ ค์ธ ์ ์๋ค. default ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ, ์๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ ์ ๊ตฌ๋ณ.
์ถ์ ํด๋์ค๋ ์ํ๋ฅผ ๊ฐ์ง๋ ์ํ๋ฅผ ํ์ฉํ ์ ์๋ค.
์์ ๋ ๋ถ๋ชจ ํด๋์ค์ ์๋ ์ธ์คํด์ค ๋ณ์๋ฅผ private๋ก ๋ง์๋ผ !
๊ทธ๋์ผ ์บก์ํ๊ฐ ์ ๋์๋ค๊ณ ํ๋ค.
์ ๊ทผํ ๋๋ ๋ฉ์๋๋ฅผ ํตํด ์ ๊ทผํด๋ผ
-er๋ก ๋๋๋ ์ด๋ฆ์ ์ฌ์ฉํ์ง ๋ง์ธ์
ํด๋์ค ์ด๋ฆ์ ์ง์ ๋ ์ข์ ๊ฐ์ด๋.
ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ด๋ ์ญํ ์ผ ๋ฟ์ด๋ค (๊ฐ์ฒด์ Factory).
ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ์ถ์ ํ๊ณ , ์ ์ ํ ์์ ์ ํ๊ดดํ๋ค (๋ผ์ดํ ์ฌ์ดํด ๊ด๋ฆฌ).
ํด๋์ค๋ฅผ ๊ฐ์ฒด์ ํ
ํ๋ฆฟ์ผ๋ก ๋ฐ๋ผ๋ณด๋ ๊ฒ์ ํด๋์ค๋ฅผ ์๋์ ์ธ ์กด์ฌ๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
ํด๋์ค๋ ๊ฐ์ฒด์ ๋ฅ๋์ ์ธ ๊ด๋ฆฌ์์ด๋ค.
๊ฐ์ฒด๋ฅผ ๊บผ๋ด๊ฑฐ๋ ๋ฐํํ๋ ์ ์ฅ์์ด๋ค.
ํด๋์ค ์ด๋ฆ์ ์ง๋ ๋ฐฉ์
ํด๋์ค์ ๊ฐ์ฒด๋ค์ด ๋ฌด์์ ํ๋์ง ๊ฐ ์๋, ๋ฌด์์ธ์ง ์ ๊ธฐ๋ฐํด ์ง์ด๋ผ.
- ๋ฌด์์ ํ๋์ง๋ก ์ด๋ฆ์ ์ง์ ์๋ชป๋ ์
public class CashFormatter {
private int dollars;
public CashFormatter(int dollars) {
this.dollars = dollars;
}
public String format() {
return String.format("$ %d", this.dollars);
}
}
๋ฌด์์ธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด์ ์ญ๋์ ๋ํ๋ด๋๋ก ์ด๋ฆ์ ์ง์ด์ผ ํ๋ค.
- ๋ฌด์์ธ์ง
public class Cash {
private int dollars;
public Cash(int dollars) {
this.dollars = dollars;
}
public String usd() {
return String.format("$ %d", this.dollars);
}
}
๊ฐ์ฒด๋ ๊ฐ์ฒด์ ์ธ๋ถ ์ธ๊ณ์ ๋ด๋ถ ์ธ๊ณ๋ฅผ ์ด์ด์ฃผ๋ ์ฐ๊ฒฐ์ฅ์น๊ฐ ์๋๊ณ ,
๋ด๋ถ์ ์บก์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์์ฒญํ ์ ์๋ ์ ์ฐจ์ ์งํฉ๋ ์๋๋ค.
๊ฐ์ฒด๋ ์บก์ํ๋ ๋ฐ์ดํฐ์ ๋ํ์์ด๋ค.
๋ฌด์์ธ์ง๋ก ๊ฐ์ฒด๋ฅผ ์ถ์ถํ๋ฉด ๋ฌด์์ ํ๋์ง๊น์ง ํฌ๊ดํ๋ ๊ฒ์ด ์๋๊ฐ.
๋ฌด์์ ํ๋์ง๋ ์๋์ ์ธ ์กด์ฌ๊ฐ ๋๋ค.
๋ฉ์๋์์๋ protected๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ ๋ณ์์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
DTO๋ ๋ชจ๋ฅด๊ฒ ๋๋ฐ ๋๋ฉ์ธ ๊ฐ์ฒด์์๋ ๋ฌด์กฐ๊ฑด ์ธ์คํด์ค ๋ณ์๋ private์ฌ์ผ ํ๋ค.
โ๋ฌด์์ธ์งโ ์๊ฐํ์ง ์๊ณ โ๋ฌด์์ ํ๋์งโ๋ฅผ ๋จผ์ ์๊ฐํ๊ณ ์ค๊ณํ์ง ๋ง๋ผ
์ฒ์์ ๋ฉ์ธ์ง๋ฅผ ์ ํ๊ณ ๊ฐ์ฒด์ ํ๋ ฅ์ ๊ตฌ์ํด์ผํ๋๋ฐ ์ด๋ฅผ ํ๊ธฐ ์ํด๋ โ๋ฌด์์ ํ๋์งโ๊ฐ ์๋๋ผ ๊ฐ์ฒด๊ฐ โ๋ฌด์์ธ์งโ ๋ถํฐ ์๊ฐ์ ํด์ผํ๋ ๊ฒ ๊ฐ์์. ๊ฐ์ฒด๊ฐ ๋ฌด์์ธ์ง ์๊ฐํ๊ณ ์ฑ ์์ ๋ถ์ฌํ๋ฉด์ โ๋ฌด์์ ํ๋์งโ ๊ฐ ๋๋ค.
์ด๋ฏธ er๊ณผ or์ ๊ฐ์ง๊ณ ์๋ ๊ฒ๋ค์ ์จ๋ ๋์ง๋ง, ๋๋จธ์ง๋ ์์ ํ๋ผ
CashFormatter๊ฐ ์๋ FomattedCash๋ ์ด๋ ?
CashFormatter๋format()
์ด์ธ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ฉด ๋ถ์์ฐ์ค๋ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฉ์๋ ์ด๋ฆ์ ์ ์คํ๊ฒ ์ ํํ์ธ์
๋ฉ์๋ ๋ช ์ ๋ฌด์กฐ๊ฑด ๋์ฌ๊ฐ ์๋๋ค.
๋น๋(builder)์ ์ด๋ฆ์ ๋ช ์ฌ๋ก
๋ฐํํ์
์ด void๊ฐ ์๋ ๋ฉ์๋๋ก, ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค์ด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
์ด ๋ฉ์๋์ ๋ช
์ ํญ์ ๋ช
์ฌ์ฌ์ผ ํ๋ค.
ํ์ฉ์ฌ๋ฅผ ๋ง๋ถ์ฌ ๋ฉ์๋์ ์๋ฏธ๋ฅผ ์ข ๋ ํ๋ถํ๊ฒ ์ค๋ช
ํ๋ ๋ช
์ฌ๋ก ๋ํ๋ผ ์๋ ์๋ค.
Ex) float speed(), Employee employee(), String parsedCell()
์กฐ์ ์(manipulator)์ ์ด๋ฆ์ ๋์ฌ๋ก
๋ฐํํ์
์ด void์ธ ๋ฉ์๋๋ก ์ํฐํฐ๋ฅผ ์์ ํ๋ ๋ฉ์๋์ด๋ค.
์ด ๋ฉ์๋ ๋ช
์ ํญ์ ๋์ฌ์ฌ์ผ ํ๋ค.
๋ถ์ฌ๋ฅผ ๋ง๋ถ์ฌ ๋ฉ์๋์ ๋ฌธ๋งฅ๊ณผ ๋ชฉ์ ์ ๊ดํ ํ๋ถํ ์ ๋ณด๋ฅผ ์ ์กํ๋ ๋์ฌ๋ก ๋ํ๋ผ ์ ์๋ค.
ex) void save(String content), void quicklyPrint(int id);
์๋ชป๋ ์์
boolean put(String key, Float value);
์ด ๋ฉ์๋๋ PutOperation
๊ณผ ๊ฐ์ ํด๋์ค๋ฅผ ์ถ๊ฐํด save()
, success()
๋ฉ์๋๋ก ๋ถ๋ฆฌํ๋ค.
๋น๋์ ์กฐ์ ์๋ก ๋ถ๋ฆฌ - ๋น๋๋ ๋ช ์ฌ๋ค
class Bakery {
Food cookBrownie();
Drink brewCupOfCoffee(String flavor);
}
cookBrownie()
, brewCupOfCoffee()
๋ ์ค์ ๋ก๋ ๊ฐ์ฒด์ ๋ฉ์๋๊ฐ ์๋๊ณ , ํ๋ก์์ ์ด๋ค.
๊ฐ์ฒด๋ ์์ ์ ์๋ฌด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์๊ณ , ์กด์คํด์ค์ผํ๋ ์ด์์๋ ์ ๊ธฐ์ฒด์ด๋ค.
๋จ์ํ ๋ช
๋ น์ ๋ฐ๋ฅด์ง ์๊ณ , ๊ณ์ฝ์ ๊ธฐ๋ฐํด ์ผํ๊ณ ์ถ์ดํ๋ค.
ํ์ง๋ง ๊ด๋ ์ ์ธ ๋ถ๋ถ์ ํฌ๊ธฐํด๋ ๊ด์ฐฎ๋ค !
getXxx()๋ ๋ด๋ถ์ ์ผ๋ก xxx๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ฌ๋ด์ง๋ง,
๋ช
์ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ ๋ฉ์๋ ๋ด๋ถ์ ๋ก์ง์ด ์๋์ง๋ฅผ ์จ๊ธธ ์ ์๋ค.
๋น๋์ ์กฐ์ ์๋ก ๋ถ๋ฆฌ - ์กฐ์ ์๋ ๋์ฌ๋ค
ex) DJ์๊ฒ ์์ ์ ํ์ด๋ฌ๋ผ๊ณ ์์ฒญํ ๋
- ๋ฐฉ๋ฒ 1. ์์ ์ ํ์ด์ฃผ์ธ์.
- ๋ฐฉ๋ฒ 2. ์์ ์ ํ๊ณ , ํ์ฌ ๋ณผ๋ฅจ ์ํ๋ฅผ ๋งํด์ฃผ์ธ์.
์ด ์ค ๋ฐฉ๋ฒ 1๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ์กด์คํ๊ณ ์๋ค.
๊ทธ ๊ฐ์ฒด๊ฐ ์์์ ํ๊ฒ ์ง ! ๋ฅผ ์๊ฐํด๋ผ. ๊ฐ์ฒด๋ฅผ ๋ฏฟ์ด๋ผ.
print๋ ๋งค๊ฐ๋ณ์๊ฐ ๋ค๋ฅด๋ print()
๋ก ํต์ผํ ์ ์๋ค.
๋น๋์ ์กฐ์ ์๋ก ๋ถ๋ฆฌ 3 - ๋น๋์ ์กฐ์ ์ ํผํฉํ๊ธฐ
class Document {
int write(InputStream content);
}
๊ฐ์ ๋ฐํํ๊ณ ์๋ write๋ฅผ ๋น๋์ ์กฐ์ ์๋ก ๋ถ๋ฆฌํ๋ค.
class Document {
OutputPipe output();
}
class OutputPipe {
void write(InputStream content);
int bytes();
long time();
}
๋น๋์ ์กฐ์ ์๋ก ๋ถ๋ฆฌ - Boolean ๊ฐ์ ๋ฐํํ๋ ๊ฒฝ์ฐ ํ์ฉ์ฌ๋ก ์ง์ด๋ผ
๋น๋์ด์ง๋ง, ๊ฐ๋ ์ฑ์ ์ํด ํ์ฉ์ฌ๋ก ์ง์ด๋ผ.
์์ฑ์ ํ๋๋ฅผ ์ฃผ ์์ฑ์๋ก ๋ง๋์ธ์
ํด๋์ค๋ 2~3๊ฐ์ ๋ฉ์๋์ 5~10๊ฐ์ ์์ฑ์๋ฅผ ํฌํจํด์ผํ๋ค.
์์ฑ์๊ฐ ๋ง๊ณ ๋ฉ์๋๊ฐ ์ ์ ์๋ก ์์ง๋๊ฐ ๋๊ณ ๊ฒฌ๊ณ ํ ํด๋์ค๊ฐ ๋๋ค.
์์ฑ์๊ฐ ๋ง์ ์๋ก ํด๋ผ์ด์ธํธ๊ฐ ํด๋์ค๋ฅผ ๋ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
- ์ฃผ ์์ฑ์ : ํ๋กํผํฐ๋ฅผ ์ด๊ธฐํํ๋ค. ์ค์ง ์ฃผ ์์ฑ์๋ง ๋ด๋นํ๋ค.
- ๋ถ ์์ฑ์ : ์ฃผ ์์ฑ์๋ฅผ ํธ์ถํ๋ค.
์ธ์์๊ฐ ์ ์ ์๋ถํฐ ๋ง์ ์์ผ๋ก, ์ฃผ ์์ฑ์๋ ๋ง์ง๋ง์ ๋๋ค.
ํ ์คํธ๋ฅผ ์ํ ์์ฑ์๋ ์ข๋ค ! ํ์ง๋ง ๋ฉ์๋ ์ถ๊ฐ๋ ์ณ์ง ์๋ค ! ์์ฑ์ ์ฌ๋ฌ๊ฐ๋ฅผ ํ ์คํธ ํ ๋ ๋ค๋ฅธ ํ์ ๋งค๊ฐ๋ณ์์ ์์ฑ์ ๋๋ฑ์ฑ์ ํ ์คํธ ํ๋ฉด ๋๋ค.
๋ทฐ์์ List ์ ๋๋ก ๊ฐ๊ณต์ ํ ์ ์์ ๊ฒ ๊ฐ๋ค.
์ข์ ๊ฐ์ฒด๋ ๋ชจ๋ ๋ฉ์๋๊ฐ ๊ฐ๊ฐ ๋ชจ๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค (100%๋ ์ด๋ ต๋ค).
๋ฌธ์๋ฅผ ์์ฑํ๋ ๋์ ํ ์คํธ๋ฅผ ๋ง๋ค์ด๋ผ
์ฃผ์์ด ์์ด๋ ํด๋์ค๋ช
๊ณผ ๋ฉ์๋๋ง์ ๋ด๋ ๋ฌด์จ์ผ์ ํ๋์ง ์ ์ ์๊ฒ,
ํ
์คํธ๋ฅผ ํตํด ๋ฉ์๋์ ์๋๋ฅผ ์๋๋ก ํ๋ผ.
๊น๋ํ๊ฒ ๋ง๋ ๋ค๋ผ๋ ๊ฒ์ ๋จ์ ํ
์คํธ๋ ๋ง๋ ๋ค๋ ์๋ฏธ์ด๋ค.
๋จ์ ํ
์คํธ๋ ํด๋์ค์ ์ผ๋ถ์ด๊ณ ๋
๋ฆฝ์ ์ธ ๊ฐ์ฒด๊ฐ ์๋๋ค.
์์ฑ์์ ์ฝ๋๋ฅผ ๋ฃ์ง ๋ง์ธ์
์ธ์์ ์์ ๋์ง ๋ง๋ผ๋ ์๋ฏธ์ด๋ค.
- ์๋ชป๋ ์์
public class Cash {
private int dollars;
public Cash(String dlr) {
this.dollars = Integer.parseInt(dlr);
}
}
์์ฑ์์ ์ฝ๋๊ฐ ์์ ๊ฒฝ์ฐ ๊ฐ์ฒด ๋ณํ๊ณผ ๊ด๋ จํ ์์ธ๋ฅผ ์ ์ดํ ์ ์๋ค.
- ์ข์ ์์
public class Cash {
private Number dollars;
public Cash(String dlr) {
this.dollars = new StringAsInteger(dlr);
}
}
public class StringAsInteger extends Number {
private String source;
public StringAsInteger(String txt) {
this.source = txt;
}
@Override
public int intValue() {
return Integer.parseInt(this.source);
}
... }
์ด๋ ๊ฒ ๋ฆฌํฉํ ๋ง์ ํ๋ฉด ์ค์ ๋ก ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์์ ๊น์ง์ ๊ฐ์ฒด ๋ณํ ์์
์ ์ฐ๊ธฐ๋๋ค.
์์ฑ์์ ์ฝ๋๊ฐ ์์ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ต์ ํ๊ฐ ๋ ์ฌ์ ์คํ ์๋๊ฐ ๋ ๋นจ๋ผ์ง๋ค.
์ง์ ํ ๊ฐ์ฒด์งํฅ์์ ์ธ์คํด์คํ๋ ๋ ์์ ๊ฐ์ฒด๋ค์ ์กฐํฉํด์ ๋ ํฐ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด์ ๋ณํ์ ๋ค๋ก ๋ฏธ๋ค ํ์ฑ์ด ์ฌ๋ฌ๋ฒ ์คํ๋์ง ์๋๋ก ๋ฐ์ฝ๋ ์ดํฐ(decorator)๋ฅผ ์ถ๊ฐํด ํ์ฑ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ ์ ์๋ค.
public class CachedNumber extends Number {
private Number origin;
private List<Integer> cached = new ArrayList<>(1);
public CachedNumber(Number num) {
this.origin = num;
}
@Override
public int intValue() {
if (this.cached.isEmpty()) {
this.cached.add(this.origin.intValue());
}
return this.cached.get(0);
}
... }
public class Cash {
private Number dollars;
public Cash(String dlr) {
this.dollars = new CachedNumber(new StringAsInteger(dlr));
}
}