์ผํธ-์ํท (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๋ก ์ถ๋ ฅ์ด ๋ ์ค ์์๋๋ฐ ์๋๊ธธ๋ ์ฐพ์๋ณด๋ค๊ฐ ์ผํธ์ํท์ ๋ํด ์๊ฒ ๋์ด ์ ๋ฆฌํ๊ฒ ๋์์ต๋๋ค.
'BackEnd๐ฑ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ธํฐํ์ด์ค(interface) ์ด ์ ๋ฆฌ (0) | 2022.03.30 |
---|---|
[Java] super์ super()์ ๊ฐ๋ (0) | 2022.03.24 |
[Java] static ๊ณผ instance์ ์ฐจ์ด (0) | 2022.03.21 |
[Java] JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ์์์ ์์ญ์ ๊ดํ ๊ณ ์ฐฐ (3) | 2022.03.18 |
[Java] ์ด๋ฆ ๋ถ์ ๋ฐ๋ณต๋ฌธ(Labeled-Loop) (0) | 2022.03.13 |
[Java] JIT ์ปดํ์ผ๋ฌ(Just-In-Time) (0) | 2022.03.08 |
๋๊ธ