λ³Έ κΈμ μ΄νν°λΈ μλ° 3νμ μ½κ³ μ 리ν κΈ μ λλ€. λμΌν λ΄μ©μ΄ ν¬ν¨λ μ μμ΅λλ€.
π0. μλ‘
μΌλ°μ μΌλ‘ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νλ λ°©μμ, public μμ±μμ λλ€.
λ€λ₯Έ λ°©μμΌλ‘λ, μ μ ν©ν 리 λ©μλ(static factory method)λ₯Ό λ§λ€μ΄ μ 곡ν μ μμ΅λλ€.
μ΄ μ μ ν©ν 리 λ©μλλ λ¨μν ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ°ννλ κ²μ΄ κ·Έ μν μ μ λΆμ λλ€.
λ€μμ μ μ ν©ν 리 λ©μλμ μμλ‘, Boolean λνΌ ν΄λμ€μ valueOf λ©μλμ λλ€.
public static Boolean valueOf(boolean b){
return b ? Boolean.TRUE : Boolean.FALSE;
}
κ·Έλ λ€λ©΄ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νμ λμ μ₯μ μ 무μμΌκΉμ?
π€ 1. μ μ ν©ν 리 λ©μλμ μ₯λ¨μ
1-1. μ₯μ
1) μ΄λ¦μ κ°μ§ μ μμ΅λλ€.
μμ±μλ₯Ό ν΅ν΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ κ²½μ°μλ, ν΄λμ€ μ΄λ¦μ λͺ μνκ³ , λ΄λΆμ νλΌλ―Έν°λ₯Ό μ½μ νλ λ°©μμΌλ‘ μμ±λ©λλ€. μ΄ κ²½μ°μ λ°νλ κ°μ²΄μ νΉμ±μ μ ννκ² μ€λͺ ν μ μμ΅λλ€. λ°λ©΄μ μ μ ν©ν°λ¦¬ λ©μλλ 'λ©μλ'μ΄κΈ° λλ¬Έμ κ³ μ μ μ΄λ¦μ κ°μ§ μ μμ΅λλ€.
new BigInteger(int, int, Random); // μμ±μλ‘ μΈμ€ν΄μ€ μμ±
BigInteger.probablePrime(...); // μ μ ν©ν 리 λ©μλλ‘ μΈμ€ν΄μ€ μμ±
μμ λ μ½λλ κ²°κ³Όμ μΌλ‘ BigInteger νμ μ κ°μ²΄λ₯Ό μμ±ν©λλ€. νμ§λ§ λ κ²½μ° μ€μμ "κ°μ΄ μμμΈ BigIntegerλ₯Ό λ°ννλ€"λ₯Ό λ μ μ€λͺ νλ μ½λλ 무μμΌκΉμ? μ μ ν©ν 리 λ©μλμ μ΄λ¦μ μ μ§λλ€λ©΄, μ΄λ₯Ό λμ± λ μ μ€λͺ ν μ μμ κ²μ λλ€.
λ νλμ μκ·Έλμ²λ‘λ μμ±μλ₯Ό νλλ§ λ§λ€ μ μμ΅λλ€. μμ±μμ μ λ ₯ 맀κ°λ³μμ μμλ₯Ό λ°κΏ μ€λ²λΌμ΄λ© ν΄λ³΄κ² λ€λΌλ μκ°μΌλ‘ μ νμ νΌν΄λ³Ό μλ μκ² μ§λ§, μ΄λ€ μν μ νλμ§ κ΅¬λΆν μ μμ΄ μ’μ λ°μμ μλλλ€.
λ°λΌμ ν ν΄λμ€μ μκ·Έλμ²κ° κ°μ μμ±μκ° μ¬λ¬κ° νμν κ²½μ°, μ μ ν©ν°λ¦¬ λ©μλλ₯Ό νμ©νλ κ²μ κ΅μ₯ν ν¨μ¨μ μΈ λ°©λ²μ λλ€.
2) νΈμΆλ λλ§λ€ μΈμ€ν΄μ€λ₯Ό μλ‘ μμ±νμ§λ μμλ λ¨
μ΄ μ₯μ μμ μ μ¬ν 보μμΌ νλ κ²μ, 'μμ±νμ§λ'μ΄λΌκ³ ννν κ²μ λλ€.
μμ£Ό μ¬μ©νλ μΈμ€ν΄μ€λ₯Ό 미리 λ§λ€μ΄ λκ³ , μΊμμ μ μ₯ν΄λλ λ°©λ²μΌλ‘, μλ‘ μμ±νμ§ μκ³ λ°ννλ λ°©μμΌλ‘ μ μ ν©ν 리 λ©μλλ₯Ό νμ©ν μ μλ€λ κ²μ λλ€.
μμ±μλ₯Ό μ¬μ©νλ€λ©΄, μ΄λ° κ²½μ°λ μμ λΆκ°λ₯νμ£ .
μμμ μλ₯Ό λ€μλ, Boolean.valueOf(boolean) λ©μλλ μλ‘μ΄ κ°μ²΄λ₯Ό μμ μμ±νμ§ μμ΅λλ€.
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
Boolean.TRUEμ Boolean.FALSEλ₯Ό 미리 λΆλ³ κ°μ²΄λ‘ μμ±ν νμ, valueOf λ©μλλ‘ ν΄λΉ λΆλ³ κ°μ²΄λ₯Ό 리ν΄ν©λλ€.
λ°λΌμ μμ±μλ₯Ό ν΅ν΄μ Boolean κ°μ²΄λ₯Ό μμ±νλ©΄, μλ‘μ΄ μΈμ€ν΄μ€κ° μμ±λμ§λ§, valueOfλ₯Ό ν΅ν΄ Boolean κ°μ²΄λ₯Ό μμ±νλ©΄, μλ‘μ΄ μΈμ€ν΄μ€κ° μμ±λ κ²μ΄ μλλΌ μ΄λ―Έ λ§λ€μ΄ λμ λΆλ³ κ°μ²΄λ₯Ό λ°νν μ μμ΅λλ€.
μ΄λ‘μ¨ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νλ μκ°μ , 곡κ°μ λΉμ©μ μ μ½ν μ μλ μ₯μ μ΄ μμ΄μ μμ£Ό μ¬μ©νλ μΈμ€ν΄μ€κ° μ ν΄μ Έ μλ κ²½μ°μ μ¬μ©νλ©΄ λ§μ μ΄μ μ λ³Ό μ μμ΅λλ€.
3) λ°ν νμ μ νμ νμ κ°μ²΄λ₯Ό λ°νν μ μλ λ₯λ ₯μ΄ μμ.
μ΄ λ₯λ ₯μ λ°νν κ°μ²΄μ ν΄λμ€λ₯Ό μμ λ‘κ² μ νν μ μλ μμ²λ μ μ°μ±μ μ 곡ν©λλ€.
μμκ³Ό λ€νμ±μ μν΄ λ°ν νμ μ νμ νμ κ°μ²΄λ₯Ό λ°νν μ μλ€λ κ²μ λΉμ°ν©λλ€.
λνμ μΈ μμλ‘, java.util.Collectionsμμ μ μ ν©ν 리 λ©μλλ₯Ό ν΅ν΄μ μ΄ 45κ°μ μ νΈλ¦¬ν° ꡬν체λ₯Ό μ»μ μ μμ΅λλ€. 컬λ μ νλ μμν¬λ μ΄ 45κ° ν΄λμ€λ₯Ό 곡κ°νμ§ μλ λ°©μμΌλ‘ API μΈκ²¬μ ν¨μ¬ μκ² λ§λ€ μ μμμ΅λλ€.
λ μ΄ μ»μ κ°μ²΄λ₯Ό ꡬν ν΄λμ€κ° μλ μΈν°νμ΄μ€λ§μΌλ‘ λ€λ£° μ μμ΅λλ€.
4) μ λ ₯ λ§€κ° λ³μμ λ°λΌ λ§€λ² λ€λ₯Έ ν΄λμ€μ κ°μ²΄λ₯Ό λ°νν μ μλ€.
λ°ν νμ μ νμ νμ μ΄κΈ°λ§ νλ©΄, μ΄λ€ ν΄λμ€μ κ°μ²΄λ₯Ό λ°νν΄λ μκ΄μμ΅λλ€.
λ°λΌμ μ λ ₯ 맀κ°λ³μμ 쑰건μ λ°λ₯Έ κ°μ²΄λ₯Ό λ°νν΄λ μκ΄μ΄ μλ€λ λ»μ λλ€.
μλ₯Ό λ€λ©΄, EnumSet ν΄λμ€λ public μμ±μ μμ΄ μ μ ν©ν°λ¦¬ λ©μλλ§ μ 곡νλ€κ³ ν©λλ€.
OpenJDKμμ μ¬μ©νλ©΄, μμμ μμ λ°λΌμ 64κ° μ΄νλ©΄ μμλ₯Ό long λ³μ νλλ‘ κ΄λ¦¬νλ RegularEnumSet μΈμ€ν΄μ€λ₯Ό,
65κ° μ΄μμ΄λ©΄ long λ°°μ΄λ‘ κ΄λ¦¬νλ JumboEnumSetμ μΈμ€ν΄μ€λ₯Ό λ°ννλ€κ³ ν©λλ€.
μ°λ¦¬κ° EnumSet ν΄λμ€λ₯Ό μ μ ν©ν 리 λ©μλλ‘ μμ±νλ€κ³ νμ λ, μ°λ¦¬λ μ΄ λ΄λΆ μ‘΄μ¬λ₯Ό λͺ°λΌλ λ©λλ€.
νμ ν΄λμ€μ μμ κ° μΌμ΄λλ, μ±λ₯μ κ°μ ν΄λ, μλ‘μ΄ νμ ν΄λμ€κ° μ겨λ μ ν μ§μ₯μ΄ μλ€λ κ²λ λ νλμ μ₯μ μ λλ€.
κ·Έμ νμ ν΄λμ€μ΄κΈ°λ§ νλ©΄ λ©λλ€.
5) μ μ ν©ν 리 λ©μλλ₯Ό μμ±νλ μμ μλ λ°νν κ°μ²΄μ ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ λλ€.
μ΄κ² λ¬΄μ¨ μ리μΌ..? ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ μμ±μ΄ κ°λ₯νλ€λ?
μ½κ° μ€ν΄μ μμ§κ° μμ μλ μμ΅λλ€.
μμ μ μΈν μ μλ ν΄λμ€λ₯Ό μ μ ν©ν 리 λ©μλμ λ¦¬ν΄ κ°μΌλ‘ μ μν μ μλ€λ λ»μ΄ μλλΌ,
'μΈν°νμ΄μ€'λ₯Ό μμ±νκ³ λ΄λΆ ꡬν체 ν΄λμ€λ₯Ό ꡬννμ§ μμ μνμμ μ μ ν©ν 리 λ©μλμ λ¦¬ν΄ κ°μΌλ‘ μ¬μ©μ΄ κ°λ₯νλ€λ λ»μ λλ€.
1-2. λ¨μ
1) μμμ νλ €λ©΄ publicμ΄λ protected μμ±μκ° νμνλ―λ‘ μ μ ν©ν 리 λ©μλλ§ μ 곡νλ€λ©΄ νμ ν΄λμ€λ₯Ό λ§λ€ μ μμ΅λλ€.
2) μ μ ν©ν°λ¦¬ λ©μλλ₯Ό νλ‘κ·Έλλ¨Έκ° μ°ΎκΈ° μ΄λ ΅μ΅λλ€. μμ±μμ²λΌ API μ€λͺ μ λͺ ννκ² λλ¬λμ§ μμΌλ λ¬Έμ κ΄λ¦¬λ₯Ό μ ν΄μΌ ν©λλ€.
π 2. Reference
[λμ] Effective Java 3ν
[λ§ν¬, μ¬λΌμ΄λμμ΄] https://www.slideshare.net/lifeinnovator/effective-java-57604973
'β μλ° : JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μλ° μ§λ ¬ν (Serialization) (1) | 2023.01.06 |
---|---|
[Java] μμλμ ꡬμ±(Composition)μ μ¬μ©νμ (0) | 2022.12.08 |
[Java] μμμ μ₯λ¨μ , μμμ μΈμ μ¨μΌ νλκ°? (1) | 2022.12.07 |
[Java] μμ(Inheritance) μ¬μ©λ²κ³Ό μμμ μ¬μ©νλ μ΄μ (0) | 2022.12.06 |