ํฌ์ŠคํŠธ

Short-Circuit Evaluation

Short-Circuit Evaluation

๐Ÿ’ซ Short-Circuit Evaluation


๋‹จ๋ฝ ๋ฐฉ์‹

์ฐธ๊ณ  - ์œ„ํ‚คํ”ผ๋””์•„, ์ฐธ๊ณ  - ์ œ๋กœ๋‹ˆ๋ชจ๋‹˜์˜ ๊ธ€

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š”, ๋ถˆ ์—ฐ์‚ฐ์— Short-Circuit Evaluation ์ด ์ ์šฉ๋œ๋‹ค.

๊ทธ๋ฆผ

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ,
์ˆœ์„œ๋Œ€๋กœ ์—ฐ์‚ฐํ•˜๋Š” ๋„์ค‘ ์ด๋ฏธ ๊ฒฐ๊ณผ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๊ฒฝ์šฐ,
๊ตณ์ด ๋‚จ์€ ํ”ผ์—ฐ์‚ฐ์ž๋“ค๊นŒ์ง€ ๊ณ„์‚ฐํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๊ฒฐ๊ณผ๊ฐ€ ๊ฒฐ์ •๋œ ์‹œ์ ์—์„œ ๊ณ„์‚ฐ์„ ๋งˆ์นœ๋‹ค.

1
2
SomeObject a = null;
if (a != null && a.SomeFunc())

C# ์—์„œ && ์€ Short-Circuit Evaluation ์ด ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—,
์œ„ ์ฝ”๋“œ์—์„œ๋Š” a != null ์—์„œ ๊ณ„์‚ฐ์ด ๋๋‚˜๊ณ , a.SomeFunc() ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์•„ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ด๋Ÿฐ์‹์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ Short-Circuit Evaluation ์ด ์ ์šฉ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด,
์œ„ ์ฝ”๋“œ์—์„œ a ๊ฐ€ null ์ธ์ฑ„๋กœ a.SomeFunc() ๊ฐ€ ์‹คํ–‰๋˜์–ด NullReferenceException ์ด ๋ฐœ์ƒํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

1
2
3
4
5
6
7
8
9
// 1 : ์ตœ์†Œ 1ms
if (takes1ms() || takes1s())
// 2 : ์ตœ์†Œ 1s
if (takes1s() || takes1ms())

// a : ์ตœ์†Œ O(1)
if (boolVariable || take1s())
// b : ์ตœ์†Œ 1s
if (takes1s() || boolVariable)

๋˜, ๋งŒ์•ฝ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ํ”ผ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ,
์ƒ๋Œ€์ ์œผ๋กœ ๋น„์šฉ์ด ๋†’์€ ํ•จ์ˆ˜๋ฅผ ๋’ท์ชฝ์— ๋ฐฐ์น˜ํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

1
2
if (false & SomeFunc())
if (true | SomeFunc())

๋ฐ˜๋ฉด, ๊ฒฐ๊ณผ์™€ ์ƒ๊ด€์—†์ด ํ”ผ์—ฐ์‚ฐ์ž๋กœ ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ํ•จ์ˆ˜๋“ค์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
(์˜ˆ์‹œ๊ฐ€ ๋”ฑ ๋– ์˜ค๋ฅด์ง€๋Š” ์•Š์ง€๋งŒ)

์ด ๊ฒฝ์šฐ, C# ์—์„œ๋Š” & ์ด๋‚˜ | ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
& ์™€ | ๋Š” ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋กœ ์“ฐ์ด๊ธฐ๋„ ํ•˜์ง€๋งŒ, ๋ถˆ ์—ฐ์‚ฐ ์‹์— ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ, ๋ถˆ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋กœ์จ ์‚ฌ์šฉ๋œ๋‹ค.

& ์ด๋‚˜ | ๋ฅผ ๋ถˆ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋กœ์จ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฒฐ๊ณผ์™€ ์ƒ๊ด€์—†์ด ๋ชจ๋“  ํ”ผ์—ฐ์‚ฐ์ž๋“ค์„ ๊ณ„์‚ฐํ•œ๋‹ค.
๋•Œ๋ฌธ์— ์œ„ ๋‘ ์ค„์˜ ์ฝ”๋“œ๋Š”, ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž์—์„œ ์ด๋ฏธ ๊ฒฐ๊ณผ๊ฐ€ ๊ฒฐ์ •๋˜์–ด๋ฒ„๋ฆฌ์ง€๋งŒ, ๊ณ„์‚ฐ์„ ๋๋‚ด์ง€ ์•Š๊ณ  SomeFunc() ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

์ด๋•Œ, ์ด๋Ÿฐ & ์™€ | ๋ฅผ && ์™€ || ์— ๊ตฌ๋ถ„์ง€์–ด,
Eager Operators (&, |) ์™€ Short-Circuit Operators (&&, ||) ๋กœ ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋‹ค.


C# ํŠœํ”Œ ๋น„๊ต ์‹œ, Short-Circuit Evaluation ์ด ์ ์šฉ๋œ๋‹ค.

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.