item 6 Jung inchul - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
Effective Java 3e μμ΄ν 6λ₯Ό μμ½ν λ΄μ© μ λλ€.
λκ°μ κΈ°λ₯μ κ°μ²΄λ₯Ό λ§€λ² μμ±ν기보λ€λ κ°μ²΄ νλλ₯Ό μ¬μ¬μ©νλ νΈμ΄ λμ λκ° λ§λ€. νΉν λΆλ³ κ°μ²΄λ μΈμ λ μ¬μ¬μ©ν μ μλ€.
String s = new String("bikini");
μ μ½λλ μ€νλ λλ§λ€ String μΈμ€ν΄μ€λ₯Ό μλ‘ λ§λ λ€.
String s = "bikini";
μ΄ μ½λλ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό λ§€λ² λ§λλ λμ νλμ String μΈμ€ν΄μ€λ₯Ό μ¬μ©νλ€. λμκ° μ΄ λ°©μμ μ¬μ©νλ€λ©΄ κ°μ κ°μ λ¨Έμ μμμ μ΄μ λκ°μ λ¬Έμμ΄ λ¦¬ν°λ΄μ μ¬μ©νλ λͺ¨λ μ½λκ° κ°μ κ°μ²΄λ₯Ό μ¬μ¬μ©ν¨μ΄ 보μ₯λλ€.
μμ±μ λμ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ 곡νλ λΆλ³ ν΄λμ€μμλ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©ν΄ λΆνμν κ°μ²΄ μμ±μ νΌν μ μλ€.
μμ±μλ νΈμΆν λλ§λ€ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ§λ§ ν©ν°λ¦¬ λ©μλλ μ ν κ·Έλ μ§ μλ€.
μμ± λΉμ©μ΄ μμ£Ό λΉμΌ κ°μ²΄λ λλ¬ μλ€. μ΄λ° 'λΉμΌ κ°μ²΄'κ° λ°λ³΅ν΄μ νμνλ€λ©΄ μΊμ±νμ¬ μ¬μ¬μ©νκΈΈ κΆνλ€.
static boolean isRomanNumeral(String s) {
return s.marches("^(?=.)M*(C[MD] }D?C{0,3})"
+ "(X[CL]}L?X{0,3})(I[XV]|V?I{0,3})$");
String.matchesλ μ κ·ννμμΌλ‘ λ¬Έμμ΄ ννλ₯Ό νμΈνλ κ°μ₯ μ¬μ΄ λ°©λ²μ΄μ§λ§, μ±λ₯μ΄ μ€μν μν©μμ λ°λ³΅ν΄ μ¬μ©νκΈ°μ μ ν©νμ§ μλ€. μ΄ λ©μλκ° λ΄λΆμμ λ§λλ μ κ·ννμμ© Pattern μΈμ€ν΄μ€λ ν λ² μ°κ³ λ²λ €μ Έμ 곧λ°λ‘ κ°λΉμ§ 컬λ μ λμμ΄ λλ€.
μ±λ₯μ κ°μ νλ €λ©΄ νμν μ κ·ννμμ νννλ (λΆλ³μΈ)Pattern μΈμ€ν΄μ€λ₯Ό ν΄λμ€ μ΄κΈ°ν(μ μ ν¬κΈ°ν) κ³Όμ μμ μ§μ μμ±ν΄ μΊμ±ν΄λκ³ , λμ€μ isRomanNumral λ©μλκ° νΈμΆλ λλ§λ€ μ΄ μΈμ€ν΄μ€λ₯Ό μ¬μ¬μ©νλ€.
κ°μ μ μμλ μ‘΄μ¬μ‘°μ°¨ λͺ°λλ Pattern μΈμ€ν΄μ€λ₯Ό static final νλλ‘ λμ§μ΄λ΄κ³ μ΄λ¦μ μ§μ΄μ£Όμ΄ μ½λμ μλ―Έκ° ν¨μ¬ μ λλ¬λλ€.
μ§μ° μ΄κΈ°νλ μ½λλ₯Ό 볡μ‘νκ² λ§λλλ°, μ±λ₯μ ν¬κ² κ°μ λμ§ μμ λκ° λ§κΈ° λλ¬Έμ΄λ€.
Q1. μ§μ° μ΄κΈ°νλ?
μ΄κΈ°ν μ§μ°(Lazy initialization)μ νλ μ΄κΈ°νλ₯Ό μ€μ λ‘ κ·Έ κ°μ΄ μ°μΌ λκΉμ§ 미루λ κ²μ΄λ€. κ°μ μ¬μ©νλ κ³³μ΄ μλ€λ©΄ νλλ κ²°μ½ μ΄κΈ°νλμ§ μμ κ²μ΄λ€.
κ°μ²΄κ° λΆλ³μ΄λΌλ©΄ μ¬μ¬μ©ν΄λ μμ ν¨μ΄ λͺ λ°±νλ€. νμ§λ§ ν¨μ¬ λ λͺ ννκ±°λ μ¬μ§μ΄ μ§κ΄μ λ°λλλ μν©λ μλ€.
κ·Έλ λ€λ©΄ μ΄λν°λ₯Ό μκ°ν΄λ³΄μ. μ΄λν°λ μ€μ μμ μ λ·λ¨ κ°μ²΄μ μμνκ³ , μμ μ μ 2μ μΈν°νμ΄μ€ μν μ ν΄μ£Όλ κ°μ²΄μ΄λ€.
μ컨ν Map μΈν°νμ΄μ€μ KeySet λ©μλλ Map κ°μ²΄ μμ ν€ μ λΆλ₯Ό λ΄μ Set λ·°λ₯Ό λ°ννλ€. KeySetμ νΈμΆν λλ§λ€ μλ‘μ΄ Set μΈμ€ν΄μ€κ° λ§λ€μ΄λ¦¬λΌκ³ μμ§νκ² μκ°ν μλ μμ§λ§, μ¬μ€μ λ§€λ² κ°μ Set μΈμ€ν΄μ€λ₯Ό λ°νν μ§λ λͺ¨λ₯Έλ€.
Q1. KeySetμ λν μμ κ° νμνλ€.
λΆνμν κ°μ²΄λ₯Ό λ§λ€μ΄λ΄λ λ λ€λ₯Έ μλ‘ μ€ν λ°μ±μ λ€ μ μλ€.
μ€ν λ°μ±μ κΈ°λ³Έ νμ κ³Ό κ·Έμ λμνλ λ°μ±λ κΈ°λ³Έ νμ μ ꡬλΆμ νλ €μ£Όμ§λ§, μμ ν μμ μ£Όλ κ²μ μλλ€
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κ°λ λ§λ€μ΄μ§ κ²μ΄λ€.
κ΅νμ λͺ ννλ€. λ°μ±λ κΈ°λ³Έ νμ 보λ€λ κΈ°λ³Έ νμ μ μ¬μ©νκ³ μλμΉ μμ μ€ν λ°μ±μ΄ μ¨μ΄λ€μ§ μλλ‘ μ£Όμνμ.
κ±°κΎΈλ‘ μμ£Ό λ¬΄κ±°μ΄ κ°μ²΄κ° μλ λ€μμμΌ λ¨μν κ°μ²΄ μμ±μ νΌνκ³ μ μ¬λ¬λΆλ§μ κ°μ²΄ νμ λ§λ€μ§λ λ§μ
νμ§λ§ μΌλ°μ μΌλ‘λ μ체 κ°μ²΄ νμ μ½λλ₯Ό ν·κ°λ¦¬κ² λ§λ€κ³ λ©λͺ¨λ¦¬ μ¬μ©λμ λλ¦¬κ³ μ±λ₯μ λ¨μ΄λ¨λ¦°λ€.
μ΄λ² μμ΄ν μ΄ "κΈ°μ‘΄ κ°μ²΄λ₯Ό μ¬μ¬μ©ν΄μΌ νλ€λ©΄ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ§ λ§λΌ'λΌλ©΄ μμ΄ν 50μ "μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ΄μΌ νλ€λ©΄ κΈ°μ‘΄ κ°μ²΄λ₯Ό μ¬μ¬μ©νμ§ λ§λΌ"
λ°©μ΄μ 볡μ¬μ μ€ν¨νλ©΄ μΈμ ν°μ Έ λμ¬μ§ λͺ¨λ₯΄λ λ²κ·Έμ 보μ ꡬλ©μΌλ‘ μ΄μ΄μ§μ§λ§, λΆνμν κ°μ²΄ μμ±μ κ·Έμ μ½λ ννμ μ±λ₯μλ§ μν₯μ μ€λ€.