๐ฏ ์์ดํ 49. ๋งค๊ฐ๋ณ์๊ฐ ์ ํจํ์ง ๊ฒ์ฌํ๋ผ.
"์ค๋ฅ๋ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ (๋ฐ์ํ ๊ณณ์์) ์ก์์ผ ํ๋ค"
์ค๋ฅ๋ฅผ ๋ฐ์ํ ์ฆ์ ์ก์ง ๋ชปํ๋ฉด ํด๋น ์ค๋ฅ๋ฅผ ๊ฐ์งํ๊ธฐ ์ด๋ ค์์ง๊ณ , ๊ฐ์งํ๋๋ผ๋ ์ค๋ฅ์ ๋ฐ์ ์ง์ ์ ์ฐพ๊ธฐ ์ด๋ ค์ ์ง๋ค.
๋ง์ฝ, ๋งค๊ฐ๋ณ์ ๊ฒ์ฌ๋ฅผ ์ ๋๋ก ํ์ง ๋ชปํ๋ฉด ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
๋ฉ์๋๊ฐ ์ํ๋๋ ์ค๊ฐ์ ๋ชจํธํ ์์ธ๋ฅผ ๋์ง๋ฉฐ ์คํจํ ์ ์๋ค.
๋งค๊ฐ๋ณ์ ๊ฒ์ฌ์ ์คํจํ๋ฉด ์คํจ ์์์ฑ์ ์ด๊ธฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ ์ ์๋ค.
์คํจ ์์์ฑ : ๋ฉ์๋์์ ์์ธ๊ฐ ๋ฐ์ํ ํ์๋ ๊ทธ ๊ฐ์ฒด๋ ์ฌ์ ํ ์ ํจํ ์ํ
public
๊ณผ protected
๋ฉ์๋๋ ๋งค๊ฐ๋ณ์ ๊ฐ์ด ์๋ชป๋์ ๋ ๋์ง๋ ์์ธ๋ฅผ ๋ฌธ์ํํด์ผ ํ๋ค.
(@throws
์๋ฐ๋
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.)
/**
* (ํ์ฌ ๊ฐ mod m) ๊ฐ์ ๋ฐํํ๋ค. ์ด ๋ฉ์๋๋
* ํญ์ ์์ด ์๋ BigInteger๋ฅผ ๋ฐํํ๋ค๋ ์ ์์ remainder ๋ฉ์๋์ ๋ค๋ฅด๋ค.
*
* @param m ๊ณ์ (์์์ฌ์ผ ํ๋ค.)
* @return ํ์ฌ ๊ฐ mod m
* @throws ArithmeticException m์ด 0๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ๋ฐ์ํ๋ค.
*/
public BigInteger mod(BigInteger m){
if (m.signum() <= 0){
throw new ArithmeticException("๊ณ์ (m)๋ ์์์ฌ์ผ ํฉ๋๋ค. "+m);
}
// ,,, ๊ณ์ฐ ์ํ
}
์ฌ๊ธฐ์ NullPointException(NPE)์ ๋ํ ๋ด์ฉ์ ๊ธฐ์ ๋์ด ์์ง ์์ง๋ง,
BigInteger ํด๋์ค ์์ค์์ ๊ธฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ํด๋์ค์ public ๋ฉ์๋ ์ ์ฒด์ ์ ์ฉ๋๊ธฐ์ ๊ฐ ๋ฉ์๋์ ๊ธฐ์ ํ ํ์๊ฐ ์๋ค.
java.util.Objects.requireNonNull
์๋ฐ 7์ ์ถ๊ฐ๋ ๋ฉ์๋๋ก ์ ์ฐํ๊ณ ์ฌ์ฉํ๊ธฐ๋ ํธํ๋, ๋ ์ด์ null ๊ฒ์ฌ๋ฅผ ์๋์ผ๋ก ํ์ง ์์๋ ๋๋ค.
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
public static <T> T requireNonNull(T obj, String message) {
if (obj == null)
throw new NullPointerException(message);
return obj;
}
public์ด ์๋ ๋ฉ์๋๋ผ๋ฉด ๋จ์ธ๋ฌธ(assert)์ ์ฌ์ฉํด ๋งค๊ฐ๋ณ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ ์ ์๋ค.
public class Item49 {
private static void solution(int[] arr, int cnt){
assert arr != null;
assert cnt > 0;
System.out.println("---------");
System.out.println("arr.length = " + arr.length);
System.out.println("cnt = " + cnt);
System.out.println("---------");
}
public static void main(String[] args) {
solution(null, -1);
}
}
๋ฉ์๋๋ ์์ฑ์๋ฅผ ์์ฑํ ๋๋ฉด ๊ทธ ๋งค๊ฐ๋ณ์๋ค์ ์ด๋ค ์ ์ฝ์ด ์์์ง ์๊ฐํด์ผ ํ๋ค.
๊ทธ ์ ์ฝ๋ค์ ๋ฌธ์ํํ๊ณ ๋ฉ์๋ ์ฝ๋ ์์ ๋ถ๋ถ์์ ๋ช
์์ ์ผ๋ก ๊ฒ์ฌํด์ผํ๋ค.
์ฐธ๊ณ ์๋ฃ
Joshua Bloch, ใEffective Java 3/Eใ, ๊ฐ์๋งต์ ์ฎ๊น, ํ๋ก๊ทธ๋๋ฐ์ธ์ฌ์ดํธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=