item 7 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
์์ดํ
7 ๋ค ์ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํด์ ํ๋ผ
- GC๋ฅผ ์ง์ํ๋ ์ธ์ด๋ก ๊ฐ๋ฐํ๋ค๊ณ ํด์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ ์ด์ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋ค๊ณ ์คํดํ ์ ์๋๋ฐ, ์ ๋ ์ฌ์ค์ด ์๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์ผ์ด๋๋ ์์น๋ ์ด๋์ธ๊ฐ?
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];
}
/**
* ์์๋ฅผ ์ํ ๊ณต๊ฐ์ ์ ์ด๋ ํ๋ ์ด์ ํ๋ณดํ๋ค.
* ๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ๋๋ ค์ผ ํ ๋๋ง๋ค ๋๋ต ๋ ๋ฐฐ์ฉ ๋๋ฆฐ๋ค.
*/
private void ensureCapacity() {
if (elements.length == size)
elements = Arrays.copyOf(elements, 2 * size + 1);
}
}
- ์ ์ฝ๋๋ ์คํ์ด ์ปค์ก๋ค๊ฐ ์ค์ด๋ค์์ ๋ ์คํ์์ ๊บผ๋ด์ง ๊ฐ์ฒด๋ค์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ํ์ํ์ง ์๋๋ค.
ํ๋ก๊ทธ๋จ์์ ๊ทธ ๊ฐ์ฒด๋ค์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋๋ผ๋ ๋ง์ด๋ค.
์ด ์คํ์ด ๊ทธ ๊ฐ์ฒด๋ค์ ๋ค ์ด ์ฐธ์กฐ(obsolete reference)๋ฅผ ์ฌ์ ํ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- GC๋ ๋์ ๊ฐ์ฒด์ ํ๋๋ผ๋ ์ฐธ์กฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ทธ ๊ฐ์ฒด ๋ฟ ์๋๋ผ ๊ทธ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ํ์ํด๊ฐ์ง ๋ชปํ๋ค.
๊ฐ๋จํ ํด๋ฒ์ ํด๋น ์ฐธ์กฐ๋ฅผ ๋ค ์ผ์ ๋ null ์ฒ๋ฆฌ(์ฐธ์กฐํด์ )ํ๋ฉด ๋๋ค.
null ์ฒ๋ฆฌ๊ฐ ์ต์ ์ธ๊ฐ?
- null ์ฒ๋ฆฌ๋ฅผ ๊ผผ๊ผผํ ํ๋ ๊ฒ๋ ์ด์ ์ด ์๊ธด ํ๋ค.(์๋ชป๋ ์ฐธ์กฐ NPE๋ก ์กฐ๊ธฐ ๋ฐ๊ฒฌํ ์๋ ์๋ค) ์
ํ์ง๋ง ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ค ์ฐ์ง๋ง์ ์ผ์ผ์ด null ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ฉ ๋ฐ๋์งํ ๋ฐฉ๋ฒ์ ์๋๋ค.
๊ทธ๋ด ํ์๋ ์๊ณ ํ๋ก๊ทธ๋จ์ ํ์ ์ด์์ผ๋ก ์ง์ ๋ถํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ null ์ฒ๋ฆฌํ๋ ์ผ์ ์์ธ์ ์ธ ๊ฒฝ์ฐ์ฌ์ผ ํ๋ค.
๋ค ์ด ์ฐธ์กฐ๋ฅผ ํด์ ํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๊ทธ ์ฐธ์กฐ๋ฅผ ๋ด์ ๋ณ์๋ฅผ ์ ํจ ๋ฒ์(socpe) ๋ฐ์ผ๋ก ๋ฐ์ด๋ด๋ ๊ฒ
์ด๋ค.
ํต์ฌ์ ๋ฆฌ
- ๋ฉ๋ชจ๋ฆฌ ๋์๋ ๊ฒ์ผ๋ก ์ ๋๋ฌ๋์ง ์์ ์์คํ
์ ์๋
๊ฐ ์ ๋ณตํ๋ ์ฌ๋ก๋ ์๋ค.
์ด๋ฐ ๋์๋ ์ฒ ์ ํ ์ฝ๋ ๋ฆฌ๋ทฐ๋ ํ ํ๋กํ์ผ๋ฌ ๊ฐ์ ๋๋ฒ๊น
๋๊ตฌ๋ฅผ ๋์ํด์ผ๋ง ๋ฐ๊ฒฌ๋๊ธฐ๋ ํ๋ค.
๊ทธ๋์ ์ด๋ฐ ์ข
๋ฅ์ ๋ฌธ์ ๋ ์๋ฐฉ๋ฒ์ ์ตํ๋๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ค.