item 76 lsucret - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
[item 76] ๊ฐ๋ฅํ ํ ์คํจ ์์์ ์ผ๋ก ๋ง๋ค๋ผ
์คํจ ์์์ ๋ฉ์๋
ํธ์ถ๋ ๋ฉ์๋๊ฐ ์คํจํ๋๋ผ๋ ํด๋น ๊ฐ์ฒด๋ ๋ฉ์๋ ํธ์ถ ์ ์ํ๊ฐ ์ ์ง๋๋ ํน์ฑ
์คํจ ์์์ ๋ฉ์๋๋ฅผ ์์ฑํ๋ ค๋ฉด
๋ถ๋ณ ๊ฐ์ฒด๋ก ์ค๊ณํ๋ค.
์คํจํ๋ฉด ์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง์ง ์์ ์ ์์ผ๋, ๊ธฐ์กด ๊ฐ์ฒด๊ฐ ๋ถ์์ ํ ์ํ์ ๋น ์ง๋ ์ผ์ ์๋ค.
๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
1. ๋งค๊ฐ๋ณ์์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ค.
// p.37 Stack ์ฐธ์กฐ
public Object pop() {
if (size == 0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null; // ๋ค ์ด ์ฐธ์กฐ ํด์
return result;
}
- ์ฒ์์ if๋ฌธ์์ size๊ฐ 0์ด๋ฉด ์์ธ๋ฅผ ๋์ง์ง๋ง ์ด ์ฝ๋๊ฐ ์์ด๋ ์คํ์ด ๋น์๋ค๋ฉด(๋ ๋นผ๋ผ๊ฒ ์์ผ๋ฉด) ์ฌ์ ํ ์์ธ๋ฅผ ๋์ง๋ค.
- ๊ทธ๋ฌ๋, ์คํ์ด ๋น์์ ๋ pop์ ํธ์ถํ๊ฒ ๋๋ฉด
ArrayOutOfBoundsException
์ด ๋ฐ์ํ๋๋ฐ, ์ถ์ํ ์์ค์ด ์ํฉ์ ์ด์ธ๋ฆฌ์ง ์๋๋ค.(item 73)
2. ์คํจํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋๋ฅผ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ฐ๊พธ๋ ์ฝ๋๋ณด๋ค ์์ ์์น์ํจ๋ค.
๊ณ์ฐ์ ์ํํ๊ธฐ ์ ์๋ ์ธ์์ ์ ํจ์ฑ์ ๊ฒ์ฌ ํ ์ ์๋ค๋ฉด, ์ํ๋ฅผ ๋ฐ๊พธ๊ธฐ ์ ์ ๋จผ์ ์คํจ์ํค๋ ์ ๋ต์ด๋ค.
ex) TreeMap์ ์์๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ๋ค์ด๊ฐ ์์น๋ฅผ ์ฐพ๊ณ , ํธ๋ฆฌ๋ฅผ ๋ณ๊ฒฝ ํ ๊ฒ์ด๋ค.
์ด ๋, ์๋ฑํ ํ์
์ ์์๋ฅผ ์ถ๊ฐํ ๋ค๋ฉด ์์น๋ฅผ ์ฐพ๋ ์ค์ ClassCastException
์ด ๋์ ธ์ง ๊ฒ์ด๋ค.
3. ์์ ๋ณต์ฌ๋ณธ์์ ์์ ์ํ ํ, ์์ ์ด ์ฑ๊ณตํ ํ ์๋ ๊ฐ์ฒด์ ๊ต์ฒดํ๋ค.
ex) ์ ๋ ฌ ๋ฉ์๋์์, ์ ๋ ฌ ์ํ ์ ์์๋ค์ ๋ฐฐ์ด์ ์ฎ๊ฒจ ๋ด๋ ๊ฒฝ์ฐ,
๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต๋ฌธ์์ ์์๋ค์ ํจ์ฌ ๋น ๋ฅด๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ์ฌ ์ฑ๋ฅ๋ ๋์์ง๋ฉฐ,
์ ๋ ฌ์ ์คํจํ๋๋ผ๋ ์
๋ ฅ ๋ฆฌ์คํธ๋ ๋ณํ์ง ์๋๋ค.
4. ๋ณต๊ตฌ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๋ณต๊ตฌ ์ฝ๋: ์์ ๋์ค ๋ฐ์ํ๋ ์คํจ๋ฅผ ๊ฐ๋ก์ฑ์ด ์์ ์ ์ํ๋ก ๋๋๋ ค์ค.
์ฃผ๋ก (๋์คํฌ ๊ธฐ๋ฐ์) ๋ด๊ตฌ์ฑ์ ๋ณด์ฅํด์ผ ํ๋ ์๋ฃ๊ตฌ์กฐ์ ์ฐ์ด๋ฉฐ, ์์ฃผ ์ฐ์ด๋ ๋ฐฉ์์ ์๋๋ค.
๋ง๋ฌด๋ฆฌ
- ์คํจ ์์์ฑ์ ๊ถ์ฅ๋๋ ๋๋ชฉ์ด๋, ํญ์ ๋ฌ์ฑํ ์ ์๋ ๊ฒ์ ์๋๋ค.
- ์คํจ ์์์ฑ์ ๋ ๋ฌ์ฑํด์ผ ํ๋ ๊ฒ๋ ์๋๋ค. ์คํจ ์์์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํ ๋น์ฉ์ด๋, ๋ณต์ก๋ ํฐ ์ฐ์ฐ์ด ํ์ํ ๊ฒฝ์ฐ๋ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฉ์๋ ๋ช ์ธ์ ๊ธฐ์ ํ ์์ธ๋ ์คํจ ์์์ฑ์ด ์ง์ผ์ ธ์ผ ํ๋๊ฒ ๊ธฐ๋ณธ ๊ท์น์ด๋ฉฐ, ์ด ๊ท์น์ ์งํค์ง ๋ชปํ๋ค๋ฉด ์คํจ ์์ ๊ฐ์ฒด ์ํ๋ฅผ API ์ค๋ช ์ ๋ช ์ํด์ผ ํ๋ค.
์ ๋ฆฌ
์คํจ ์์์ ์ด๋ ํธ์ถ๋ ๋ฉ์๋๊ฐ ์คํจํ๋๋ผ๋ ๊ฐ์ฒด๊ฐ ๊ธฐ์กด์ฒ๋ผ ์ ์ง๋๋ ํน์ฑ์ ๋งํฉ๋๋ค.
์คํจ ์์์ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๊ฐ์ฅ ์ฝ๊ฒ๋ ๋ถ๋ณ ๊ฐ์ฒด๋ก ์ค๊ณํ๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๊ณ
๊ฐ๋ณ ๊ฐ์ฒด์ ๊ฒฝ์ฐ์๋ ์ฝ๋ ์์ชฝ์ ๋จผ์ ๋งค๊ฐ๋ณ์์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ๋ ๋ฐฉ๋ฒ, ์คํจ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋๋ฅผ ๊ฐ์ฒด ์ํ ๋ณ๊ฒฝ๋ณด๋ค ๋จผ์ ์คํ์ํค๋ ๋ฐฉ๋ฒ, ์์ ๋ณต์ฌ๋ณธ์์ ์์
ํ ๊ธฐ์กด ๊ฐ์ฒด์ ๊ต์ฒดํ๋ ๋ฐฉ๋ฒ, ๋ณต๊ตฌ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์ ์คํจ ์์์ฑ์ ์งํค๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ์ง๋ง, ์ฑ๋ฅ์ ๋น์ฉ์ ๋ฌธ์ ๊ฐ ํฌ๋ค๋ฉด ์งํค์ง ์์ ์๋ ์์ต๋๋ค.
๊ทธ๋๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฉ์๋ ๋ช
์ธ์ ๊ธฐ์ ํ ์์ธ๋ ์คํจ ์์์ฑ์ด ์ง์ผ์ ธ์ผ ํ๋๊ฒ ๊ท์น์ด๋ฉฐ, ๊ทธ๋ ์ง ๋ชปํ ๊ฒฝ์ฐ ์ค๋ช
์ ๋ช
์ํด์ผ ํฉ๋๋ค.