item 6 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
μμ΄ν 6 λΆνμν κ°μ²΄ μμ±μ νΌνλΌ
- λκ°μ κΈ°λ₯μ κ°μ²΄λ₯Ό λ§€λ² μμ±ν기보λ€λ κ°μ²΄ νλλ₯Ό μ¬μ¬μ©νλ νΈμ΄ λμ λκ° λ§λ€. μ¬μ¬μ©μ λΉ λ₯΄κ³ μΈλ ¨λλ€. νΉν λΆλ³ κ°μ²΄λ μΈμ λ μ¬μ¬μ©ν μ μλ€.
new String("bikini") // λ°λΌνμ§ λ§ κ²!
- 'new String("bikini")' λ μ€νλ λ λ§λ€ String μΈμ€ν΄μ€λ₯Ό μλ‘ λ§λ λ€. μ΄ λ¬Έμ₯μ λ°λ³΅λ¬Έμ΄λ λΉλ²ν νΈμΆλλ λ©μλ μμ μλ€λ©΄ μΈλ°μλ String μΈμ€ν΄μ€κ° μλ°±λ§ κ° λ§λ€μ΄μ§ μλ μλ€.
String s = "bikini";
- μ΄ μ½λλ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό λ§€λ² λ§λλ λμ νλμ String μΈμ€ν΄μ€λ₯Ό μ¬μ©νλ€. λμκ° μ΄ λ°©μμ μ¬μ©νλ€λ©΄ κ°μ κ°μ λ¨Έμ μμμ μ΄μ λκ°μ λ¬Έμμ΄ λ¦¬ν°λ΄μ μ¬μ©νλ λͺ¨λ μ½λκ° κ°μ κ°μ²΄λ₯Ό μ¬μ¬μ©ν¨μ΄ 보μ₯λλ€.
new Boolean(String) // λ°λΌνμ§ λ§ κ²!
- 'new Boolean(String)' λ μλ°9μμ deprecated APIλ‘ μ§μ λμλ€. 'Boolean.valueOf(String)' λ₯Ό μ°λ κ²μ΄ μ’λ€.
- μμ±μ λμ μ μ ν©ν°λ¦¬ 맀μλ(μμ΄ν 1)λ₯Ό μ 곡νλ λΆλ³ ν΄λμ€μμλ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©ν΄ λΆνμν κ°μ²΄ μμ±μ νΌν μ μλ€.
μμ± λΉμ©μ΄ λΉμΌ κ°μ²΄
static boolean isRomanNumeral(String s){
return s.matches("^(?=.)M*(C[MD]|D?C{0,3})"
+"(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
}
- μ΄ λ°©μμ λ¬Έμ λ String.matches λ©μλλ₯Ό μ¬μ©νλ€λ λ° μλ€. String.matchesλ μ κ·ννμμΌλ‘ λ¬Έμμ΄ ννλ₯Ό νμΈνλ κ°μ₯ μ¬μ΄ λ°©λ²μ΄μ§λ§, μ±λ₯μ΄ μ€μν μν©μμ λ°λ³΅ν΄ μ¬μ©νκΈ°μ μ ν©νμ§ μλ€.
- μ΄ λ©μλκ° λ΄λΆμμ λ§λλ μ κ·ννμμ© Pattern μΈμ€ν΄μ€λ, ν λ² μ°κ³ λ²λ €μ Έμ 곧λ°λ‘ κ°λΉμ§ 컬λ μ λμμ΄ λλ€.
- Patternμ μ λ ₯λ°μ μ κ·ννμμ ν΄λΉνλ μ ν μν λ¨Έμ (finite state machine)μ λ§λ€κΈ° λλ¬Έμ μΈμ€ν΄μ€ μμ± λΉμ©μ΄ λλ€.
public class RomanNumerals {
private static final Pattern ROMAN = Pattern.compile(
"^(?=.)M*(C[MD]|D?C{0,3})"
+ "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
static boolean isRomanNumeral(String s) {
return ROMAN.matcher(s).matches();
}
}
- μ±λ₯μ κ°μ νλ €λ©΄ νμν μ κ·ννμμ νννλ (λΆλ³μΈ) Pattern μΈμ€ν΄μ€λ₯Ό ν΄λμ€ μ΄κΈ°ν(μ μ μ΄κΈ°ν) κ³Όμ μμ μ§μ μμ±ν΄ μΊμ±ν΄λκ³ , λμ€μ isRomanNumeral λ©μλκ° νΈμΆλ λλ§λ€ μ΄ μΈμ€ν΄μ€λ₯Ό μ¬μ¬μ©νλ€.
μ€ν λ°μ±
- μ€ν λ°μ±μ νλ‘κ·Έλλ¨Έκ° κΈ°λ³Έ νμ κ³Ό λ°μ±λ κΈ°λ³Έ νμ μ μμ΄ μΈ λ μλμΌλ‘ μνΈ λ³νν΄μ£Όλ κΈ°μ μ΄λ€. μ€ν λ°μ±μ κΈ°λ³Έ νμ κ³Ό κ·Έμ λμνλ λ°μ±λ κΈ°λ³Έ νμ μ ꡬλΆμ νλ €μ£Όμ§λ§, μμ ν μμ μ£Όλ κ²μ μλλ€. μλ―ΈμμΌλ‘λ λ³λ€λ₯Ό κ² μμ§λ§ μ±λ₯μμλ κ·Έλ μ§ μλ€.
private static long sum(){
Long sum=0L;
for(long i=0;i<=Integer.MAX_VALUE;i++)
sum+=i;
return sum;
}
- sum λ³μλ₯Ό longμ΄ μλ LongμΌλ‘ μ μΈν΄μ λΆνμν Long μΈμ€ν΄μ€κ° μ½ 231κ°λ λ§λ€μ΄μ§ κ²μ΄λ€(λλ΅, long νμ μΈ iκ° Long νμ μΈ sumμ λν΄μ§ λλ§λ€)
- λ°μ±λ κΈ°λ³Έ νμ 보λ€λ κΈ°λ³Έ νμ μ μ¬μ©νκ³ , μλμΉ μμ μ€ν λ°μ±μ΄ μ¨μ΄λ€μ§ μλλ‘ μ£Όμνμ.
λ§λ¬΄λ¦¬
-
μ΄λ² μμ΄ν μ βκ°μ²΄ μμ±μ λΉμΈλ νΌν΄μΌ νλ€βλ‘ μ€ν΄νλ©΄ μ λλ€. νΉνλ μμ¦μ JVMμμλ λ³λ€λ₯Έ μΌμ νμ§ μλ μμ κ°μ²΄λ₯Ό μμ±νκ³ νμνλ μΌμ΄ ν¬κ² λΆλ΄λμ§ μλλ€. νλ‘κ·Έλ¨μ λͺ νμ±, κ°κ²°μ±, κΈ°λ₯μ μν΄μ κ°μ²΄λ₯Ό μΆκ°λ‘ μμ±νλ κ²μ΄λΌλ©΄ μΌλ°μ μΌλ‘ μ’μ μΌμ΄λ€.
-
κ±°κΎΈλ‘, μμ£Ό λ¬΄κ±°μ΄ κ°μ²΄κ° μλ λ€μμμΌ λ¨μν κ°μ²΄ μμ±μ νΌνκ³ μ μ¬λ¬λΆλ§μ κ°μ²΄ ν(pool)μ λ§λ€μ§λ λ§μ. λ¬Όλ‘ κ°μ²΄ νμ λ§λλ κ² λμ μκ° μκΈ΄ νλ€. λ°μ΄ν°λ² μ΄μ€ μ°κ²° κ°μ κ²½μ° μμ± λΉμ©μ΄ μλ λΉμΈλ μ¬μ¬μ©νλ νΈμ΄ λ«λ€. νμ§λ§ μΌλ°μ μΌλ‘λ μ체 κ°μ²΄ νμ μ½λλ₯Ό ν·κ°λ¦¬κ² λ§λ€κ³ λ©λͺ¨λ¦¬ μ¬μ©λμ λλ¦¬κ³ μ±λ₯μ λ¨μ΄λ¨λ¦°λ€. μμ¦ JVMμ κ°λΉμ§ 컬λ ν°λ μλΉν μ μ΅μ νλμ΄μ κ°λ²Όμ΄ κ°μ²΄μ©μ λ€λ£° λλ μ§μ λ§λ κ°μ²΄ νλ³΄λ€ ν¨μ¬ λΉ λ₯΄λ€.
-
μ΄λ² μμ΄ν μ λ°©μ΄μ 볡μ¬(defensive copy)λ₯Ό λ€λ£¨λ μμ΄ν 50κ³Ό λμ‘°μ μ΄λ€. μ΄λ² μμ΄ν μ΄ βκΈ°μ‘΄ κ°μ²΄λ₯Ό μ¬μ¬μ©ν΄μΌ νλ€λ©΄ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ§ λ§λΌβλΌλ©΄, μμ΄ν 50μ βμλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ΄μΌ νλ€λ©΄ κΈ°μ‘΄ κ°μ²΄λ₯Ό μ¬μ¬μ©νμ§ λ§λΌβλ€. λ°©μ΄μ 볡μ¬κ° νμν μν©μμ κ°μ²΄λ₯Ό μ¬μ¬μ©νμ λμ νΌν΄κ°, νμ μλ κ°μ²΄λ₯Ό λ°λ³΅ μμ±νμ λμ νΌν΄λ³΄λ€ ν¨μ¬ ν¬λ€λ μ¬μ€μ κΈ°μ΅νμ.
-
λ°©μ΄μ 볡μ¬μ μ€ν¨νλ©΄ μΈμ ν°μ Έ λμ¬μ§ λͺ¨λ₯΄λ λ²κ·Έμ 보μ ꡬλ©μΌλ‘ μ΄μ΄μ§μ§λ§, λΆνμν κ°μ²΄ μμ±μ κ·Έμ μ½λ ννμ μ±λ₯μλ§ μν₯μ μ€λ€.