item 7 sijun - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
์์ดํ 7 ๋ค ์ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํด์ ํ๋ผ
์๋ฐ์ฒ๋ผ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ๊ฐ์ถ ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ ์ด์ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋ค๋ ๋ง์ ์ฌ์ค์ด ์๋๋ค.
์ด๋ฒ item์์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํ์ํ(๋ค ์ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํด์ ํด์ผํ ) 3๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณธ๋ค.
๋ค ์ด ์ฐธ์กฐ(obsolete reference) : ํ๋ก๊ทธ๋จ์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด์ reference
1. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ ํด๋์ค์ ๋ฉ๋ชจ๋ฆฌ ๋์
public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack() {
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}
public Object pop() {
if (size == 0)
throw new EmptyStackException();
return elements[--size]; // ๋ฌธ์ : pop() ๋์์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ํ์ํ์ง ์์
}
private void ensureCapacity() {
if (elements.length == size)
elements = Arrays.copyOf(elements, 2 * size + 1);
}
}
์ ์ฝ๋ ์์ ์์, ๋ค ์ด ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ฒ๋๋ ์ฝ๋๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์ผ์ด๋๋ค.
pop()
๋ฉ์๋๋ size ๋ณ์๋ฅผ 1๋งํผ ๊ฐ์์ํค๊ณ , elements array๋ฅผ --size๋งํผ ๋ฐํํ๋ค.
ํ์ง๋ง, Stack
class๊ฐ elements
๋ฐฐ์ด์ ์ง์ ๊ฐ์ง๊ณ ์ ์ฅ์ ํ์ ๋ง๋ค์ด ์์๋ฅผ ๊ด๋ฆฌํ๋ค. ๋ฐ๋ผ์ elements
์ ์์๋ค์ด ๋ถํ์ํ ๊ฒ์ธ์ง ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ ์๊ฐ ์๋ค.
๊ทธ๋์ ์๊ธฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ ํด๋์ค๋ผ๋ฉด ํ๋ก๊ทธ๋๋จธ๋ ํญ์ ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ฃผ์ํด์ผ ํ๋ค.
public Object pop(){
if (size == 0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null; // ๋ค ์ด ์ฐธ์กฐ ํด์
return result;
}
2. ์บ์ ๋ฉ๋ชจ๋ฆฌ ๋์
WeakHashMap ์ฌ์ฉ
WeakHaspMap
์ key๋ฅผ ์ฐธ์กฐํ๋ reference๊ฐ ์์ผ๋ฉด, ํด๋น ํค๋ฅผ ์๋์ผ๋ก GC๊ฐ ๋ฒ๋ ค์ฃผ๋ HashMap
์ ํ ์ข
๋ฅ์ด๋ค.
์บ์ ์ธ๋ถ์์ ํค(key)๋ฅผ ์ฐธ์กฐํ๋ ๋์๋ง ์ํธ๋ฆฌ๊ฐ ์ด์ ์๋ ์บ์๊ฐ ํ์ํ ์ํฉ์ด๋ผ๋ฉด WeakHashMap
์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
๋ฏธ์ฌ์ฉ ์ํธ๋ฆฌ ๊ด๋ฆฌ
์บ์๋ฅผ ๋ง๋ค ๋ ๋ณดํต์ ์บ์ ์ํธ๋ฆฌ์ ์ ํจ ๊ธฐ๊ฐ์ ์ ํํ ์ ์ํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ง๋ ์๋ก ์ํธ๋ฆฌ์ ๊ฐ์น๋ฅผ ๋จ์ด๋จ๋ฆฌ๋ ๋ฐฉ์์ ํํ ์ฌ์ฉํ๋ค.
์ด๋ฐ ๋ฐฉ์์์๋ ์ฐ์ง ์๋ ์ํธ๋ฆฌ๋ฅผ ์ด๋ฐ๊ธ ์ฒญ์ํด์ค์ผ ํ๋ค.
Scheduled ThreadPoolExecutor
๊ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ฅผ ํ์ฉํ๊ฑฐ๋ ์บ์์ ์ ์ํธ๋ฆฌ๋ฅผ ์ถ๊ฐํ ๋ ๋ถ์ ์์
์ผ๋ก ์ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์งํํ๋ฉด ๋๋ค.
LinkedHashMap
์ removeEldestEntry
๋ฉ์๋๋ฅผ ์จ์ ํ์์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค.
3. ๋ฆฌ์ค๋ ํน์ ์ฝ๋ฐฑ ๋์
๋ฆฌ์ค๋(listener) ํน์ ์ฝ๋ฐฑ(callback) ๋ด์์๋ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ฝ๋ฐฑ์ ๋ฑ๋ก๋ง ํ๊ณ ๋ช
ํํ ํด์งํ์ง ์๋๋ค๋ฉด, ๋ญ๊ฐ ์กฐ์นํด์ฃผ์ง ์๋ ํ ์ฝ๋ฐฑ์ ๊ณ์ ์์ฌ๊ฐ ๊ฒ์ด๋ค. ์ด๋ด ๋ ์ฝ๋ฐฑ์ ์ฝํ ์ฐธ์กฐ(weak reference)๋ก ์ ์ฅํ๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ฆ์ ์๊ฑฐํด๊ฐ๋ค. ์๋ฅผ๋ค์ด WeakHashMap
์ ํค๋ก ์ ์ฅํ๋ฉด ๋๋ค.