Chapter 10 ์์ธ
์์ธ๋ฅผ ์ ๋๋ก ํ์ฉํ๋ค๋ฉด ํ๋ก๊ทธ๋จ์ ๊ฐ๋ ์ฑ, ์ ๋ขฐ์ฑ, ์ ์ง๋ณด์์ฑ์ด ๋์์ง์ง๋ง ๋ฐ๋๋ก ์๋ชป ์ฌ์ฉํ๋ฉด ๋ฐ๋์ ํจ๊ณผ๋ง ๋ํ๋๋ค.
Item 69 ์์ธ๋ ์ง์ง ์์ธ ์ํฉ์์๋ง ์ฌ์ฉํ๋ผ
์์ธ๋ ์์ธ์ํฉ์์๋ง ์ฌ์ฉํด์ผ ํ๋ฉฐ ์ ๋๋ก ์ผ์์ ์ธ ์ ์ด ํ๋ฆ์ฉ์ผ๋ก ์ฐ์ฌ์๋ ์๋๋ค.
์๋ฅผ ๋ค๋ฉด ์ผ๋ฐ์ ์ธ ๋ฐ๋ณต๋ฌธ์ ๊ฒฝ์ฐ try-catch ๋ฌธ์ ๋ฃ์ผ๋ฉด JVM ์ด ์ ์ฉ ๊ฐ๋ฅํ ์ต์ ํ๊ฐ ์ ํ๋๋ค. (์ฑ๋ฅ์ด 2๋ฐฐ์ด์ ๋๋ฆผ)
์ ์ค๊ณ๋ API ๋ผ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์ ์์ ์ธ ์ ์ด์ ํ๋ฆ์์ ์์ธ๋ฅผ ์ฌ์ฉํ ์ผ์ด ์๊ฒ ํด์ผ ํ๋ค.
Item 70 ๋ณต๊ตฌํ ์ ์๋ ์ํฉ์๋ ๊ฒ์ฌ ์์ธ๋ฅผ, ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ์๋ ๋ฐํ์ ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ
์๋ฐ๋ ๋ฌธ์ ์ํฉ์ ์๋ฆฌ๋ ํ์ (throwable) ์ผ๋ก ๊ฒ์ฌ ์์ธ, ๋ฐํ์ ์์ธ, ์๋ฌ ์ด๋ ๊ฒ ์ธ๊ฐ์ง ์ ํ์ ์ ๊ณตํ๋ค.
ํธ์ถํ๋ ์ชฝ์์ ๋ณต๊ตฌํด์ผ ํ๋ค ์ฌ๊ฒจ์ง๋ ์ํฉ์ด๋ผ๋ฉด ๊ฒ์ฌ ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ (๊ฒ์ฌ์ ๋น๊ฒ์ฌ ์์ธ๋ฅผ ๊ตฌ๋ถํ๋ ๊ธฐ๋ณธ ๊ท์น์ด๋ค)
ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๋ฅผ ๋ํ๋ผ๋๋ ๋ฐํ์ ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ.
๋๋ถ๋ถ์ ๋น ๊ฒ์ฌ throwable
์ ๋ชจ๋ RuntimeException
์ ํ์ ํด๋์ค์ฌ์ผ ํ๋ค.
throwable
ํด๋์ค๋ ๋๋ถ๋ถ์ ์ค๋ฅ๋ฅผ ์์ธํ ๊ธฐ์ ํ์ง ์๋๋ฐ ์ด๋ ๋ค์ ๋งํด JVM ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ๋ณ๋ก ๋ฉ์ธ์ง ํฌ๋งท์ด ๋ค๋ฅผ์ ์๋ค๋ ๋ป์ด๋ค.
๋๋๋ก์ด๋ฉด throwable
์ ์ ์ํ์ง ์๋๋ก ํ์
Item 71 ํ์ ์๋ ๊ฒ์ฌ ์์ธ ์ฌ์ฉ์ ํผํ๋ผ
๊ผญ ํ์ํ ๊ณณ์์๋ง ์ฌ์ฉํ๋ค๋ฉด ๊ฒ์ฌ ์์ธ๋ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ฌ์ฃผ์ง๋ง, ๋จ์ฉํ๋ฉด ์ฐ๊ธฐ ๊ณ ํต์ค๋ฌ์ด API ๋ฅผ ๋ณ๋๋ค.
API ํธ์ถ์๊ฐ ์์ธ ์ํฉ์์ ๋ณต์ํ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ๋น๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง์.
Item 72 ํ์ค ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ
ํ์ค ์์ธ๋ฅผ ์ฌ์ฌ์ฉ ํ์ฌ ์ป๋ ์ด๋์ ์ตํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ๋ค๋ ์ ์ด๋ค.
๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์์ธ๋ IllegalArgumentException
์ด๋ค.
ํธ์ถ์๊ฐ ์ธ์๋ก ๋ถ์ ์ ํ ๊ฐ์ ๋๊ธธ ๋ ๋์ง๋ ์์ธ๋ก ์ฌ์ฉํ๋ค.
IllegalStateException
๋ ์์ฃผ ์ฌ์ฉ๋๋ค. ์ด ์์ธ๋ ๋์ ๊ฐ์ฒด์ ์ํ๊ฐ ํธ์ถ๋ ๋ฉ์๋๋ฅผ ์ํํ๊ธฐ์ ์ ํฉํ์ง ์์ ๋ ์ฃผ๋ก ๋์ง๋ค.
Exception
RuntimeException
Throwable
Error
๋ฑ์ ์ง์ ์ฌ์ฌ์ฉ ํ์ง ๋ง์
์ด ํด๋์ค๋ ์ถ์ ํด๋์ค๋ผ๊ณ ์๊ฐํ๋ฉฐ ๋ค๋ฅธ ์์ธ๋ค์ ์์ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ฑ๊ฒฉ์ ์์ธ๋ค์ ๋ํด์ ํฌ๊ด์ ์ผ๋ก ์ ์ฉ๋์ด ์์ ์ ์ผ๋ก ํ
์คํ๊ธฐ ์ด๋ ต๋ค.
์๋๋ ์ฃผ์ ์ฌ์ฉ๋๋ ์์ธ ์ ํ์ ์ ๋ฆฌํ ๊ฒ์ด๋ค.
์์ธ | ์ฃผ์ ์ฐ์ |
---|---|
IllegalArgumentException | ํ์ฉํ์ง ์๋ ๊ฐ์ด ์ธ์๋ก ๊ฑด๋ค์ก์ ๋ (null์ ๋ฐ๋ก NullPointerException์ผ๋ก ์ฒ๋ฆฌ) |
IllegalStateException | ๊ฐ์ฒด๊ฐ ๋ฉ์๋๋ฅผ ์ํํ๊ธฐ์ ์ ์ ํ์ง ์์ ์ํ์ผ ๋ |
NullPointerException | null์ ํ์ฉํ์ง ์๋ ๋ฉ์๋์ null์ ๊ฑด๋ธ์ ๋ |
IndexOutOfBoundsException | ์ธ๋ฑ์ค๊ฐ ๋ฒ์๋ฅผ ๋์ด์ฐ์ ๋ |
ConcurrentModificationException | ํ์ฉํ์ง ์๋ ๋์ ์์ ์ด ๋ฐ๊ฒฌ๋์ ๋ |
UnsupportedOperationException | ํธ์ถํ ๋ฉ์๋๋ฅผ ์ง์ํ์ง ์์ ๋ |
Item 73 ์ถ์ํ ์์ค์ ๋ง๋ ์์ธ๋ฅผ ๋์ง๋ผ
๋ฉ์๋๊ฐ ์ ์์ค์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์๊ณ ๋ฐ๊นฅ์ผ๋ก ์ ํํด๋ฒ๋ฆด ๋ ๋ด๋ถ๊ตฌํ ๋ฐฉ์์ ๋๋ฌ๋ด์ด ์ ๋ ๋ฒจ์ API ๋ฅผ ์ค์ผ์ํจ๋ค.
์ด ๋ฌธ์ ๋ฅผ ํผํ๋ ค๋ฉด ์์ ๊ณ์ธต์์๋ ์ ์์ค์ ์์ธ๋ฅผ ์ก์ ์์ ์ ์ถ์ํ ์์ค์ ๋ง๋ ์์ธ๋ก ๋์ ธ์ผ ํ๋ค. (Exception translation : ์์ธ ๋ฒ์ญ)
ํ์ง๋ง ์์ธ๋ฒ์ญ์ ์ฐ์ํ ๋ฐฉ๋ฒ์ด๋ ๋ฌดํฑ๋๊ณ ์์ธ๋ฅผ ์ ํํ๋๊ฒ์ ์ํํ๋ ๋ช ์ฌํ๋๋ก ํ์.
Item 74 ๋ฉ์๋๊ฐ ๋์ง๋ ๋ชจ๋ ์์ธ๋ฅผ ๋ฌธ์ํ ํ๋ผ
๊ฒ์ฌ ์์ธ๋ ํญ์ ๋ฐ๋ก๋ฐ๋ก ์ ์ธํ๊ณ , ๊ฐ ์์ธ๊ฐ ๋ฐ์ํ๋ ์ํฉ์ ์๋ฐ๋
์ @throw
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํํ ๋ฌธ์ํ ํ์
๋ฉ์๋๊ฐ ๋์ง ์ ์๋ ์์ธ๋ฅผ @throws ํ๊ทธ๋ก ๋ฌธ์ํํ๋ ๋น๊ฒ์ฌ ์์ธ๋ ๋ฉ์๋ ์ ์ธ์ throws ๋ชฉ๋ก์ ๋ฃ์ง ๋ง์
ํ ํด๋์ค์ ์ ์๋ ๋ง์ ๋ฉ์๋๊ฐ ๊ฐ์ ์ด์ ๋ก ๊ฐ์ ์์ธ๋ฅผ ๋์ง๋ค๋ฉด ๊ทธ ์์ธ๋ฅผ ๊ฐ๊ฐ์ ๋ฉ์๋๊ฐ ์๋ ํด๋์ค ์ค๋ช
์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
์ด๋ NullPointerException
์ด ๊ฐ์ฅ ํํ ์ฌ๋ก์ด๋ค.
Item 75 ์์ธ์ ์์ธ ๋ฉ์์ง์ ์คํจ ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ด์ผ๋ผ
์คํจ ์๊ฐ์ ํฌ์ฐฉํ๋ ค๋ฉด ๋ฐ์ํ ์์ธ์ ๊ด๋ จ๋ ๋ชจ๋ ๋งค๊ฐ๋ณ์์ ํ๋๊ฐ์ ์คํจ ๋ฉ์ธ์ง์ ๋ด์์ผ ํ๋ค.
์๋ฅผ ๋ค๋ฉด IndexOutOfBoundsException
์ ์์ธ ๋ฉ์ธ์ง๋ ๋ฒ์์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๋ค๋ ์ธ๋ฑ์ค ๊ฐ๋ฑ์ ์ ๊ณตํด์ค์ผ ํ๋ค. (๋ฌผ๋ก ๋ณด์์ ๋ณด๊ฐ์ ๊ฒ๋ค์ ์์ธ๋ค)
์คํจ์ ๋ฉ์์ง๋ฅผ ์ ์ ํ ํฌ์ฐฉํ๋ ค๋ฉด ํ์ํ ์ ๋ณด๋ฅผ ์์ธ ์์ฑ์์์ ๋ชจ๋ ๋ฐ์์ ์์ธ ๋ฉ์ธ์ง๊น์ง ๋ฏธ๋ฆฌ ์์ฑํด ๋๋ ๋ฐฉ๋ฒ๋ ๊ด์ฐฎ๋ค.
์๋ฅผ๋ค๋ฉด ํ์ฌ์ IndexOutOfBoundsException
์์ฑ์๋ String ๋ ๋ฐ์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํด๋ ์ข๋ค.
/**
* IndexOutOfBoundsException์ ์์ฑํ๋ค. *
* @param lowerBound ์ธ๋ฑ์ค์ ์ต์๊ฐ
* @param upperBound ์ธ๋ฑ์ค์ ์ต๋๊ฐ + 1 * @param index ์ธ๋ฑ์ค์ ์ค์ ฏ๊ฐ
*/
public IndexOfOutOfBoundsException(int lowerBound, int upperBound, int index) {
// ์คํจ๋ฅผ ํฌ์ฐฉํ๋ ์์ธ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ค.
super(String.format("์ต์๊ฐ: %d, ์ต๋๊ฐ: %d, ์ธ๋ฑ์ค: %d", lowerBound, upperBound, index));
// ํ๋ก๊ทธ๋จ์์ ์ด์ฉํ ์ ์๋๋ก ์คํจ ์ ๋ณด๋ฅผ ์ ์ฅํด๋๋ค.
this.lowerBound = lowerBound;
this.upperBound = upperBound;
this.index = index;
}
Item 76 ๊ฐ๋ฅํ ํ ์คํจ ์์์ ์ผ๋ก ๋ง๋ค๋ผ
ํธ์ถ๋ ๋ฉ์๋๊ฐ ์คํจํ๋๋ผ๋ ํด๋น ๊ฐ์ฒด๋ ๋ฉ์๋ ํธ์ถ ์ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ค.
์ด๋ฌํ ํน์ฑ์ ์คํจ ์์์ (failure-atomic) ์ด๋ผ๊ณ ํ๋ค.
๋ฉ์๋๋ฅผ ์คํจ ์์์ ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ถ๋ณ ๊ฐ์ฒด๋ก ์ค๊ณํ๋ ๊ฒ์ด๋ค.
๋ถ๋ณ ๊ฐ์ฒด๋ ํ์์ ์ผ๋ก ์คํจ ์์์ ์ด๋ฉฐ ๋ฉ์๋๊ฐ ์คํจํ๋ฉด ์๋ก์ด ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง์ง๋ ์์์ ์์ผ๋ ๊ธฐ์กด์ ๊ฐ์ฒด๊ฐ ๋ถ์์ ํ ์ํ์ ๋น ์ง๋ ์ผ์ ์๋ค.
๋ํ ๊ฐ๋ณ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์คํจ ์์์ ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ด ์์ ์ํ์ ์์ ๋งค๊ฐ๋ณ์์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ๊ฒ์ด๋ค.
public Object pop() {
if (size == 0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null;
return result;
}
์์ ๋ณต์ฌ๋ณธ์์ ์์ ์ ์ํํ ํ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ์๋ ๊ฐ์ฒด์ ๊ต์ฒดํ๋ ๊ฒ์ด๋ค.
๋ฉ์๋ ๋ช
์ธ์ ๊ธฐ์ ํ ์์ธ๋ผ๋ฉด ์ค๋ น ์์ธ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๊ฐ์ฒด์ ์ํ๋ ๋ฉ์๋ ํธ์ถ์ ๊ณผ ๋๊ฐ์ด ์ ์ง๋์ด์ผ ํ๋ค๋๊ฒ์ด ๊ธฐ๋ณธ ๊ท์น์ด๋ค.
์ด ๊ท์น์ด ์ง์ผ์ง์ง ์๋๋ค๋ฉด API ์ค๋ช
์ ๋ช
์ํด์ผ ํ๋ค.
Item 77 ์์ธ๋ฅผ ๋ฌด์ํ์ง ๋ง๋ผ
๊ฐํน ์๋ ์ฝ๋ ์ฒ๋ผ try-catch
๊ตฌ๋ฌธ์์ catch
๋ธ๋ญ์ ๋น์๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
try {
/* statement */
} catch(SomeException e) {
}
์ด๋ catch
๋ธ๋ญ์ ๋น์๋๋ฉด ์กด์ฌํ ์ด์ ๊ฐ ์์ผ๋ฉฐ ์๋ฌ๊ฐ ๋ฐ์ํด๋ ์์ง ๋ชปํ๊ฒ ํ๋๊ฒ๊ณผ ๊ฐ์ผ๋ ๋ฐ๋์ ์์ ํด์ผ ํ๋ค.
์์ธ๋ฅผ ๋ฌด์ํ๊ธฐ๋ก ํ๋ค๋ฉด catch
๋ธ๋ญ ์์ ๊ทธ๋ ๊ฒ ๊ฒฐ์ ํ ์ด์ ์ ๋ํด์ ์ฃผ์์ผ๋ก ๋จ๊ธฐ๊ณ ์์ธ ๋ณ์์ ์ด๋ฆ๋ ignored
๋ก ๋ฐ๊ฟ๋๋๋ก ํ์.
Future<Integer> f = exec.submit(planarMap::chromaticNumber);
int numColor = 4 // ๊ธฐ๋ณธ๊ฐ. ์ด๋ค ์ง๋๋ผ๋ ์ด ๊ฐ์ด๋ฉด ์ถฉ๋ถํ๋ค.
try {
numColor = f.get(1L, TimeUnit.SECONDS);
} catch (TimeoutException | ExcutionException ignored) {
// ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๋ค (์์ ์๋ฅผ ์ต์ํํ๋ฉด ์ข์ง๋ง, ํ์๋ ์๋๋ค.)
}