item 7 sungjaeyoon - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
ITEM7 ๋ค์ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํด์ ํ๋ผ.
๊ฐ๋น์ง ์ปฌ๋ ์
์ธ์ด์์๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ฐพ๊ธฐ๊ฐ ์์ฃผ ๊น๋ค๋กญ๋ค.
๋๋ฌธ์ ํด๋น ์ฐธ์กฐ๋ฅผ ๋ค ์ฌ์ฉํ ํ null ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
Stack
์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ ์์
public class Stack {
private Object[] elements;
...
public Object pop() {
if (size == 0)
throw new EmptyStackException();
return elements[--size]; // ๋ฌธ์ ์
}
...
}
์ ์ฝ๋๋ pop() ๋ฉ์๋์์ size๋ฅผ ๊ฐ์์ํค์ง๋ง ํด๋น ๊ฐ์ ๊ทธ๋๋ก ์์ด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์คํ์์ pop์ ํ ๊ฒฝ์ฐ null ์ฒ๋ฆฌ๋ฅผ ํด์ค ์ฝ๋
Object result = elements[--size];
elements[size] = null;
return result;
์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ด์ ์ null ์ฒ๋ฆฌํ ๊ฐ์ฒด๋ฅผ ๋ค์ ์ฐธ์กฐํ ๋ NullpointerException์ ๋์ง๋ฉฐ ์๋ชป๋ ์ฐธ์กฐ๋ฅผ ๋ฐฉ์งํ๋ค.
์๊ธฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ ํด๋์ค๋ผ๋ฉด ํ๋ก๊ทธ๋๋จธ๋ ํญ์ ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ฃผ์ํด์ผ ํ๋ค.
๋ํ ์บ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐ์์ํค๋ ์ฃผ๋ฒ์ด๋ค.
์บ์๋ฅผ ์ง์ ๊ตฌํํ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ฅผ ์บ์์ ๋ฃ์ด๋๊ณ ์๋ ๋ฑ ๋ฌธ์ ์ ์์ง๊ฐ ์๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ณ ์ WeakHashMap์ ์ฌ์ฉํ์ฌ ์บ์๋ฅผ ๋ง๋ ๋ค๋ฉด ๋ค ์ด ์ํธ๋ฆฌ๋ ์ฆ์ ์ ๊ฑฐ๋ ๊ฒ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์์ ์ธ ๋ฒ์งธ ์ฃผ๋ฒ์ ๋ฆฌ์ค๋ ํน์ ์ฝ๋ฐฑ์ด๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ฝ๋ฐฑ์ ๋ฑ๋ก๋ง ํ๊ณ ํด์งํ์ง ์๋๋ค๋ฉด ๊ณ์ํด์ ์ฝ๋ฐฑ์ด ์์ฌ๊ฐ๋ค.
์ด๋ด ๋ weak reference๋ก ์ ์ฅํ๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ฆ์ ์๊ฑฐํด๊ฐ๋ค.
์ ๋ฆฌ
๋ฉ๋ชจ๋ฆฌ ๋์๋ ๊ฒ์ผ๋ก ์ ๋๋ฌ๋์ง ์์ ์๋
๊ฐ ์ ๋ณตํ๋ ์ฌ๋ก๋ ์๋ค.
์ฝ๋๋ฆฌ๋ทฐ๋ ํ ํ๋กํ์ผ๋ฌ ๊ฐ์ ๋๋ฒ๊น
๋๊ตฌ๋ฅผ ๋์ํด์ผ ํ๋ฏ๋ก ์๋ฐฉ๋ฒ์ ์ตํ๋๋ ๊ฒ์ด ์ค์ํ๋ค.