item 1 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
- ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ»λ μ ν΅μ μΈ μλ¨μ
public μμ±μ
μ΄λ€. νμ§λ§ κΌ μμλ¬μΌν κΈ°λ²μ΄ νλ λ μλλ° λ°λ‘ μλμ κ°μ΄ static factory methodλ₯Ό μ 곡νλ κ²μ΄λ€.
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
- μμ±μμ λκΈ°λ 맀κ°λ³μμ μμ±μ μ체 λ§μΌλ‘λ λ°νλ κ°μ²΄μ νΉμ±μ μ λλ‘ μ€λͺ νμ§ λͺ»νλ€. λ°λ©΄ static factory methodλ μ΄λ¦λ§ μ μ§μΌλ©΄ λ°νλ κ°μ²΄μ νΉμ±μ μ½κ² λ¬μ¬ν μ μλ€.
- μ컨λ μμ±μμΈ BigInteger(int, int, Random)κ³Ό μ μ ν©ν°λ¦¬ λ©μλμΈ BigInteger.probablePrime μ€ μ΄λ μͺ½μ΄ βκ°μ΄ μμμΈ BigIntegerλ₯Ό λ°ννλ€βλ μλ―Έλ₯Ό λ μ μ€λͺ ν κ² κ°μμ§ μκ°ν΄ 보λΌ.
- ν΄λμ€μ μκ·Έλμ²κ° κ°μ μμ±μκ° μ¬λ¬ κ° νμν κ² κ°μΌλ©΄, μμ±μλ₯Ό μ μ ν©ν°λ¦¬ λ©μλλ‘ λ°κΎΈκ³ κ°κ°μ μ°¨μ΄λ₯Ό μ λλ¬λ΄λ μ΄λ¦μ μ§μ΄μ£Όμ.
- μ΄ λλΆμ λΆλ³ ν΄λμ€λ μΈμ€ν΄μ€λ₯Ό 미리 λ§λ€μ΄ λκ±°λ μλ‘ μμ±ν μΈμ€ν΄μ€λ₯Ό μΊμ±νμ¬ μ¬νμ©νλ μμΌλ‘ λΆνμν κ°μ²΄ μμ±μ νΌν μ μλ€.
- λνμ μμΈ Boolean.valueOf(boolean) λ©μλλ κ°μ²΄λ₯Ό μμ μμ±νμ§ μλλ€. λ°λΌμ (νΉν μμ± λΉμ©μ΄ ν°) κ°μ κ°μ²΄κ° μμ£Ό μμ²λλ μν©μ΄λΌλ©΄ μ±λ₯μ μλΉν λμ΄μ¬λ € μ€λ€. νλΌμ΄μ¨μ΄νΈ ν¨ν΄λ μ΄μ λΉμ·ν κΈ°λ²μ΄λΌ ν μ μλ€.
- λ°νν κ°μ²΄μ ν΄λμ€λ₯Ό μμ λ‘κ² μ νν μ μκ² νλ
μμ²λ μ μ°μ±
μ μ λ¬Όνλ€. - APIλ₯Ό λ§λ€ λ μ΄ μ μ°μ±μ μμ©νλ©΄ ꡬν ν΄λμ€λ₯Ό 곡κ°νμ§ μκ³ λ κ·Έ κ°μ²΄λ₯Ό λ°νν μ μμ΄ APIλ₯Ό μκ² μ μ§ν μ μλ€. μ΄λ μΈν°νμ΄μ€λ₯Ό μ μ ν©ν°λ¦¬ λ©μλμ λ°ν νμ μΌλ‘ μ¬μ©νλ μΈν°νμ΄μ€ κΈ°λ° νλ μμν¬λ₯Ό λ§λλ ν΅μ¬ κΈ°μ μ΄κΈ°λ νλ€.
-
λ°ν νμ μ νμ νμ μ΄κΈ°λ§ νλ©΄ μ΄λ€ ν΄λμ€μ κ°μ²΄λ₯Ό λ°ννλ μκ΄μλ€.
ν΄λΌμ΄μΈνΈλ ν©ν°λ¦¬κ° 건λ€μ£Όλ κ°μ²΄κ° μ΄λ ν΄λμ€μ μΈμ€ν΄μ€μΈμ§ μ μλ μκ³ μ νμλ μλ€. νμ ν΄λμ€μ΄κΈ°λ§ νλ©΄ λλ κ²μ΄λ€.
λ€μ― λ²μ§Έ, μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μμ±νλ μμ μλ λ°νν κ°μ²΄μ ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ λλ€.
- μ΄λ° μ μ°ν¨μ μλΉμ€ μ 곡μ νλ μμν¬(service provider framework)λ₯Ό λ§λλ κ·Όκ°μ΄ λλ€.
- λνμ μΈ μλΉμ€ μ 곡μ νλ μμν¬λ‘λ JDBC(Java Database Connectivity)κ° μλ€. μλΉμ€ μ 곡μ νλ μμν¬μμμ μ 곡μ(provider)λ μλΉμ€μ ꡬν체λ€. κ·Έλ¦¬κ³ μ΄ κ΅¬ν체λ€μ ν΄λΌμ΄μΈνΈμ μ 곡νλ μν μ νλ μμν¬κ° ν΅μ νμ¬, ν΄λΌμ΄μΈνΈλ₯Ό ꡬν체λ‘λΆν° λΆλ¦¬ν΄μ€λ€.
첫 λ²μ§Έ, μμμ νλ €λ©΄ publicμ΄λ protected μμ±μκ° νμνλ μ μ ν©ν°λ¦¬ λ©μλλ§ μ 곡νλ©΄ νμ ν΄λμ€λ₯Ό λ§λ€ μ μλ€.
- μμ μ΄μΌκΈ°ν 컬λ μ νλ μμν¬μ μ νΈλ¦¬ν° ꡬν ν΄λμ€λ€μ μμν μ μλ€λ μ΄μΌκΈ°λ€. μ΄μ° 보면 μ΄ μ μ½μ μμλ³΄λ€ μ»΄ν¬μ§μ μ μ¬μ©νλλ‘ μ λνκ³ λΆλ³ νμ μΌλ‘ λ§λ€λ €λ©΄ μ΄ μ μ½μ μ§μΌμΌ νλ€λ μ μμ μ€νλ € μ₯μ μΌλ‘ λ°μλ€μΌ μλ μλ€.
- μμ±μμ²λΌ API μ€λͺ μ λͺ νν λλ¬λμ§ μμΌλ μ¬μ©μλ μ μ ν©ν°λ¦¬ λ©μλ λ°©μ ν΄λμ€λ₯Ό μΈμ€ν΄μ€νν λ°©λ²μ μμλ΄μΌ νλ€.
- from: 맀κ°λ³μλ₯Ό νλ λ°μμ ν΄λΉ νμ μ μΈμ€ν΄μ€λ₯Ό λ°ννλ νλ³ν λ©μλ
Date d = Date.from(instant);
- of: μ¬λ¬ 맀κ°λ³μλ₯Ό λ°μ μ ν©ν νμ μ μΈμ€ν΄μ€λ₯Ό λ°ννλ μ§κ³ λ©μλ
Set<Rank> faceCards = EnumSet.of(JACK, QUEEN, KING);
- valueOf: fromκ³Ό ofμ λ μμΈν λ²μ
BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE);
- instance νΉμ getInstance: (맀κ°λ³μλ₯Ό λ°λλ€λ©΄) 맀κ°λ³μλ‘ λͺ μν μΈμ€ν΄μ€λ₯Ό λ°ννμ§λ§, κ°μ μΈμ€ν΄μ€μμ 보μ₯νμ§λ μλλ€.
StackWalker luke = StackWalker.getInstance(options);
- create νΉμ newInstance: instance νΉμ getInstanceμ κ°μ§λ§, λ§€λ² μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±ν΄ λ°νν¨μ 보μ₯νλ€.
Object newArray = Array.newInstance(classObject, arrayLen);
- getType: getInstanceμ κ°μΌλ, μμ±ν ν΄λμ€κ° μλ λ€λ₯Έ ν΄λμ€μ ν©ν°λ¦¬ λ©μλλ₯Ό μ μν λ μ΄λ€. βTypeβμ ν©ν°λ¦¬ λ©μλκ° λ°νν κ°μ²΄μ νμ μ΄λ€.
FileStore fs = Files.getFileStore(path)
- newType: newInstanceμ κ°μΌλ, μμ±ν ν΄λμ€κ° μλ λ€λ₯Έ ν΄λμ€μ ν©ν°λ¦¬ λ©μλλ₯Ό μ μν λ μ΄λ€. βTypeβμ ν©ν°λ¦¬ λ©μλκ° λ°νν κ°μ²΄μ νμ μ΄λ€.
BufferedReader br = Files.newBufferedReader(path);
- type: getTypeκ³Ό newTypeμ κ°κ²°ν λ²μ
List<Complaint> litany = Collections.list(legacyLitany);
μ μ ν©ν°λ¦¬ λ©μλμ public μμ±μλ κ°μμ μ°μμκ° μμΌλ μλμ μΈ μ₯λ¨μ μ μ΄ν΄νκ³ μ¬μ©νλ κ²μ΄ μ’λ€. κ·Έλ λ€κ³ νλλΌλ μ μ ν©ν°λ¦¬λ₯Ό μ¬μ©νλ κ² μ 리ν κ²½μ°κ° λ λ§μΌλ―λ‘ λ¬΄μμ public μμ±μλ₯Ό μ 곡νλ μ΅κ΄μ΄ μλ€λ©΄ κ³ μΉμ.
μ΄λ¦μ μλ§ μ§λλ€λ©΄ public new λ³΄λ€ ν¨μ¬ λ κ°λ μ± μ’μ μ½λλ₯Ό λ§λ€μ΄ λΌ μ μλ λ°©λ²μ΄λΌ μκ°λλ€. λ€μν λͺ λͺ λ°©μ κ΄λ‘λ₯Ό λμ μ΅νλ¬μΌμ§.