E D R , A S I H C RSS

Static Initializer

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
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:06
Processing time 0.0216 sec