Item 1. Static Factory Method
μμ±μ λμ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό κ³ λ €νλΌ
λ³΄ν΅ Javaλ₯Ό μ¬μ©ν λ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±ν λλ public μμ±μλ₯Ό μ¬μ©νλ€. νμ§λ§ μ΄ λ°©λ² λ§κ³ λ μλμ κ°μ΄ μ μ ν©ν°λ¦¬ λ©μλ(static factory method)λ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
μ μ ν©ν°λ¦¬ λ©μλμ μ₯μ
μ μμ μ½λμ κ°μ΄ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό ν΅νμ¬ κ°μ²΄λ₯Ό μμ±μ νλ©΄ λΉμ°ν λ¨μ λ€λ μ‘΄μ¬νμ§λ§ μ₯μ λ€λ μ‘΄μ¬νλ€.
1. μμ±μμ μ΄λ¦(μλ―Έ) λΆμ¬
public μμ±μλ ν΄λμ€μ μ΄λ¦κ³Ό 맀κ°λ³μλ§μΌλ‘ κ°μ²΄λ₯Ό μμ±νμ§λ§ μ μ ν©ν°λ¦¬ λ©μλλ λ©μλ μ체μ μ΄λ¦μ μ§μ ν μ μμ΄ κ°λ μ±μ΄ μ’μμ§λ€.
λ¨μν public μμ±μλ₯Ό μ¬μ©νμ¬ μμ±νλ€λ©΄ μ νν μ΄λ€ κ°μ²΄λ₯Ό μμ±νλμ§ μκΈ° μ΄λ €μ μ κ²μ΄λ€. λλ¬Έμ λ§μ½ νλμ ν΄λμ€κ° μ¬λ¬ κ°μ μμ±μλ₯Ό κ°μ ΈμΌ νλ€λ©΄ pulbic μμ±μ보λ€λ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νμ¬ μ΄λ¦μ μ§μ νλ κ²μ΄ μ’λ€.
2. νΈμΆλ λλ§λ€ μΈμ€ν΄μ€ μμ± νμ μμ
public μμ±μλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν λλ§λ€ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νμ§λ§ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νλ©΄ 미리 μμ±ν΄λ μΈμ€ν΄μ€λ₯Ό μ¬μ¬μ©ν μ μλ€.
μμ κ°μ΄ μμ±νλ©΄ μΈμ€ν΄μ€λ₯Ό νλλ‘ μ νν μ μμΌλ©°, λν μΈμ€ν΄μ€λ₯Ό 미리 μμ±ν΄λκ³ μ¬μ¬μ©ν μ μμ΄ λ©λͺ¨λ¦¬ λλΉλ₯Ό λ°©μ§ν μ μλ€.
μ΄μ κ°μ΄ μΈμ€ν΄μ€λ₯Ό νλλ‘ μ ννλ κ²μ νλΌμ΄μ¨μ΄νΈ ν¨ν΄
μ κ·Όκ°μ΄ λλ κΈ°λ²μ΄λ€.
3. λ°ν νμ
μ νμ νμ
κ°μ²΄ λ°ν κ°λ₯
public μμ±μλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν λλ ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€λ§ λ°νν μ μμ§λ§ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νλ©΄ ν΄λΉ ν΄λμ€μ νμ νμ κ°μ²΄λ₯Ό λ°νν μ μλ€.
μμ κ°μ΄ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νλ©΄ Shape
μΈν°νμ΄μ€λ₯Ό ꡬνν Circle
κ³Ό Rectangle
ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ°νν μ μλ€.
μ€μ λ‘ Collection νλ μμν¬λ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±νκ³ λ°ννλλ°, μ¬μ©μλ ν΄λΉ μΈν°νμ΄μ€μ ꡬν체λ₯Ό μ νμ μμ΄ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±νκ³ μ¬μ©ν μ μκ² λλ€.
4. μ
λ ₯ 맀κ°λ³μμ λ°λΌ λ§€λ² λ€λ₯Έ ν΄λμ€μ κ°μ²΄ λ°ν κ°λ₯
public μμ±μλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν λλ ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€λ§ λ°νν μ μμ§λ§ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νλ©΄ μ
λ ₯ 맀κ°λ³μμ λ°λΌ λ€λ₯Έ ν΄λμ€μ κ°μ²΄λ₯Ό λ°νν μ μλ€.
μ€μ λ‘ EnumSet
ν΄λμ€μ μ μ ν©ν°λ¦¬ λ©μλλ μ
λ ₯ 맀κ°λ³μμ λ°λΌ RegularEnumSet
(μμ 64κ° μ΄ν)κ³Ό JumboEnumSet
(μμ 64κ° μ΄κ³Ό)μ μΈμ€ν΄μ€λ₯Ό λ°ννλ€.
μλλ 맀κ°λ³μ λ¬Έμμ΄μ μ
λ ₯λ°μ ν΄λΉ λ¬Έμμ΄μ ν΄λΉνλ Shape
μΈν°νμ΄μ€μ ꡬν체λ₯Ό λ°ννλ μμμ΄λ€.
3λ²κ³Ό λ§μ°¬κ°μ§λ‘ ν΄λΌμ΄μΈνΈλ ν΄λΉ μΈν°νμ΄μ€μ ꡬν체λ₯Ό μ νμ μμ΄ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±νκ³ μ¬μ©ν μ μλ μ₯μ μ κ°μ§κ² λλ€.
5. μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μμ±νλ μμ μλ λ°νν κ°μ²΄μ ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ λ¨
public μμ±μλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν λλ ν΄λΉ ν΄λμ€κ° λ°λμ μ‘΄μ¬ν΄μΌ νμ§λ§ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νλ©΄ ν΄λΉ ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ λλ€.
μ΄λ° νΉμ§μ μλΉμ€ μ 곡μ νλ μμν¬(Service Provider Framework)λ₯Ό λ§λλ κ·Όκ°μ΄ λλ€.
λνμ μΈ μλΉμ€ μ 곡μ νλ μμν¬λ‘λ JDBCκ° μλλ°, κ·Έ μ€ DriverManager
ν΄λμ€μ μ€μ ꡬν μ½λλ₯Ό μΌλΆ κ°μ Έμ 보면 μλμ κ°λ€.
μ μ½λμμ νμΈν μ μλ κ²μ μ 리νλ©΄ μλμ κ°λ€.
private μμ±μλ‘ μΈλΆμμ μΈμ€ν΄μ€ μμ± λ°©μ§
ArrayListλ‘ κ°μ²΄λ€μ κ΄λ¦¬
registerDriver() λ©μλ νλΌλ―Έν°μ Driver μΈν°νμ΄μ€(= μλΉμ€ μ 곡μ μΈν°νμ΄μ€)λ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±(= μ 곡μ λ±λ‘ API)
getConnection() λ©μλλ₯Ό ν΅ν΄ Connection μΈν°νμ΄μ€(= μλΉμ€ μΈν°νμ΄μ€)λ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό λ°ν(= μλΉμ€ μ κ·Ό API)
μ΄λ₯Ό κ°λ΅ν νλ©΄ μλμ κ°μ΄ μ 리 ν μ μλ€.
μ μ ν©ν°λ¦¬ λ©μλμ λ¨μ
1. private μμ±μλ§ μ‘΄μ¬νλ©΄ νμ ν΄λμ€λ₯Ό λ§λ€ μ μμ΄ μμμ΄ λΆκ°λ₯
μ΄λ λ¨μ μ΄μ§λ§, μμ보λ€λ μ»΄ν¬μ§μ μ μ¬μ©νλλ‘ μ λνκ³ λΆλ³ νμ μΌλ‘ λ§λ€ μ μμ΄ λΆλ³μ±μ 보μ₯ν μ μλ μ₯μ μ΄ μλ€.
2. μ μ ν©ν°λ¦¬ λ©μλμ μ΄λ¦μ μμμΌ ν¨
μμ±μλ ν΄λμ€μ μ΄λ¦κ³Ό λμΌνμ§λ§ μ μ ν©ν°λ¦¬ λ©μλλ μ΄λ¦μ μ§μ ν μ μκΈ° λλ¬Έμ ν΄λΉ λ©μλμ μ΄λ¦μ μμμΌ νλ€. μ΄λ¬ν λ¨μ μμ΄ λ리 μλ €μ§ λ€μ΄λ° κ·μ μ ν΅ν΄ λ¬Έμ λ₯Ό μννκ³ μλ€.
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
λ§€λ² μλ‘μ΄ μΈμ€ν΄μ€ μμ± λ³΄μ₯
Object newArray = Array.newInstance(classObject, arrayLen);
getType
getInstanceμ κ°μΌλ, μμ±ν ν΄λμ€κ° μλ λ€λ₯Έ ν΄λμ€μ ν©ν°λ¦¬ λ©μλλ₯Ό μ μν λ μ¬μ©
FileStore fs = Files.getFileStore(path);
newType
newInstanceμ κ°μΌλ, μμ±ν ν΄λμ€κ° μλ λ€λ₯Έ ν΄λμ€μ ν©ν°λ¦¬ λ©μλλ₯Ό μ μν λ μ¬μ©
BufferedReader br = Files.newBufferedReader(path);
type
getTypeκ³Ό newTypeμ κ°κ²°ν λ²μ
List<Complaint> litany = Collections.list(legacyLitany);
Last updated
Was this helpful?