λ©μλλ μμ±μλ₯Ό μμ±ν λλ©΄ κ·Έ 맀κ°λ³μλ€μ μ΄λ€ μ μ½μ΄ μμμ§ μκ°ν΄μΌ νλ€. μ΄λ₯Ό μν μμΉ 2κ°μ§λ₯Ό μ΄ν΄λ³΄μ.
π 1. μμΉ 1 : μ€λ₯λ κ°λ₯ν ν 빨리 (λ°μν κ³³μμ) μ‘μμΌ νλ€.
μ€λ₯λ₯Ό λ°μν μ¦μ μ‘μ§ λͺ»νλ©΄ ν΄λΉ μ€λ₯λ₯Ό κ°μ§νκΈ° μ΄λ €μμ§κ³ , κ°μ§νλλΌλ μ€λ₯μ λ°μ μ§μ μ μ°ΎκΈ° μ΄λ €μμ§λ€.
맀κ°λ³μ κ²μ¬λ₯Ό μ λλ‘ νμ§ λͺ»νλ©΄ μλμ κ°μ λ¬Έμ κ° λ°μν μ μλ€.
- λ©μλκ° μνλλ μ€κ°μ λͺ¨νΈν μμΈλ₯Ό λμ§λ©° μ€ν¨ν μ μλ€.
- λ©μλκ° μ μνλμ§λ§ μλͺ»λ κ²°κ³Όλ₯Ό λ°νν μ μλ€.
- λ©μλλ λ¬Έμ μμ΄ μνλμ§λ§, μ΄λ€ κ°μ²΄λ₯Ό μ΄μν μνλ‘ λ§λ€μ΄λμμ λ―Έλμ μ μ μλ μμ μ μ΄ λ©μλμλ κ΄λ ¨ μλ μ€λ₯λ₯Ό λ§λ€ μ μλ€.
μ΄λ¬ν λ¬Έμ λ₯Ό μλ°©νκ³ μ publicκ³Ό protected λ©μλλ 맀κ°λ³μ κ°μ΄ μλͺ»λμ λ λμ§λ μμΈλ₯Ό λ¬Έμνν΄μΌ νλ€. λν, 맀κ°λ³μμ μ μ½μ λ¬Έμννλ€λ©΄ κ·Έ μ μ½μ μ΄κ²Όμ λ λ°μνλ μμΈλ ν¨κ» κΈ°μ ν΄μΌ νλ€.
/**
*
* νμ μμ΄ μλ 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);
... // κ³μ° μν
}
π 2. μμΉ 2 : λμ€μ μ°λ €κ³ μ μ₯νλ 맀κ°λ³μμ μ ν¨μ±μ κ²μ¬νλΌ.
λ©μλκ° μ§μ μ¬μ©νμ§λ μμΌλ λμ€μ μ°κΈ° μν΄ μ μ₯νλ 맀κ°λ³μλ νΉν λ μ κ²½ μ¨μ κ²μ¬ν΄μΌ νλ€.
Listλ₯Ό λ°ννλ λ©μλκ° μλ€κ³ ν΄λ³΄μ. null κ²μ¬λ₯Ό μλ΅ν κ²½μ°, ν΄λΌμ΄μΈνΈλ λλ €λ°μ Listλ₯Ό μ¬μ©νλ €κ³ ν λ λΉλ‘μ NullPointExceptionμ΄ λ°μνλ€. κ·Έλ¬λ©΄ μ΄ Listλ₯Ό μ΄λμ κ°μ Έμλμ§ μΆμ νκΈ° μ΄λ €μ λλ²κΉ μ΄ μλΉν κ΄΄λ‘μμ§κ² λλ€.
λ¬Όλ‘ ν΄λΉ μμΉμ μλμ κ°μ μμΈλ μ‘΄μ¬νλ€.
- μ ν¨μ± κ²μ¬ λΉμ©μ΄ μ§λμΉκ² λκ±°λ μ€μ©μ μ΄μ§ μμ λ
- κ³μ° κ³Όμ μμ μ묡μ μΌλ‘ κ²μ¬κ° μνλ λ
μ 리νμλ©΄, λ©μλλ μμ±μλ₯Ό μμ±ν λλ©΄ κ·Έ 맀κ°λ³μλ€μ μ΄λ€ μ μ½μ΄ μμμ§ μκ°ν΄μΌ νλ€. κ·Έλ¦¬κ³ κ·Έ μ μ½λ€μ λ¬Έμννκ³ λ©μλ μ½λ μμ λΆλΆμμ λͺ μμ μΌλ‘ κ²μ¬ν΄μΌ νλ€.
ν΄λΉ κΈμ Joshua Bloch λμ 'Effective Java 3/E'λ₯Ό μ°Έκ³ νμμ΅λλ€.