item 75 SeungminLee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
Effective Java 3e item 75 ์์ธ์ ์์ธ ๋ฉ์์ง์ ์คํจ ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ด์ผ๋ผ๋ฅผ ์์ฝํ ๋ด์ฉ์ ๋๋ค.
์์ธ๋ฅผ ์ก์ง ๋ชปํด ํ๋ก๊ทธ๋จ์ด ์คํจํ๋ฉด ์๋ฐ ์์คํ
์ ๊ทธ ์์ธ์ ์คํ์ถ์ Stack Trace ์ ๋ณด๋ฅผ ์๋์ผ๋ก ์ถ๋ ฅํ๋ค. ์คํ์ถ์ ์ ์์ธ ๊ฐ์ฒด์ toString ๋ฉ์๋๋ฅผ ํธ์ถํด ์ป๋ ๋ฌธ์์ด๋ก ์์ธ์ ํด๋์ค ์ด๋ฆ ๋ค์ ์์ธ ๋ฉ์์ง๊ฐ ๋ถ๋ ํํ์ด๋ค. ์ด ์ ๋ณด๊ฐ ์คํจ์์ธ์ ๋ถ์ํด์ผ ํ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ป์ ์ ์๋ ์ ์ผํ ์ ๋ณด์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ฐ๋ผ์ ์์ธ์ toString ๋ฉ์๋์ ์คํจ ์์ธ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ๋ฅํ ๋ง์ด ๋ด์ ๋ฐํธ๋ํ๋ ์ผ์ ์์ฃผ ์ค์ํ๋ค. ๋ฌ๋ฆฌ ๋งํ๋ฉด, ์ฌํ ๋ถ์์ ์ํด ์คํจ ์๊ฐ์ ์ํฉ์ ์ ํํ ํฌ์ฐฉํด ์์ธ์ ์์ธ ๋ฉ์์ง์ ๋ด์์ผ ํ๋ค.
์คํจ ์๊ฐ์ ํฌ์ฐฉํ๋ ค๋ฉด ๋ฐ์ํ ์์ธ์ ๊ด์ฌ๋ ๋ชจ๋ ๋งค๊ฐ๋ณ์์ ํ๋์ ๊ฐ์ ์คํจ ๋ฉ์์ง์ ๋ด์์ผ ํ๋ค.
- ์๋ฅผ ๋ค์ด IndexOuOfBoundsException์ ์์ธ ๋ฉ์์ง๋ ๋ฒ์์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ, ๊ทธ๋ฆฌ๊ณ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๋ค๋ ์ธ๋ฑ์ค ๊ฐ ๋ฑ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๋ด์์ผ ํ๋ค. ์ด๋ค์ ๋ชจ๋ ๋ค๋ฅธ ์์ธ ์ํฉ๋ค์ ์์ธ์ด ๋๋ฏ๋ก, ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ฉด ๋ฌด์์ ๊ณ ์ณ์ผ ํ ์ง ๋ถ์ํ๋๋ฐ ํฐ ๋์์ด ๋๋ค.
๋ณด์๊ณผ ๊ด๋ จํ ์ ๋ณด๋ ์ฃผ์ํด์ ๋ค๋ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์คํ ์ถ์ ์ ์์ธ ๋ฉ์์ง์ ๋น๋ฐ๋ฒํธ๋ ์ํธ ํค ๊ฐ์ ์ ๋ณด๊น์ง ๋ด์์๋ ์๋๋ค.
- ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ด์์ผ ํ์ง๋ง ์ฅํฉํ ํ์ ์๋ค. ๋ฌธ์ ๋ฅผ ๋ถ์ํ๋ ์ฌ๋์ ์คํ ์ถ์ ๋ฟ ์๋๋ผ ๊ด๋ จ ๋ฌธ์์ ์์ค์ฝ๋๋ฅผ ํจ๊ป ์ดํด๋ณด๊ธฐ ๋๋ฌธ์ด๋ค.
์คํ ์ถ์ ์๋ ์์ธ๊ฐ ๋ฐ์ํ ๋ฉ์๋๋ค์ ํ์ผ ์ด๋ฆ๊ณผ ์ค๋ฒํธ๊น์ง ์ ํํ ๊ธฐ๋ก๋์ด ์๋ค.
- ์์ธ์ ์์ธ ๋ฉ์์ง์ ์ต์ข ์ฌ์ฉ์์์ธ ๋ณด์ฌ์ค ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํผ๋ํด์๋ ์๋๋ค.
์ต์ข ์ฌ์ฉ์์๊ฒ๋ ์น์ ํ ์๋ด ๋ฉ์์ง๋ ๋ณด์ฌ์ค์ผ ํ๋ ๋ฐ๋ฉด, ์์ธ ๋ฉ์์ง๋ ๊ฐ๋ ์ฑ๋ณด๋ค๋ ๋ด๊ธด ๋ด์ฉ์ด ํจ์ฌ ์ค์ํ๋ค.
์์ธ ๋ฉ์์ง์ ์ฃผ ์๋น์ธต์ ๋ฌธ์ ๋ฅผ ๋ถ์ํ ํ๋ก๊ทธ๋๋จธ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ ์ต์ข ์ฌ์ฉ์์ฉ ๋ฉ์์ง๋ ํ์ง์ด๋ก ๋ฒ์ญํด์ฃผ๊ธฐ๋ ํ์ง๋ง, ์์ธ ๋ฉ์์ง๋ ๊ทธ๋ฐ ์ผ์ด ๊ฑฐ์ ์๋ค.
- ์คํจ๋ฅผ ์ ์ ํ ํฌ์ฐฉํ๋ ค๋ฉด ํ์ํ ์ ๋ณด๋ฅผ ์์ธ ์์ฑ์์์ ๋ชจ๋ ๋ฐ์์ ์์ธ ๋ฉ์์ง๊น์ง ๋ฏธ๋ฆฌ ์์ฑํด ๋๋ ๋ฐฉ๋ฒ๋ ๊ด์ฐฎ๋ค.
/**
* IndexOutOfBoundsException์ ์์ฑํ๋ค
* @param lowerBound ์ธ๋ฑ์ค์ ์ต์๊ฐ
* @param upperBound ์ธ๋ฑ์ค์ ์ต๋๊ฐ + 1
* @param index ์ธ๋ฑ์ค์ ์ค์ ฏ๊ฐ
*/
public IndexOutOfBoundsException(int lowerBound, int upperBound, int index){
// ์คํจ๋ฅผ ํฌ์ฐฉํ๋ ์์ธ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ค.
super(String.format("์ต์๊ฐ: %d , ์ต๋๊ฐ: %d, ์ธ๋ฑ์ค: %d", lowerBound, upperBound, index));
// ํ๋ก๊ทธ๋จ์์ ์ด์ฉํ ์ ์๋๋ก ์คํจ ์ ๋ณด๋ฅผ ์ ์ฅํด๋๋ค.
this.lowerBound = lowerBound;
this.upperBound = upperBound;
this.index = index;
}
Java9 ์์๋ IndexOutOfBoundsException์ ๋๋์ด ์ ์ ์ธ๋ฑ์ค ๊ฐ์ ๋ฐ๋ ์์ฑ์๊ฐ ์ถ๊ฐ๋์๋ค. ํ์ง๋ง ์์ฝ๊ฒ๋ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ๊น์ง ๋ฐ์ง๋ ์๋๋ค. ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด ์กฐ์ธ์ ์ ๊ทน ์์ฉํ์ง๋ ์์ง๋ง ๋๋ ๊ฐ๋ ฅํ ๊ถ์ฅํ๋ ๋ฐ์ด๋ค. ์ด๋ ๊ฒ ํด๋๋ฉด ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์ง๋ ์์ธ๋ ์์ฐ์ค๋ฝ๊ฒ ์คํจ๋ฅผ ๋ ์ ํฌ์ฐฉํ๋ค.
๋ํ ๊ณ ํ์ง์ ์์ธ ๋ฉ์์ง๋ฅผ ๋ง๋ค์ด๋ด๋ ์ฝ๋๋ฅผ ์์ธ ํด๋์ค ์์ผ๋ก ๋ชจ์์ฃผ๋ ํจ๊ณผ๋ ์์ด, ํด๋์ค ์ฌ์ฉ์๊ฐ ๋ฉ์์ง๋ฅผ ๋ง๋๋ ์์ ์ ์ค๋ณตํ์ง ์์๋ ๋๋ค.
์์ธ๋ ์คํจ์ ๊ด๋ จํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ ์ ๊ทผ์ ๋ฉ์๋๋ฅผ ์ ์ ํ ์ ๊ณตํ๋ ๊ฒ์ด ์ข๋ค. ํฌ์ฐฉํ ์คํจ์ ๋ณด๋ ์์ธ ์ํฉ์ ๋ณต๊ตฌํ๋๋ฐ ์ ์ฉํ ์ ์์ผ๋ฏ๋ก ์ ๊ทผ์ ๋ฉ์๋๋ ๋น๊ฒ์ฌ ์์ธ๋ณด๋ค๋ ๊ฒ์ฌ ์์ธ์์ ๋ ๋น์ ๋ฐํ๋ค. ๋น๊ฒ์ฌ ์์ธ์ ์์ธ์ ๋ณด์ ํ๋ก๊ทธ๋จ์ ์ผ๋ก ์ ๊ทผํ๊ธธ ์ํ๋ ํ๋ก๊ทธ๋๋จธ๋ ๋๋ฌผ๊ฒ ์ง๋ง toString์ด ๋ฐํํ๋ ๊ฐ์ ํฌํจ๋ ์ ๋ณด๋ฅผ ์ป์ด์ฌ ์ ์๋ API๋ฅผ ์ ๊ณตํ์๋ ์ผ๋ฐ ์์น์ ๋ฐ๋ฅธ๋ค๋ ๊ด์ ์์, ๋น๊ฒ์ฌ ์์ธ๋ผ๋ ์์ธ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ๋ ์ ๊ทผ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ผ๊ณ ๊ถํ๊ณ ์ถ๋ค.