item 6 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
λΆνμν κ°μ²΄ μμ±μ νΌνλΌ
λκ°μ κΈ°λ₯μ κ°μ²΄λ₯Ό λ§€λ² μμ±ν기보λ€λ κ°μ²΄ νλλ₯Ό μ¬μ¬μ©νλ νΈμ΄ λμ λκ° λ§λ€.
- κ°μ²΄ νλλ₯Ό μ¬μ¬μ©νλ κ²μ λΉ λ₯΄κ³ μΈλ ¨λλ€.
- νΉν
λΆλ³ κ°μ²΄(μμ΄ν 17)
λ μΈμ λ μ¬μ¬μ©ν μμλ€.
λΆλ³ κ°μ²΄λ κ·Όλ³Έμ μΌλ‘ μ€λ λ μμ νμ¬ λ°λ‘ λκΈ°νν νμ μλ€.
λΆλ³ κ°μ²΄λ μμ¬νκ³ κ³΅μ ν μ μλ€.
String s = new String("bikini"); // μ€νλ λλ§λ€ String μΈμ€ν΄μ€λ₯Ό μλ‘ λ§λ λ€.
String s = "bikini"; // νλμ String μΈμ€ν΄μ€λ₯Ό μ¬μ©νλ€.
μμ±μ λμ μ μ ν©ν 리 λ©μλλ₯Ό μ 곡νλ λΆλ³ ν΄λμ€μμλ μ μ ν©ν 리 λ©μλλ₯Ό μ¬μ©ν΄ λΆνμν κ°μ²΄ μμ±μ νΌν μ μλ€.
- Boolean(String) μμ±μ λμ Boolean.valueOf(String) ν©ν 리 λ©μλλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
μ΄ μμ±μλ μλ° 9μμ deprecated
- μμ±μλ νΈμΆν λλ§λ€ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ§λ§, ν©ν 리 λ©μλλ μ ν κ·Έλ μ§ μλ€.
- λΆλ³ κ°μ²΄λ§μ΄ μλλΌ κ°λ³ κ°μ²΄λΌ ν΄λ μ¬μ© μ€μ λ³κ²½ λμ§ μμ κ²μμ μλ€λ©΄ μ¬μ¬μ©ν μ μλ€.
μ κ·ννμμ νμ©ν κ°μ₯ μ¬μ΄ ν΄λ²
μ±λ₯μ ν¨μ¬ λ λμ΄μ¬λ¦΄ μ μλ€.
static boolean isRomanNumeral(String s) {
return s.matches("^(?=.)M*(C[MD[|D?C{0,]})"
+ "(X[CL])|L?X{0,3})(I[XV]|V?I{0,3})$");
}
- String.matchesλ μ±λ₯μ΄ μ€μν μν©μμ λ°λ³΅ν΄ μ¬μ©νκΈ°λ μ ν©νμ§ μλ€.
- μ΄ λ©μλκ° λ§λλ μ κ·ννμμ© Pattern μΈμ€ν΄μ€λ νλ²μ°κ³ λ²λ €μ Έμ 곧λ°λ‘ κ°λΉμ§ 컬λ μ λμμ΄ λλ€.
- Patternμ μ λ ₯λ°μ μ κ·ννμμ ν΄λΉνλ μ ν μν λ¨Έμ μ λ§λ€κΈ° λλ¬Έμ μΈμ€ν΄μ€ μμ± λΉμ©μ΄ λλ€.
κ°λΉμΌ κ°μ²΄λ₯Ό μ¬μ¬μ©ν΄ μ±λ₯μ κ°μ νλ€.
μ±λ₯μ κ°μ νλ €λ©΄ νμν μ κ·ννμμ νννλ (λΆλ³μΈ) Pattern μΈμ€ν΄μ€λ₯Ό ν΄λμ€ μ΄κΈ°ν(μ μ μ΄κΈ°ν) κ³Όμ μμ μ§μ μμ±ν΄ μΊμ±ν΄λκ³ λμ€μ isRomanNumeral λ©μλκ° νΈμΆλ λλ§λ€ μ΄ μΈμ€ν΄μ€λ₯Ό μ¬μ¬μ©νλ€.
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 μΈμ€ν΄μ€λ₯Ό static final νλλ‘ λμ§μ΄λ΄κ³ μ΄λ¦μ μ§μ΄μ£Όμ΄ μ½λμ μλ―Έκ° ν¨μ¬ μ λλ¬λλ€.
- κ°μ λ isRomanNumeral λ°©μμ ν΄λμ€κ° μ΄κΈ°νλ ν μ΄ λ©μλλ₯Ό ν λ²λ νΈμΆνμ§ μλλ€λ©΄ ROMAN νλλ μΈλ°μμ΄ μ΄κΈ°νλ κΌ΄μ΄λ€.
- isRomanNumeral λ©μλκ° μ²μ νΈμΆλ λ νλλ₯Ό μ΄κΈ°ννλ μ§μ° μ΄κΈ°ν (μμ΄ν 83)λ‘ λΆνμν μ΄κΈ°νλ₯Ό μμ¨ μλ μμ§λ§ κΆμ₯ νμ§ μλλ€.
- μ§μ° μ΄κΈ°νλ μ½λλ₯Ό 볡μ‘νκ² λ§λλλ° μ±λ₯μ ν¬κ² κ°μ λμ§ μμ λκ° λ§κΈ° λλ¬Έμ΄λ€.
λΆνμν κ°μ²΄λ₯Ό λ§λ€μ΄λ΄λ μμ
κ°μ²΄κ° λΆλ³μ΄λΌλ©΄ μ¬μ¬μ©ν΄λ μμ ν¨μ΄ λͺ λ°±νλ€.
- Adapterλ₯Ό viewλΌκ³ λ νλ€.
- μ΄λν°λ μ€μ μμ μ λ·λ¨ κ°μ²΄μ μμνκ³ μμ μ μ 2μ μΈν°νμ΄μ€ μν μ ν΄μ£Όλ κ°μ²΄λ€. μ΄λν°λ λ·λ¨ κ°μ²΄λ§ κ΄λ¦¬νλ©΄ λλ€.
- λ·λ¨ κ°μ²΄ μΈμλ κ΄λ¦¬ν μνκ° μμΌλ―λ‘ λ·λ¨ κ°μ²΄ νλλΉ μ΄λν° νλμ©λ§ λ§λ€μ΄μ§λ©΄ μΆ©λΆνλ€.
- Map μΈν°νμ΄μ€μ keySet λ©μλλ Map κ°μ²΄ μμ ν€ μ λΆλ₯Ό λ΄μ Setλ·°λ₯Ό λ°ννλ€.
- keySetμ νΈμΆν λλ§λ€ μλ‘μ΄ Set μΈμ€ν΄μ€κ° λ§λ€μ΄μ§λ¦¬λΌκ³ μκ°ν μ μμ§λ§ μ¬μ€μ λ§€λ² κ°μ Set μΈμ€ν΄μ€λ₯Ό λ°νν μ§λ λͺ¨λ₯Έλ€.
- λ°νλ Set μΈμ€ν΄μ€κ° μΌλ°μ μΌλ‘ κ°λ³μ΄λλΌλ λ°νλ μΈμ€ν΄μ€λ€μ κΈ°λ₯μ μΌλ‘ λͺ¨λ λκ°λ€.
- μ¦ λ°νν κ°μ²΄μ€ νλλ₯Ό μμ νλ©΄ λ€λ₯Έ λͺ¨λ κ°μ²΄κ° λ°λΌμ λ°λλ€. λͺ¨λκ° λκ°μ Map μΈμ€ν΄μ€λ₯Ό λλ³νκΈ° λλ¬Έμ΄λ€.
μ€ν λ°μ±(auto boxing)
- μ€ν λ°μ±μ κΈ°λ³Έ νμ κ³Ό λ°μ±λ κΈ°λ³Έ νμ μ μμ΄ μΈ λ μλμΌλ‘ μνΈ λ³νν΄μ£Όλ κΈ°μ
- κΈ°λ³Έ νμ κ³Ό κ·Έμ λμνλ λ°μ±λ κΈ°λ³Έ νμ μ ꡬλΆμ νλ €μ£Όμ§λ§ μμ ν μμ μ£Όλ κ²μ μλλ€.
- μλ―Έ μμΌλ‘λ λ³λ€λ₯Ό κ² μμ§λ§ μ±λ₯μμλ κ·Έλ μ§ μλ€. (μμ΄ν 61)
// λͺ¨λ μμ μ μμ μ΄ν© ꡬνκΈ°
// intλ μΆ©λΆν ν¬μ§ μμΌλ longμ μ¬μ©
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μ λν΄μ§ λλ§λ€).
λ¨μν sumμ νμ μ longμΌλ‘λ§ λ°κΏμ£Όλ©΄ μλκ° λΉ¨λΌμ§λ€. (6.3μ΄ -> 0.59μ΄λ‘)
- λ°μ±λ κΈ°λ³Έ νμ 보λ€λ κΈ°λ³Έ νμ μ μ¬μ©νκ³ μλμΉ μμ μ€ν λ°μ±μ΄ μ¨μ΄λ€μ§ μλλ‘ μ£Όμνμ.
ν΅μ¬ μ 리
κΈ°μ‘΄ κ°μ²΄λ₯Ό μ¬μ¬μ© ν΄μΌ νλ€λ©΄ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ§ λ§λΌ
λ¬΄κ±°μ΄ κ°μ²΄κ° μλ λ¨μν κ°μ²΄ μμ±μ νΌνκ³ μ κ°μ²΄ ν(pool)μ λ§λ€μ§λ λ§μ.
DB Connection κ°μ μμ± λΉμ©μ΄ λΉμΈλ μ¬μ¬μ©νλ νΈμ΄ λμΌλ μ체 κ°μ²΄ νμ μ½λλ₯Ό ν·κ°λ¦¬κ² λ§λ€κ³ λ©λͺ¨λ¦¬ μ¬μ©λμ λλ¦¬κ³ μ±λ₯μ λ¨μ΄λ¨λ¦°λ€.
- μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ΄μΌ νλ€λ©΄ κΈ°μ‘΄ κ°μ²΄λ₯Ό μ¬μ¬μ©νμ§ λ§λΌ (item 50, 302page)
- λ°©μ΄μ 볡μ¬κ° νμν μν©μμ κ°μ²΄λ₯Ό μ¬μ¬μ©νμ λμ νΌν΄κ° νμ μλ κ°μ²΄λ₯Ό λ°λ³΅ μμ±νμ λμ νΌν΄λ³΄λ€ ν¨μ¬ ν¬λ€.