Effective Java 3/E
μμ΄ν 6: λΆνμν κ°μ²΄ μμ±μ νΌνλΌ
λκ°μ κΈ°λ₯μ κ°μ²΄λ₯Ό λ§€λ² μμ±νκΈ° 보λ€λ κ°μ²΄ νλλ₯Ό μ¬μ¬μ© νλνΈμ΄ μ’μ λκ° λ§λ€.
String.matches() λ μ κ·ννμμΌλ‘ λ¬Έμμ΄ ννλ₯Ό νμΈνκΈ° κ°μ₯ μ¬μ΄ λ°©λ²μ΄λ€.
public static void main(String[] args) throws Exception {
String num = "VI";
if (isRomanNumeral(num)) {
...
}
...
}
static boolean isRomanNumeral(String s) {
return s.matches("^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$");
}
}
matches() λ΄λΆμμ μμ±νλ μ κ· ννμμ© Pattern μΈμ€ν΄μ€λ, ν λ² μ°κ³ λ²λ €μ Έμ 곧λ°λ‘ κ°λΉμ§ 컬λ μ μ λμμ΄ λλ€.
Pattern μ μ λ ₯λ°μ μ κ·ννμμ ν΄λΉνλ μ ν μν λ¨Έμ μ λ§λ€κΈ° λλ¬Έμ μΈμ€ν΄μ€ μμ± λΉμ©μ΄ λλ€.
μ±λ₯ κ°μ μ μν΄ μ κ·ννμμ νννλ Pattern μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ν κ³Όμ μμ μ§μ μΊμ±ν΄λκ³ , λμ€μ isRomanNumeral() λ©μλκ° νΈμΆ λ λ λ§λ€ μ΄ μΈμ€ν΄μ€λ₯Ό μ¬μ¬μ©νλ€.
private static final Pattern ROMAN = Pattern.compile("^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$");
public static void main(String[] args) throws Exception {
String num = "VI";
if (isRomanNumeral(num)) {
...
}
...
}
static boolean isRomanNumeral(String s) {
return ROMAN.matcher(s).matches();
}
...
μ΄λν° ν¨ν΄ μ¬μ©
μ΄λν°(λ·°) = μ€μ μμ μ λ·λ¨ κ°μ²΄μ μμνκ³ , μμ μ μ 2 μΈν°νμ΄μ€ μν μ ν΄μ£Όλ κ°μ²΄μ΄λν°λ λ·λ¨ κ°μ²΄λ§ κ΄λ¦¬νλ€. λ·λ¨ κ°μ²΄ νλλΉ μ΄λν° νλ
Map μΈν°νμ΄μ€μ KeySet λ©μλ : Map κ°μ²΄μμ ν€λ₯Ό μ λΆ λ΄μ Set λ·° (μ΄λν°)λ₯Ό λ°ν
λ·° κ°μ²΄λ₯Ό μ¬λ¬κ° λ§λ€κ±°λΌ μκ°ν μ μμ§λ§, μ¬μ€μ λ§€λ² κ°μ μΈμ€ν΄μ€λ₯Ό λ°ννλ€.
@DisplayName("keysetμ κ°μ Mapμ λ°λΌλ³Έλ€")
@Test
void keyset(){
Map<String, Object> javabom = new HashMap<>();
javabom.put("Javabom", "Hello");
Set<String> javabomSet1 = javabom.keySet();
Set<String> javabomSet2 = javabom.keySet();
assertThat(javabomSet1).isSameAs(javabomSet2);
}
μ€ν λ°μ±μΌλ‘ μμ±λ κ°μ²΄
μ€ν λ°μ±μ νλ‘κ·Έλλ¨Έκ° κΈ°λ³Έ νμ κ³Ό λ°μ±λ κΈ°λ³Έ νμ μ μμ΄ μΈ λ μλμΌλ‘ μνΈ λ³νν΄μ£Όλ κΈ°μ μ΄λ€.
μ€ν λ°μ±μ κΈ°λ³Έ νμ κ³Ό κ·Έμ λμνλ λ°μ±λ κΈ°λ³Έ νμ μ ꡬλΆμ νλ €μ£Όμ§λ§, μμ ν μμ μ£Όλ κ²μ μλλ€.
μλ―ΈμμΌλ‘λ λ³λ€λ₯Ό κ² μμ§λ§ μ±λ₯μμλ κ·Έλ μ§ μλ€. μλ μ½λλ₯Ό νλ² λ³΄μ.
private static long sum(){
Long sum = 0L;
for(long i = 0; i <= Integer.MAX_VALUE; i++){
sum += i;
}
return sum;
}
μ΄ μ½λλ μ¬λ°λ₯Έ κ°μ λ΄λ©° μ μλμνκΈ°λ νλ€. κ·Έλ¬λ κ΅μ₯ν λλ¦¬κ² λμνλ€.
sumλ³μλ₯Ό LongμΌλ‘ μ μΈνμ¬, longνμ μΈ iκ° λν΄μ§ λ λ§λ€ long νμ μ΄ Longκ°μ²΄λ‘ μ€ν λ°μ±μ΄ μΌμ΄λλ€.
κ·Έλ κ² λ°λ³΅μ μΌλ‘ μ€ν λ°μ±μ΄ μΌμ΄λλ©΄μ μ±λ₯μ΄ μ νλλ€.
μ΄ μ½λλ₯Ό λ¨μν sumμ longνμ μΌλ‘ μ μΈνλ κ²λ§μΌλ‘λ μ±λ₯μ΄ μλ±ν ν₯μλλ κ²μ νμΈν μ μλ€.
λ°λΌμ λ°μ±λ κΈ°λ³Έ νμ 보λ€λ κΈ°λ³Έ νμ μ μ¬μ©νκ³ , μλμΉ μμ μ€ν λ°μ±μ΄ μ¨μ΄λ€μ§ μλλ‘ μ£Όμνμ.
μ΄ λ΄μ©λ€μ λ³΄κ³ "κ°μ²΄ μμ±μ λΉμΈλ νΌν΄μΌ νλ€."λΌκ³ μ€ν΄νμ§ λ§μ. νΉν μμ¦ JVMμμλ λ³λ€λ₯Έ μΌμ νμ§ μλ μμ κ°μ²΄λ₯Ό μμ±νκ³ νμνλ μΌμ΄ ν¬κ² λΆλ΄λμ§ μλλ€.
νλ‘κ·Έλ¨μ λͺ νμ±, κ°κ²°μ±, κΈ°λ₯μ μν΄μ κ°μ²΄λ₯Ό μΆκ°λ‘ μμ±νλ κ²μ΄λΌλ©΄ μΌλ°μ μΌλ‘ μ’μ μΌμ΄λ€.
μμ£Ό λ¬΄κ±°μ΄ κ°μ²΄κ° μλ λ€μμμΌ λ¨μν κ°μ²΄ μμ±μ νΌνκ³ μ κ°μ²΄ νμ λ§λ€μ§ λ§μ.