BackEnd🌱/Java

[Java] μ‡ΌνŠΈ-μ„œν‚· (Short-Circuit)

dkswnkk 2022. 3. 8. 19:10

μ‡ΌνŠΈ-μ„œν‚· (Short-Circuit)

μ‡ΌνŠΈμ„œν‚·μ΄λž€ 논리 μ—°μ‚°μ—μ„œ 두 ν”Όμ—°μ‚°μž 쀑 μ–΄λŠ ν•œμͺ½λ§Œ 'μ°Έ'이면은 우츑 ν”Όμ—°μ‚°μžμ˜ 값은 ν‰κ°€ν•˜μ§€ μ•Šκ³  λ°”λ‘œ κ²°κ³Όλ₯Ό μ–»λŠ” ν–‰μœ„λ₯Ό λ§ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ 같은 쑰건식이라도 ν”Όμ—°μ‚°μžμ˜ μœ„μΉ˜μ— λ”°λΌμ„œ 연산속도가 λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 

예λ₯Ό λ“€μ–΄ μ•„λž˜μ™€ 같은 μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€. κ³Όμ—° 좜λ ₯ κ²°κ³ΌλŠ” μ–΄λ–»κ²Œ λ‚˜μ˜¬κΉŒμš”?

// JAVA
public class Test {
    public static void main(String[] args) {
        int a = 0, b = 0;
        if (a == 0 || ++b == 1) {
        }
        System.out.print(a + " " + b);
    }
}

μœ„ μ½”λ“œμ˜ 좜λ ₯ κ²°κ³ΌλŠ” 0 0 이 λ‚˜μ˜΅λ‹ˆλ‹€.

μ‹€ν–‰ κ²°κ³Όμ—μ„œ μ•Œ 수 μžˆλ“―μ΄, 두 번의 논리 μ—°μ‚° 후에도 b의 값은 μ—¬μ „νžˆ 0인 μ±„λ‘œ λ‚¨μ•„μžˆμŠ΅λ‹ˆλ‹€. '||(OR)'의 κ²½μš°λŠ” 쒌츑 ν”Όμ—°μ‚°μž (a==0)κ°€ μ°Έμ΄λΌμ„œ 우츑 μ—°μ‚°μžλ₯Ό ν‰κ°€ν•˜μ§€ μ•Šκ³  λ°”λ‘œ λ„˜μ–΄κ°”κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ”°λΌμ„œ 결둠적으둜 같은 쑰건식이라도 ν”Όμ—°μ‚°μžμ˜ μœ„μΉ˜μ— λ”°λΌμ„œ 연산속도가 λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 

즉 μ—°μ‚° κ²°κ³Όκ°€ 'μ°Έ'일 ν™•λ₯ μ΄ 높은 ν”Όμ—°μ‚°μžλ₯Ό μ—°μ‚°μžμ˜ μ•žμͺ½μ— 놓아야 더 λΉ λ₯Έ μ—°μ‚° κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ JAVA뿐만 μ•„λ‹ˆλΌ λ‹€λ₯Έ 언어듀도 Short-Circuit을 μ§€μ›ν• κΉŒμš”? 

 

Short-circuit evaluation - Wikipedia

Programming language construct Short-circuit evaluation, minimal evaluation, or McCarthy evaluation (after John McCarthy) is the semantics of some Boolean operators in some programming languages in which the second argument is executed or evaluated only if

en.wikipedia.org

μœ„ν‚€ν”Όλ””μ•„μ˜ Support in common programming and scripting languages λΆ€λΆ„ λͺ©μ°¨λ₯Ό μ‚΄νŽ΄λ³΄λ©΄ Short-Circuit을 μ§€μ›ν•˜λŠ” μ–Έμ–΄ λͺ©λ‘μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ μ•Œκ³  μžˆλŠ” 언어인 C, C++, JAVA, Kotlin, Python, JSκ³Ό 같은 언어듀도 기본적으둜 Short-Circuit을 지원함을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

회고

int main(){
    int a = 0, b = 0;
    if(a==0 || ++b == 1);
    cout<<a<<' '<<b;
}

μœ„ μ½”λ“œκ°€ λ‹Ήμ—°νžˆ 0 1둜 좜λ ₯이 될 쀄 μ•Œμ•˜λŠ”λ° μ•„λ‹ˆκΈΈλž˜ 찾아보닀가 μ‡ΌνŠΈμ„œν‚·μ— λŒ€ν•΄ μ•Œκ²Œ λ˜μ–΄ μ •λ¦¬ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.