Java μμ 'Class Variable' λλ 'Class Method' λΌ λΆλ¦¬λ, ν΄λΉ Class λ΄μμ 곡μ©μ μΌλ‘ μΈ μ μλ λ³μλ λ©μλλ€μ Static Variable λλ Static Method λΌ λΆλ¦°λ€.
Static Initializer λ μ΄λ¬ν κ°λ€μ 미리 μ
ν
νκΈ° μν΄ μ¬μ©νλ©° λ€μκ³Ό κ°μ λ¬Έλ²μ μ΄μ©νλ€.
static { // ν΄λΉ Code.. x = 10; y=30; .... }
λ¬Έμ λ StaticInitializer λΆλΆμ λν΄μ μμ ν΄λμ€μμ μΉνμ μν¬ μ μλ€λ μ μ΄λ€. μ΄λ κ½€ μ¬κ°ν λ¬Έμ λ₯Ό λ°μνλλ°, νΉν Test λ₯Ό μμ±νλμ€ MockObject λ±μ λ°©λ²μ μ¬μ©ν λ StaticInitializer λ‘ λ μ½λλ₯Ό μΉνμν¬ μ μκΈ° λλ¬Έμ΄λ€. μ μμ μμ‘΄μ±μ κ°μ§λ λ€λ₯Έ κ°μ²΄λ₯Ό μμ±νλ€κ³ νλ€λ©΄ κ·Έ κ°μ²΄λ₯Ό Mock μΌλ‘ μΉννλ λ±μ μΌμ νκ³€ νλλ° StaticInitialzer λ μμ ν΄λΉ ν΄λμ€κ° μΈμ€ν΄μ€ν λ λ λ°λ‘ μ€νμ΄ λμ΄λ²λ¦¬κΈ° λλ¬Έμ μΉνν μ μλ€.
StaticInitialzer μμ κ°λ§ μΉννλ κ²μΌλ‘ (μμν΄λμ€μμ ν΄λΉ Class Variable μ κ°μ λ°κΏμ£ΌλμμΌλ‘) ν΄κ²°λλ λ¬Έμ λΌλ©΄ ν¬κ² μ΄λ ΅μ§ μλ€. νμ§λ§, λ§μΌ μ λΆλΆμ DB λ File λ±(λλ File μ μ¬μ©νλ Logger λ±) μΈλΆ μμμ μ΄μ©νλ ν΄λμ€λ₯Ό μ΄κΈ°ννκ² λλ€λ©΄ μ¬νλ λμ±λ μ¬κ°ν΄μ§λ€. μ²μλΆν° ν΄λΉ Class κ° DB, File λ± ν° μμμ λν΄ μμ‘΄μ±μ κ°μ§κ² λλ κ²μ΄λ€. κ²λ€κ° μ΄λ μμμ νμ¬ ν΄λΉ λΆλΆμ Mock μΌλ‘ μΉννλ €κ³ ν΄λ StaticInitializer κ° λ¨Όμ μ€νλμ΄λ²λ¦¬λ―λ‘ 'μΉν'μ΄ λΆκ°λ₯ν΄μ Έλ²λ¦°λ€.
μ΄λ₯Ό λ°©μ§νλ €λ©΄, StaticInitializer λ₯Ό μΌλ° Method λ‘ μΆμΆνλ€, μμ±μμμ μ΄λ₯Ό νΈμΆνλ€. (λ¨, μΈμ€ν΄μ€λ₯Ό 2κ° μ΄μ λ§λλ ν΄λμ€μΈκ²½μ° λ¬Έμ κ° μκ² λ€.)
κ·Έ μΈμ Static μ κ²½μ°, κ·Έ μ¬μ© κ°λ₯ Focusκ° Global ν΄μ§κΈ° λλ¬Έμ μ΄ λν Bad Smell μ΄ λ κ°λ₯μ±μ΄ λννλ€. κ°μΈμ μΌλ‘λ κ°κΈμ μ΄λ©΄ Static Variable μ μ°μ§ μλ μ΅κ΄μ λ€μ΄λ €κ³ νλ€. --1002
μ΄ λ¬Έμ κ°, final static μΌλ‘ κ°μ΄ μΈν
λ λμ λ¬Έμ κ° μλκ°μ? Mockμ μμ±μμμ κ΅μ²΄ κ°λ₯νμ§ μλμ? --NeoCoin
Mock μμ±μμμ κ°μ΄ κ΅μ²΄λμ΄λ StaticInitializer μμ²΄κ° μ€νλλ€λ μ μλ λ³ν¨μ΄ μμ΅λλ€. λ§μΌ StaticInitializer μμ μΈλΆ μμλ€μ μ¬μ©νλ€λ©΄, Side-Effect λ€μ νΌνκΈ° μ΄λ €μ΄ κ²½μ°κ° λ§λ€λ κ²μ κ°μ‘°νκ³ μΆμμ΅λλ€. --1002
μ€λ¬΄μμ μ λ¬ν StaticInitializer λ₯Ό κ°μ₯ λ§μ΄ λ³Ό μ μλ κ³³μ Logging κ΄λ ¨ μ½λμ΄λ€. λ³΄ν΅ Logging κ΄λ ¨ μ½λλ€μ κ°λ° λ§λ¬΄λ¦¬ μ¦μμ λΆμ΄κ² λλλ°, μΌμ μ μ«κΈ°λ€ 보λ μ¬λλ€μ΄ Logging κ΄λ ¨ μ½λμ λν΄μλ CopyAndPaste μ μ νΉμ λΉ μ§κ² λλ€. μμκ°μ Logging κ³Ό Property(ν΄λΉ ν΄λμ€μ λν νκ²½μ€μ λΆλΆ) μ λν Dependency κ° λ°μνκ² λλ€. ν μ°¨μμμ μ‘°μ¬ν νμκ° μλ€. --1002