๐ฏ ์์ดํ 76. ๊ฐ๋ฅํ ํ ์คํจ ์์์ ์ผ๋ก ๋ง๋ค๋ผ.
์ผ๋ฐํํด ์ด์ผ๊ธฐํ๋ฉด, ํธ์ถ๋ ๋ฉ์๋๊ฐ ์คํจํ๋๋ผ๋ ํด๋น ๊ฐ์ฒด๋ ๋ฉ์๋ ํธ์ถ ์ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ค.
- ๋ฉ์๋๋ฅผ ์คํจ ์์์ ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ
1๏ธโฃ ๋ถ๋ณ ๊ฐ์ฒด
๋ถ๋ณ ๊ฐ์ฒด์ ์ํ๋ ์์ฑ ์์ ์ ๊ณ ์ ๋์ด ์ ๋ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ํด๋์ค๋ฅผ ๋ถ๋ณ์ผ๋ก ๋ง๋ค๊ธฐ ์ํ 5๊ฐ์ง ๊ท์น
1.๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฉ์๋(setter)๋ฅผ ์ ๊ณตํ์ง ์๋๋ค.
2.ํด๋์ค๋ฅผ ํ์ฅํ ์ ์๋๋ก ํ๋ค.
3.๋ชจ๋ ํ๋๋ฅผ final๋ก ์ ์ธํ๋ค.
4.๋ชจ๋ ํ๋๋ฅผ private์ผ๋ก ์ ์ธํ๋ค.
5.์์ ์ธ์๋ ๋ด๋ถ์ ๊ฐ๋ณ ์ปดํฌ๋ํธ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
2๏ธโฃ ๋งค๊ฐ๋ณ์์ ์ ํจ์ฑ ๊ฒ์ฌ
๊ฐ์ฒด์ ๋ด๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ์ ์ฌ์ ์์ธ์ ๊ฐ๋ฅ์ฑ ๋๋ถ๋ถ์ ๊ฑธ๋ฌ๋ผ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
public Object pop(){
if(size == 0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null; // ๋ค ์ด ์ฐธ์กฐ ํด์
return result;
}
3๏ธโฃ ๊ฐ์ฒด์ ์์ ๋ณต์ฌ๋ณธ์์ ์์
์ ์ํํ ๋ค์, ์์
์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ์๋ ๊ฐ์ฒด์ ๊ต์ฒด
4๏ธโฃ ์์
๋์ค ๋ฐ์ํ๋ ์คํจ๋ฅผ ๊ฐ๋ก์ฑ๋ ๋ณต๊ตฌ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์์
์ ์ํ๋ก ๋๋๋ฆฌ๋ ๋ฐฉ๋ฒ
์คํจ ์์์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋๋ ๋๋ชฉ์ด์ง๋ง ํญ์ ๋ฌ์ฑํ ์ ์๋ ๊ฒ์ ์๋๋ค.
๋ ์ค๋ ๋๊ฐ ๋๊ธฐํ ์์ด ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋์์ ์์ ํ๋ค๋ฉด ๊ทธ ๊ฐ์ฒด์ ์ผ๊ด์ฑ์ด ๊นจ์ง ์ ์๋ค. ๋ฐ๋ผ์ ConcurrentModificationException
์ ์ก์๋๋ค๊ณ ํด์ ๊ทธ ๊ฐ์ฒด๊ฐ ์ฌ์ ํ ์ธ ์ ์๋ ์ํ๋ผ๊ณ ๊ฐ์ ํด์๋ ์๋๋ค. ํํธ, Error
๋ ๋ณต๊ตฌํ ์ ์์ผ๋ฏ๋ก AssertionError
์ ๋ํด์๋ ์คํจ ์์์ ์ผ๋ก ๋ง๋ค๋ ค๋ ์๋์กฐ์ฐจ ํ ํ์๊ฐ ์๋ค. ์คํจ ์์์ ์ผ๋ก ๋ง๋ค ์ ์๋๋ผ๋ ํญ์ ๊ทธ๋ฆฌ ํด์ผ ํ๋ ๊ฒ๋ ์๋๋ค. ์คํจ ์์์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํ ๋น์ฉ์ด๋ ๋ณต์ก๋๊ฐ ์์ฃผ ํฐ ์ฐ์ฐ๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์คํจ ์์ ๊ฐ์ฒด ์ํ๋ฅผ API ์ค๋ช
์ ๋ช
์ํด์ผ ํ๋ค.
์ฐธ๊ณ ์๋ฃ
Joshua Bloch, ใEffective Java 3/Eใ, ๊ฐ์๋งต์ ์ฎ๊น, ํ๋ก๊ทธ๋๋ฐ์ธ์ฌ์ดํธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=