item 1 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
- ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ»λ μλ¨μ λκ°μ§
- public μμ±μλ₯Ό μ¬μ©
- μ μ ν©ν 리 λ©μλλ₯Ό μ¬μ©
- ν΄λμ€λ μμ±μμ λ³λλ‘ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ 곡ν μ μλ€.
public static Boolean valueOf(boolean b) {
return b? Boolean.TRUE : Boolean.False;
}μ°Έκ³ λ‘ μ μ ν©ν 리 λ©μλλ λμμΈ ν¨ν΄μμμ ν©ν 리 λ©μλμλ 무κ΄νλ€.
- μμ±μμ λκΈ°λ λ§€κ°λ³μμ μμ±μ μ체λ§μΌλ‘λ λ°νλ κ°μ²΄μ νΉμ±μ μ λλ‘ μ€λͺ νμ§ λͺ»νλ€. λ°λ©΄ μ μ ν©ν 리λ λ°νλ κ°μ²΄μ νΉμ±μ μ½κ² λ¬μ¬ν μ μλ€.
BigInteger(int, int, Random)
BigInteger.probablePrime (μλ° 4+)
-
λμ€ μ΄λμͺ½μ΄ κ°μ΄ μμμΈ BigIntegerλ₯Ό λ°ννλ€ λ μλ―Έλ₯Ό λ μ μ€λͺ ν κ² κ°μμ§ μκ°ν΄λ³΄μ.
-
μλμ κ°μ΄ μμ±μκ° λμΌνκ² μ¬λ¬κ°μ§ μΌμ λ μλκ° λλ¬λμ§ μλλ€.
BigInt() -> κΈ°λ³Έ μμ±μ
BigInt(int t)
BigInt(float f) - μμ±μλ μ΄λ¦μ κ°μ§ μμΌλ λ©μλλ μ΄λ¦μ κ°μ§ μ μμ
- μμ±μλ μ μ μ΄ μλλ―λ‘ λ©μλλ μ μ μ΄μ΄μΌ ν¨
- static factory methodλ₯Ό μΈ κ²½μ°μ λ³΄ν΅ μμ±μλ₯Ό privateλ‘ λ°κΎΈκ³ κ°μ²΄ μμ±μ λ§λλ€. -> κ°μ²΄λ₯Ό μ§μ μμ±ν μ μκ² λ§λ λ€.
- νλμ μκ·Έλμ²λ‘λ μμ±μ νλλ§ λ§λ€ μ μλ€. μ λ ₯ λ§€κ°λ³μλ€μ μμλ₯Ό λ€λ₯΄κ² ν μμ±μλ₯Ό μλ‘ μΆκ°νλ μμΌλ‘ μ΄ μ νμ νΌν΄λ³Ό μλ μμ§λ§ μ’μ§ μλ€.
κ·Έλ° APIλ₯Ό μ¬μ©νλ κ°λ°μλ κ° μμ±μκ° μ΄λ€ μν μ νλμ§ μ νν κΈ°μ΅νκΈ° μ΄λ €μ μλ±ν κ²μ νΈμΆνλ μ€μλ₯Ό ν μ μλ€.
μμ±μλ₯Ό μ μ ν©ν 리 λ©μλλ‘ λ°κΎΈκ³ κ°κ°μ μ°¨μ΄λ₯Ό μ λ€μ΄λ΄λ μ΄λ¦μ μ§μ΄μ£Όμ.
- λ³μ μ΄λκ°μ μ μ₯νκ³ μμΌλ©° μΊμ±νκ³ μλ€.
- λΆλ³ν΄λμ€(item 17)λ μΈμ€ν΄μ€λ₯Ό 미리 λ§λ€μ΄ λκ±°λ μλ‘ μμ±ν μΈμ€ν΄μ€λ₯Ό μΊμ±νμ¬ μ¬νμ© νλ μμΌλ‘ λΆνμν κ°μ²΄ μμ±μ νΌν μ μλ€.
Boolean.valueOf(boolean) λ©μλλ κ°μ²΄λ₯Ό μμ μμ±νμ§ μλλ€. μμ± λΉμ©μ΄ ν¬κ³ κ°μ κ°μ²΄κ° μμ£Ό μμ²λλ μν©μ΄λΌλ©΄ μ±λ₯μ μλΉν λμ΄μ¬λ €μ€λ€.(νλΌμ΄ μ¨μ΄νΈ ν¨ν΄ λΉμ·ν λ΄μ© μ°Έκ³ )
- λ°λ³΅λλ μμ²μ κ°μ κ°μ²΄λ₯Ό λ°ννλ μ : μ μ ν©ν°λ¦¬ λ°©μμ ν΄λμ€λ μΈμ μ΄λ μΈμ€ν΄μ€λ₯Ό μ΄μ μκ² ν μ§λ₯Ό μ² μ ν ν΅μ ν μ μλ€
μΈμ€ν΄μ€ ν΅μ (instance-controlled)λ₯Ό νλ μ΄μ λ 무μμΌκΉ?
- μΈμ€ν΄μ€λ₯Ό ν΅μ νλ©΄ ν΄λμ€λ₯Ό μ±κΈν΄μΌλ‘ λ§λ€ μλ, μΈμ€ν΄μ€ν λΆκ°λ‘ λ§λ€ μλ μλ€.
- λΆλ³κ° ν΄λμ€(item17)μμ λμΉμΈ μΈμ€ν΄μ€κ° λ¨ νλλΏμμ 보μ₯ν μ μλ€. a == bμΌλλ§ a.equals(b)κ° μ±λ¦½
- μΈμ€ν΄μ€ ν΅μ λ νλΌμ΄μ¨μ΄νΈ ν¨ν΄μ κ·Όκ°μ΄ λλ©° μ΄κ±° νμ (item34)μ μΈμ€ν΄μ€κ° νλλ§ λ§λ€μ΄μ§μ 보μ₯νλ€.
- λ°νν κ°μ²΄μ ν΄λμ€λ₯Ό μμ λ‘κ² μ νν μ μκ² νλ μμ²λ μ μ°μ±μ μ 곡
APIλ₯Ό λ§λ€ λ μ΄λ¬ν μ μ°μ±μ μμ©νλ©΄ ꡬν ν΄λ μ€λ₯Ό 곡κ°νμ§ μκ³ λ κ·Έ κ°μ²΄λ₯Ό λ°νν μ μμ΄ APIλ₯Ό μκ² μ μ§ν μ μλ€. μ΄λ μΈν°νμ΄μ€λ₯Ό μ μ ν©ν 리 λ©μλμ λ°ν νμ μΌλ‘ μ¬μ©νλ μΈν°νμ΄μ€ κΈ°λ° νλ μμν¬(μμ΄ν 20)μ λ§λλ ν΅μ¬ κΈ°μ μ΄κΈ°λ νλ€.
- μλ° 8λΆν°λ μΈν°νμ΄μ€κ° μ μ λ©μλλ₯Ό κ°μ§ μ μλ€λ μ νμ΄ νλ ΈκΈ° λλ¬Έμ μΈμ€ν΄μ€ν λΆκ° λλ° ν΄λμ€λ₯Ό λ μ΄μ κ° μλ€.
λλ° ν΄λμ€μ λμλ public μ μ λ©€λ²λ€ μλΉμλ₯Ό κ·Έλ₯ μΈν°νμ΄μ€ μ체μ λλ©΄ λλ κ²μ΄λ€.
μλ° 8 - μΈν°νμ΄μ€μλ public μ μ λ©€λ²λ§ νμ©
μλ° 9 - private μ μ λ©μλ, μ μ νλμ μ μ λ©€λ² ν΄λμ€λ public
- μΈμμ λ°λΌμ (ν©ν 리ν¨ν΄) A νμ μΌ κ²½μ° A ν΄λμ€ B νμ μΌ κ²½μ° Bν΄λμ€ λ°ν
- λ§€κ°λ³μμ λ°λΌμ λ€λ₯Έ ν΄λμ€λ₯Ό λ°ννλ€. (λ€νμ±)
- λ°ν νμ μ νμ νμ (μμλ°μ - λ€νμ±) μ΄κΈ°λ§ νλ©΄ μ΄λ€ ν΄λμ€μ κ°μ²΄λ₯Ό λ°ν νλμ§ μκ΄μλ€. (μΈν°νμ΄μ€λ₯Ό μμμ λ°λ)
EnumSet ν΄λμ€(μμ΄ν 36) - (μμ ν΄λμ€λ₯Ό λ§ν¨) λ public μμ±μ μμ΄ μ€μ§ μ μ ν©ν°λ¦¬λ§ μ 곡νλλ° μμμ μμ λ°λΌ λκ°μ§ νμ ν΄λμ€ μ€ νλμ μΈμ€ν΄μ€λ₯Ό λ°ννλ€.
μμκ° 64κ° μ΄νλ©΄ μμλ€μ long λ³μ νλλ‘ κ΄λ¦¬νλ RegularEnumSetμ μΈμ€ν΄μ€λ₯Ό, 65κ° μ΄μμ΄λ©΄ long λ°°μ΄λ‘ κ΄λ¦¬νλ JumboEnumSetμ μΈμ€ν΄μ€λ₯Ό λ°ννλ€.
/**
* @description public μμ±μ μμ΄ μ μ ν©ν λ¦¬λ§ μ 곡
* μ
λ ₯ λ§€κ° λ³μμ λ°λΌ λ§€λ² λ€λ₯Έ ν΄λμ€μ κ°μ²΄λ₯Ό λ°ν
* @param num
* @return
*/
public static EnumSet getInstance(int num) {
if (num < 64) {
return new RegularEnumSet();
} else if (num > 65) {
return new JumboEnumSet(); // 미리 new ν κ°μ²΄κ° μκ³ λ°ν μμ μ new
}
throw new IllegalArgumentException();
}μ μ ν©ν°λ¦¬ λ§€μλλ₯Ό μμ±νλ μμ μλ λ°νν κ°μ²΄μ ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ λλ€.
- 미리 λ§λ€μ΄ λμ§ μκ³ νμν μμ μ κ°μ²΄λ₯Ό λ§λ λ€.
μλΉμ€ μ 곡μ νλ μμν¬(service provider framework) λ₯Ό λ§λλ κ·Όκ°
μλΉμ€ μ 곡μλ λ°νλλ ν΄λμ€κ° μ‘΄μ¬νλ μ κ° μλ - λ°νν ν΄λμ€κ° μ΄λ―Έ μ‘΄μ¬νμ§ μμλ λ¨.
provider - μλΉμ€μ κΈ°λ₯μ μ 곡
λ°ννλ κ°μ²΄(RegularEnumSet, JumboEnumSet) κ° κ΅¬ν체μ΄λ€.
μλΉμ€ μ 곡μκ° μ€μ ꡬν체μ΄λ€.
- μλΉμ€ μ 곡μ νλ μμν¬λ 3κ°μ ν΅μ¬ μ»΄ν¬λνΈλ‘ μ΄λ€μ§λ€.
- μλΉμ€ μΈν°νμ΄μ€ (service interface)
- μ 곡μκ° κ΅¬ν체λ₯Ό λ±λ‘ν λ μ¬μ©νλ μ 곡μ λ±λ‘ API (provider registration API)
- ν΄λΌμ΄μΈνΈκ° μλΉμ€μ μΈμ€ν΄μ€λ₯Ό μΈμ€ν΄μ€λ₯Ό μ»μ λ μ¬μ©νλ μλΉμ€ μ κ·Ό API (service access API)
μ’ μ’ μλΉμ€ μ 곡μ μΈν°νμ΄μ€ (service provider interface)
- JDBC μμλ Connectionμ΄ μλΉμ€ μΈν°νμ΄μ€ μν
- DriverManager.registerDriverκ° μ 곡μ λ±λ‘ API μν
- DriverManager.getConnectionμ΄ μλΉμ€ μ κ·Ό API μν
- Driverκ° μλΉμ€ μ 곡μ μΈν°νμ΄μ€ μν μ μν
μμμ νλ €λ©΄ publicμ΄λ protected μμ±μκ° νμνλ μ μ ν©ν°λ¦¬ λ©μλλ§ μ 곡νλ©΄ νμ ν΄λμ€λ₯Ό λ§λ€ μ μλ€.
- κΈ°λ³Έ μμ±μκ° private μΌ κ²½μ° μμ λΆκ° μ΄λ―λ‘
- ν©ν 리 ν¨ν΄μ΄λ μ±κΈν€μ μΈ κ²½μ° κ΄λ‘μ²λΌ μ¬μ©λλ λ©μλ λͺ λͺ κ·μΉμ λ°λ₯΄μ.
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 μμ±μλ₯Ό μ 곡νλ μ΅κ΄μ΄ μλ€λ©΄ κ³ μΉμ.