[Java] λ¨μΆ νκ°(Short-circuit Evaluation)
λ¨μΆ νκ°(Short-circuit Evaluation)λ?
λ¨μΆ νκ°λ ννμμ κ²°κ³Όλ₯Ό κ²°μ νλλ°μ νμν μ΅μνμ μ°μ°λ§ μννλ κ²μ μλ―Ένλ€.
λ€λ₯΄κ² λ§νλ©΄, ννμμ κ²°κ³Όλ₯Ό κ²°μ νλ λμ€μ κ²°κ³Όκ° νμ λ κ²½μ°, λλ¨Έμ§ μ°μ°μ μννμ§ μκ³ μλ΅νλ κ²μ λ§νλ€.
κ·Έλ¦¬κ³ λ¨μΆ νκ°λ λ Όλ¦¬ μ°μ°μμ ν¨μ¨μ±μ λμ΄λ μ€μν κ°λ μ΄λ€.
π‘ ννμ(Expression)
ννμμ κ°μ κ³μ°νκΈ° μν΄ μ¬μ©νλ μ½λμ ν μ‘°κ°μΌλ‘, κ²°κ³Όμ μΌλ‘ νλμ κ°μ λ§λ€μ΄λΈλ€.
μλ₯Ό λ€μ΄ 10 + 3 μ 13μ΄λΌλ κ°μ λ§λ€μ΄λ΄λ ννμμ΄λ€.
λ¨μΆ νκ°μ μ μ©
λ Όλ¦¬ μ°μ°μμΈ AND(&&)μ OR(||) μ°μ°μ λ¨μΆ νκ°λ₯Ό μννλ€.
λ Όλ¦¬κ³±(&&) μ°μ°
λ Όλ¦¬κ³±(&&) μ°μ°μλ λ νΌμ°μ°μκ° λͺ¨λ true μΌ λ, trueλ₯Ό λ°ννλ€.
κ·Έλ¦¬κ³ μ’νμμ μ°νμΌλ‘ νκ°κ° μ§νλλ€.
(νΌμ°μ°μ 1) && (νΌμ°μ°μ 2) κ° μμΌλ©΄ νΌμ°μ°μ 1μ΄ λ¨Όμ νκ°λκ³ , νΌμ°μ°μ 2κ° νκ°λλ κ²μ΄λ€.
νΌμ°μ°μ 1μ΄ trueλΌκ³ ν΄μ ννμ μ 체λ₯Ό trueλ‘ νκ°ν μλ μκ³ , νΌμ°μ°μ 2κΉμ§ νκ°λ₯Ό ν΄λ³΄μμΌνλ€.
μ¦, λλ²μ§Έ νΌμ°μ°μμΈ νΌμ°μ°μ 2κ° λ Όλ¦¬κ³± μ°μ°μ κ²°κ³Όλ₯Ό κ²°μ νλ€κ³ λ³Ό μ μλ€.
κ·Έλ°λ° μ΄λ νΌμ°μ°μ 1μ΄ false λΌλ©΄, νΌμ°μ°μ 2μ κ²°κ³Όμλ κ΄κ³μμ΄ λ Όλ¦¬κ³± μ°μ°μ κ²°κ³Όκ° falseκ° λλ€.
λ Όλ¦¬κ³±(&&) μ°μ°μ λ νΌμ°μ°μκ° λͺ¨λ trueμ΄μ¬μΌνκΈ° λλ¬Έμ΄λ€.
λ Όλ¦¬ν©(||) μ°μ°
λ Όλ¦¬ν©(||) μ°μ°μλ λ νΌμ°μ°μ μ€ νλλΌλ true μΌ λ, trueλ₯Ό λ°ννλ€.
λ Όλ¦¬κ³± μ°μ°μμ λ§μ°¬κ°μ§λ‘ μ’νμμ μ°νμΌλ‘ νκ°λλ€.
(νΌμ°μ°μ 1) || (νΌμ°μ°μ 2) κ° μλ€κ³ ν λ, νΌμ°μ°μ 1μ΄ trueλΌλ©΄ λλ²μ§Έ νΌμ°μ°μμΈ νΌμ°μ°μ 2λ₯Ό νκ°νμ§ μμλ μ΄ ννμμ΄ trueλΌκ³ νκ°ν μ μλ€.
κ·Έλ°λ° μ΄λ νΌμ°μ°μ 1μ΄ false λΌλ©΄, νΌμ°μ°μ 2λ₯Ό νκ°ν΄μΌμ§λ§ μ΄ ννμμ κ²°κ³Όλ₯Ό νμ ν μ μλ€.
λ Όλ¦¬ν© μ°μ°μλ λ μ€ νλλΌλ trueλ©΄ trueλ₯Ό λ°ννκΈ° λλ¬Έμ΄λ€.
λ Όλ¦¬κ³±(&&) μ°μ°μμ λ Όλ¦¬ν©(||) μ°μ°μμ λ¨μΆ νκ°
κ·ΈλΌ λ Όλ¦¬κ³±, λ Όλ¦¬ν© μ°μ°μμ λ¨μΆ νκ°κ° μ΄λ»κ² μ΄λ€μ§λμ§ μμ보μ.
κ²°λ‘ μ λ§νμλ©΄,
λ Όλ¦¬κ³±(&&) μ°μ°μλ 첫λ²μ§Έ νΌμ°μ°μκ° false λ©΄, μ΄ν νΌμ°μ°μμ λν΄μλ νκ°λ₯Ό νμ§ μκ³ ,
λ Όλ¦¬ν©(||) μ°μ°μλ 첫λ²μ§Έ νΌμ°μ°μκ° true λ©΄, μ΄ν νΌμ°μ°μμ λν΄μλ νκ°λ₯Ό νμ§ μλλ€.
λ€μ μμ λ‘ μμΈν μμ보μ.
1 == 0 : false
1 / 0 == 0 : Error
μ‘°κ±΄μ΄ μμ κ°μ΄ μλ€ν λ, κ° κ²°κ³Όλ 1 == 0 μ false, 1 / 0 == 0 μ μλ¬κ° λ°μνλ€.
κ·ΈλΌ λκ°μ νΌμ°μ°μλ‘ ννμμ ꡬμ±ν΄μ λ Όλ¦¬κ³± μ°μ°μ νλ©΄ μ΄λ»κ² λ κΉ?
1 == 0 && 1 / 0 == 0
μ ννμμμ λλ²μ§Έ νΌμ°μ°μμ 1 / 0 μ μλ¬κ° λ°μνλ―λ‘, μλ¬κ° λ°μνμ§ μμκΉνμ§λ§, κ²°κ³Όλ false μ΄λ€!
λ Όλ¦¬κ³±(&&) μ°μ°μλ μ’νλΆν° μ°μ°μ νκ³ , λ¨μΆ νκ°λ₯Ό νκΈ° λλ¬Έμ 첫λ²μ§Έ νΌμ°μ°μκ° false λΌλ©΄, λλ²μ§Έ νΌμ°μ°μμ λν΄μλ νκ°λ₯Ό νμ§ μκ³ (κ²°κ³Όκ° νμ λμκΈ° λλ¬Έ) false λ₯Ό λ°ννλ€.
λλ²μ§Έ νΌμ°μ°μμ κ΄λ ¨λ μ½λλ μ€ννμ§ μμΌλ―λ‘ Dead Codeκ° λλ€.
*Dead Code: μ€νλμ§ μλ μ½λ
λ Όλ¦¬ν©(||) μ°μ°μλ λ§μ°¬κ°μ§λ‘ λ€μ μμ λ‘ μ΄ν΄λ³΄μ.
1 == 0 || 1 / 0 == 0
μ΄λλ 첫λ²μ§Έ νΌμ°μ°μκ° false μ΄κ³ , κ²°κ³Όκ° νμ λμ§ μμμΌλ―λ‘ 1 / 0 == 0 κΉμ§ μ°μ°μ μννκ² λμ΄μ μλ¬κ° λ°μνλ€.
1 == 1 || 1 / 0 == 0
λ§μ½ 첫λ²μ§Έ νΌμ°μ°μκ° 1 == 1λ‘, κ²°κ³Όκ° true λΌλ©΄, λλ²μ§Έ νΌμ°μ°μλ₯Ό νκ°νμ§ μμΌλ―λ‘ κ²°κ³Όλ‘ trueκ° λ°νλλ€.
λ Όλ¦¬ν©(||) μ°μ°μλ μ’νλΆν° μ°μ°μ μννκ³ λ¨μΆ νκ°λ₯Ό νκΈ° λλ¬Έμ μμ μ°μ°μ΄ true λΌλ©΄ κ²°κ³Όκ° νμ λμ΄ μ΄ν μ°μ°μ μννμ§ μλλ€.
λ§μ°¬κ°μ§λ‘ λλ²μ§Έ νΌμ°μ°μμ κ΄λ ¨λ μ½λλ μ€ννμ§ μμΌλ―λ‘ Dead Codeκ° λλ€.
λ¨μΆ νκ° κ·μΉ
λ¨μΆ νκ°μ κ·μΉμ μλ νμ κ°λ€.
λ¨μΆ νκ° ννμ | κ²°κ³Ό |
true && anything | anything |
false && anything | false |
true || anything | true |
false || anything | anything |
λ¨μΆ νκ°μ μ΄μ
λ¨μΆ νκ°μ μ΄μ μ ν¨μ¨μ± ν₯μμ λ°λ₯Έ μ±λ₯ ν₯μμ μλ€.
λ Όλ¦¬ μ°μ° μνμ κ²°κ³Όκ° μ΄λ―Έ κ²°μ λ κ²½μ° λλ¨Έμ§ λΆλΆμ μννμ§ μκΈ° λλ¬Έμ λΆνμν κ³μ°μ μλ΅νμ¬ ν¨μ¨μ±μ λμΈλ€. μ΄λ νΉν μ°μ°μ λ§μ΄ μννλ λ©μλλ I/O μμ μ΄ ν¬ν¨λ κ²½μ°μ μ΄μ μ΄ μ»€μ§λ€.
boolean result = (condition1 && condition2); // condition1μ΄ falseλΌλ©΄ condition2λ νκ°λμ§ μμ
κ·Έλ¦¬κ³ λ¨μΆ νκ°λ νΉμ 쑰건μμλ§ λ©μλλ₯Ό νΈμΆνκ±°λ μ°μ°μ μννκ³ μ ν λ μ μ©νκ² μ°μΈλ€.
if (obj != null && obj.someMethod()) {
// objκ° nullμ΄ μλ κ²½μ°μλ§ obj.someMethod()κ° νΈμΆ
}
λν νΉμ μ°μ°μ μ€μ λ‘ νμν κ²½μ°μλ§ μννκ²λ νλ€.
if (condition && someMethod()) {
// someMethod()λ conditionμ΄ trueμΈ κ²½μ°μλ§ νΈμΆ
}
μ΄λ λ°°μ΄μ΄λ 리μ€νΈ κ°μ μλ£ κ΅¬μ‘°λ₯Ό μ κ·Όν λ λ²μ 체ν¬μμλ μ μ©νλ€.
if (idx < array.length && array[idx] == target) {
// array[idx]μ μμ ν μ κ·Ό κ°λ₯
}
λ§μΉλ©°,
λ¨μΆ νκ°λ₯Ό λͺ¨λ₯Έλ€λ©΄ μ½λ ꡬνμ μλνλλ‘ κ²°κ³Όκ° λμ€μ§ μκ±°λ, λ°νμ μλ¬κ° λ°μνλ λ±μ λ¬Έμ κ° λ°μν μ μκ² λ€.
μ΄λ² κΈ°νλ₯Ό ν΅ν΄ λ¨μΆ νκ°λ₯Ό μ μ 리ν κ² κ°λ€.
κ·Έλ¦¬κ³ Java μΉ΄ν κ³ λ¦¬λ‘ λΆλ₯νκΈ΄ νμ§λ§, λ¨μΆ νκ°λ λλΆλΆμ μ£Όμ νλ‘κ·Έλλ° μΈμ΄μμ μ§μνλ€κ³ νλ€.
μ°Έκ³ ν¬μ€ν
[JavaScript] λ¨μΆ νκ°
μ€λμ λ¨μΆ νκ°μ λν΄ μμ보μ [ λ Όλ¦¬ μ°μ°μλ₯Ό μ¬μ©ν λ¨μΆ νκ° ] λ Όλ¦¬ ν© (| |) λλ λ Όλ¦¬ κ³± (&&) μ°μ°μ ννμμ μΈμ λ 2κ°μ νΌμ°μ°μ μ€ μ΄λ νμͺ½μΌλ‘ νκ°λλ€. λ€μ μμ λ₯Ό μ΄ν΄λ³΄μ
despiteallthat.tistory.com