item 71 JungHyunLyoo - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
๊ฒ์ฌ ์์ธ๋ฅผ ์ซ์ดํ๋ ๊ฐ๋ฐ์๊ฐ ๋ง์ง๋ง ์ ๋๋ก ํ์ฉํ๋ฉด API์ ํ๋ก๊ทธ๋จ์ ์ง์
๋์ผ ์ ์๋ค. ๋ฐ๋ฉด ์ฌ์ฉ์ด ๊ณผํด์ง๋ฉด ๋ถํธํ๊ธฐ๋ง ํ ์๋ ์๋ค.
(๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง๋ ๋ฉ์๋๋ ์คํธ๋ฆผ ์์์ ์ง์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ (item45 ~ 48)
์๋ฐ 8๋ถํฐ๋ ๋ถ๋ด์ด ๋์ฑ ์ปค์ก๋ค)
๊ฒ์ฌ ์์ธ๊ฐ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ง์ฐ๋ ๋ถ๋ด์ ๋ฉ์๋๊ฐ ๋จ ํ๋์ ๊ฒ์ฌ ์์ธ๋ง
๋์ง ๋๊ฐ ํนํ ํฌ๋ค. API ์์ ๊ฒ์ฌ ์์ธ๊ฐ ์ฌ๋ฌ๊ฐ ์์ ๋๋, ํ๋๋ง ์์ ๋๋
์ด์ฐจํผ try catch๋ก ๋ฌถ๊ฑฐ๋ throws๋ก ๋์ ธ์ค์ผ ํ๋๊ฑด ๋๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ฒ๋ผ ๊ฒ์ฌ ์์ธ์ ๋ํ ์ฑ ์์ ์ง๊ฒ ๋๋ฉด ํด๋น ๋ฉ์๋๋ฅผ ์คํธ๋ฆผ์์ ์ง์ ์ฌ์ฉํ ์ ์๋ค.
๊ฒ์ฌ ์์ธ๊ฐ 0๊ฐ์์ 1๊ฐ๊ฐ ๋๋ ๊ฒ์ 99๊ฐ์์ 100๊ฐ๊ฐ ๋๋๊ฒ์ ๋นํด ํจ์ฌ ํฐ ๋ถ๋ด์ด๋ค.
API๋ฅผ ์ ๋๋ก ์ฌ์ฉํด๋ ๋ฐ์ํ ์ ์๋ ์์ธ์ด๊ฑฐ๋, ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋ฏธ ์๋ ์กฐ์น๋ฅผ
์ทจํ ์ ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ด ์ ๋ ๋ถ๋ด์ฏค์ ๋ฐ์๋ค์ผ ์ ์์ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ด ๊ฒฝ์ฐ๋ค์ด ์๋๋ผ๋ฉด, ๋น๊ฒ์ฌ ์์ธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. (item70)
์๋ ๋ ์ฝ๋๋ ํ๋ก๊ทธ๋๋จธ(API ์ฌ์ฉ์)๊ฐ ๊ฒ์ฌ ์์ธ๋ฅผ ์ฑ ์์ง๋ ์ฌ๋ก๋ค.
} catch (TheCheckedException e) {
throw new AssertionError();
}
} catch (TheCheckedException e) {
e.printStackTrace();
System.exit(1);
}
์ฒซ ๋ฒ์งธ ์ฝ๋๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋น๊ฒ์ฌ ์์ธ๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ๋ค.
๋ ๋ฒ์งธ ์ฝ๋๋ ์๋ฌ ์คํ ์ฝ๋๋ฅผ ํธ์ถํ๊ณ ์์คํ ์ ์ข ๋ฃ์ํจ๋ค.
๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ ์ด์ ๋น๊ฒ์ฌ ์์ธ๋ก API๋ฅผ ๋ง๋ค๋ฉด ๋์ ๊ฒ์ด๋ค.
๊ฒ์ฌ ์์ธ๋ฅผ ํํผํ๋ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ ์ ํ ๊ฒฐ๊ณผ ํ์ ์ ๋ด์ ์ต์ ๋์ ๋ฐํํ๋ ๊ฒ์ด๋ค. (item55)
๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง๋ ๋์ ๋จ์ํ ๋น ์ต์ ๋์ ๋ฐํํ๋ฉด ๋๋ค. ์ฝ๋ค.
ํ์ง๋ง ์ด ๋ฐฉ์์ ๋จ์ ์ด ์๋ค. ์์ธ๊ฐ ๋ฐ์ํ ์ด์ ๋ฅผ ์๋ ค์ฃผ๋ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๋ค๋ ์ ์ด๋ค.
(์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌ์ฒด์ ์ธ ์์ธ ํ์ ๊ณผ ๊ทธ ํ์ ์ด ์ ๊ณตํ๋ ๋ฉ์๋๋ค์ ํ์ฉํด ๋ถ๊ฐ ์ ๋ณด๋ฅผ
์ ๊ณตํ ์ ์๋ค.(item70))
๊ฒ์ฌ ์์ธ๋ฅผ ํํผํ๋ ์ธ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง๋ ๋ฉ์๋๋ฅผ 2๊ฐ๋ก ์ชผ๊ฐ์ด ๋น๊ฒ์ฌ ์์ธ๋ก
๋ฐ๊พธ๋ ๊ฒ์ด๋ค. ์ชผ๊ฐ์ง ์ฒซ ๋ฒ์งธ ๋ฉ์๋๋ ์์ธ๊ฐ ๋์ ธ์ง์ง ์ฌ๋ถ๋ฅผ boolean๊ฐ์ผ๋ก ๋ฐํํ๋ค.
<๋ฉ์๋ ์ชผ๊ฐ๊ธฐ before>
try {
Obj.action(args);
} catch (TheCheckedException e) {
//do something
}
<๋ฉ์๋ ์ชผ๊ฐ๊ธฐ after>
if (obj.actionPermitted(args)) {
obj.action(args);
} else {
//do something
}
action ๋ด์ ๋ก์ง์ 2๊ฐ ๋งค์๋ (actionPermitted, action) ์ผ๋ก ๋๋ ๋ชจ์ต์ด๋ค.
๊น๋ํจ์ ์ด๋์ ๋ ํฌ๊ธฐํ๊ณ ์ ์ฐํจ์ ์ป์๋ค.
ํํธ, actionPermitted๋ '์ํ ๊ฒ์ฌ ๋ฉ์๋'์ ํด๋นํ๋ฏ๋ก ์ฃผ์๋ฅผ ๊ธฐ์ธ์ผ ํ์๊ฐ ์๋ค.
์ธ๋ถ ๋๊ธฐํ ์์ด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํ ์ ์๊ฑฐ๋ ์ธ๋ถ ์์ธ์ ์ํด ์ํ๊ฐ
๋ณํ ์ ์๋ค๋ฉด ์ด ๋ฆฌํฉํฐ๋ง์ ์ ์ ํ์ง ์๋ค. (item69)
actionPermitted์ action ํธ์ถ ์ฌ์ด์ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณํ ์ ์๊ณ ,
๋ ๋ ๋ฉ์๋๊ฐ ๋์ผํ ๋ก์ง์ ์ค๋ณตํด์ ๊ฐ์ง๊ณ ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ผญ ํ์ํ ๊ณณ์๋ง ์ฌ์ฉํ๋ค๋ฉด ๊ฒ์ฌ ์์ธ๋ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ฌ์ฃผ์ง๋ง, ๋จ์ฉํ๋ฉด ์ฐ๊ธฐ ๊ณ ํต์ค๋ฌ์ด
API๋ฅผ ๋ณ๋๋ค. API ํธ์ถ์๊ฐ ์์ธ ์ํฉ์์ ๋ณต๊ตฌํ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ๋น๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง์.
๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๊ณ ํธ์ถ์๊ฐ ๊ทธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ธธ ๋ฐ๋๋ค๋ฉด, ์ต์ ๋ ์ฌ์ฉ์ ๊ฒํ ํด๋ณด์.
๊ทธ๋๋ ์ฌ์์น ์์ผ๋ฉด ๊ทธ๋์์ผ ๊ฒ์ฌ ์์ธ๋ฅผ ์ฌ์ฉํ์.