๐ Effective java Item 18
์ด ์ฑ ์์์ ‘์์'์ (ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ํ์ฅํ๋) ๊ตฌํ ์์์ ๋งํ๋ค. ์ด๋ฒ ์์ดํ ์์ ๋ ผํ๋ ๋ฌธ์ ๋ (ํด๋์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์ธํฐํ์ด์ค๊ฐ ๋ค๋ฅธ
์ธํฐํ์ด์ค๋ฅผํ์ฅํ๋) ์ธํฐํ์ด์ค์์๊ณผ๋๋ฌด๊ดํ๋ค.
๋ฉ์๋ ํธ์ถ๊ณผ ๋ฌ๋ฆฌ ์์์ ์บ ์ํ๋ฅผ ๊นจ๋จ๋ฆฐ๋ค.
๋ณํ๋ HashSet : ์์ ์ ์ ์ฅ , ์ ๊ทผ์ ๋ฉ์๋ ์ถ๊ฐ ๋จ.
pubUc Class InstrumentedHashSet<E> extends Hashset<E> {
// ์ถ๊ฐ๋ ์์์ ์
private int addCount = 0;
public InstrumentedHashSet() { }
pubUc InstrumentedHashset(int initCap, float 10adFactor) { super(initCap, 10adFactor);
}
@0verride pubUc boolean add(E e) { addCount+ๅ;
returnsuper.add(e); }
@0verride public boolean addAU(CoUection<? extends E> c) { addCount+=c.size();
returnsuper.addAU(c);
}
pubUc int getAddCount() { return addCount;
} }
์ ํด๋์ค๋ฅผ ๊ตฌํํ๊ณ , ํด๋์ค์ ์ธ์คํด์ค์ addAll๋ฉ์๋๋ฅผ ํตํด ์์๋ฅผ 3๊ฐ ๋ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
InstrumentedHashset<String> s = new InstrumentedHashSet<>();
s.addAU(List.of(''ํฑ'', ''ํํ'', ''ํ''));
์ด์ getAddCount ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด 3์ ๋ฐํํ๋ฆฌ๋ผ ๊ธฐ๋ํ๊ฒ ์ง๋ง, ์ค์ ๋ก๋ 6์ ๋ฐํํ๋ค. ์ด๋์ ์๋ชป๋ ๊ฑธ๊น? ๊ทธ ์์ธ์ Hashset์ addAU ๋ฉ์๋๊ฐ add ๋ฉ์๋๋ฅผ์์ฉํด๊ตฌํ๋๋ฐ์๋ค. ์ด๋ฐ๋ด๋ถ๊ตฌํ๋ฐฉ์์Hashset๋ฌธ์์๋(๋น ์ฐํ) ์ฐ์ฌ ์์ง ์๋ค. InstrumentedHashSet์ addAU์ addCount์ 3์ ๋ํ ํHashset์addAU๊ตฌํ์ํธ์ถํ๋ค. Hashset์addAU์๊ฐ์์๋ฅผadd๋ฉ์ ๋๋ฅผ ํธ์ถํด ์ถ๊ฐํ๋๋ฐ, ์ด๋ ๋ถ๋ฆฌ๋ add๋ InstrumentedHashset์์ ์ฌ์ ์ ํ ๋ฉ์๋๋ค. ๋ฐ๋ผ์ addCount์ ๊ฐ์ด ์ค๋ณตํด์ ๋ํด์ ธ, ์ต์ข ๊ฐ์ด 6์ผ๋ก ๋์ด ๋ ๊ฒโI๋ค. addAu๋ก ์ถ๊ฐํ ์์ ํ๋๋น 2์ฉ ๋์ด๋ฌ๋ค.
๋ฐ๋ผ์ ์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํผํ๊ณ ์ถ๋ค๋ฉด
1. addAll์ ์ฌ์ ์ํ์ง ์๊ฑฐ๋,
2. addAll์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ ์ํ๊ฑฐ๋,
ํ์ง๋ง ์์ ํด๋์ค๋ฅผ ์ฌ์ ์ํ์ง ์๊ฑฐ๋, ๋ค์ ๊ตฌํํ๋ ๋ฐฉ์์ ์ด๋ ต๊ฑฐ๋ ๊ท์ฐฎ๊ฑฐ๋, ์ค๋ฅ๋ฅผ ๋ด๊ฑฐ๋ ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค๋ฆ ๋ฐฐํฌ ๋ฒ์ ์์ ์์ ํด๋์ค์ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ์์๋ฐ๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๊ฒ์ฌํ๊ณ ๋ฑ๋ฑ.. ์๊ฐ์ด ๋ง์ด ๋ค์ด๊ฐ๋ค.
๋ฐ๋ผ์,
๊ธฐ์กด ํด๋์ค๋ฅผ ํ์ฅํ์ง ์๊ณ ,
์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ,
private ํ๋๋ก ๊ธฐ์กด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
์ฑ ์ ์์ ๋ณด๋ค ๊ฐ๋ ์ฑ์ด ์ข์ ์์ ๋ก ๋์ ์ ๋ฆฌํ๋ค.
public class Engine {
public void start() {
// ์์ง์ ๊ฐ๋์ํต๋๋ค.
}
}
public class Car {
private Engine engine; // Engine ๊ฐ์ฒด๋ฅผ ํฌํจํฉ๋๋ค.
public Car() {
this.engine = new Engine(); // Engine ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํฌํจํฉ๋๋ค.
}
public void start() {
engine.start(); // ํฌํจ๋ Engine ๊ฐ์ฒด์ start() ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
// ์๋์ฐจ๋ฅผ ๊ฐ๋์ํต๋๋ค.
}
}
๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ด๋ถ์ ํฌํจ์์ผ์ ์ฌ์ฉํ๋ฏ๋ก, ์์์ ๋ฌธ์ ๋ฅผ ํํผํ๋ฉด์, ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ฉ์ฑ๋ ๋์ธ๋ค.
Car ๋ Engine ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ณ , Car ํด๋์ค๋ Engine ํด๋์ค์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ , Car ํด๋์ค์ ๊ตฌํ์ ๋ณ๊ฒฝํด๋ Engine ํด๋์ค์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
์์กด์ฑ ์ฃผ์ ์ ํตํด ๊ฐ์ฒด๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ ๋ฎ์ถ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์์ฆ์ ์ฑ ๋ณด๋ค gpt๋ฅผ ํตํด ์์ฝํ๋ ๊ฒ ๋ ํธํ์ง๋ง ์๋ฌธ์ ๋ฐ๋์ ์ฝ๋๊ฒ ๋ง๋ค๊ณ ์๊ฐํ๋ค.
'Effective Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์์ดํ 50] ์ ์์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค๋ผ (0) | 2023.07.24 |
---|---|
[์์ดํ 13] clone ์ฌ์ ์๋ ์ฃผ์ํด์ ์งํํ๋ผ (0) | 2023.02.15 |
[ ์์ดํ 12 ] toString (0) | 2023.02.14 |