ReSharper ๋ฐ (์ต๊ทผ) Visual Studio๋ ArgumentNullException ์ฝ์ ๋ฐ ์ ์ฌํ ์ธ์ ๊ฒ์ฌ๋ฅผ ์ ์ํฉ๋๋ค. ๊ทธ๊ฒ์ ์ฝ๋๋ฒ ์ด์ค์ ์ฐ์ฐํ ์ฌ๋ฌ ๋ฒ ์๊ฐํ์ ์ ๋๋ก ๊ทผ์ก ๊ธฐ์ต๋ ฅ์ ๋๋ค.
์ง์ ๋์ง๋ ๊ฒ์ ํ๋ฆ ์ ์ด ๋ถ์์ ๊ด์ ์์ ๋ณด๋ค ๊ด์ฉ์ ์ธ C#์
๋๋ค. C # ์ปดํ์ผ๋ฌ๋ ๋น์ ์ด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ค์์น ์ผ์ด์ค์์ ์ฌ์ฉ์ด๋ ํด์ํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ๋ฐํํ๊ฑฐ๋ ์ด๊ธฐํ ํ ํ์๊ฐ ์์ต๋๋ค ๊ฒ์ ์ดํด throw
๋ณด๋ค๋ Guard
. ReSharper์ null ํ๋ฆ ๊ฒ์ฌ๋ ๋์ผํ ๋ฐฉ์์
๋๋ค.
๋ํ C# 7.0์์๋ throw ์์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด _foo = foo ?? throw new ArgumentNullException(nameof(Foo));
๊ตฌ๋ฌธ์
๋๋ค.
๊ธฐ๊ณ ์์ ์ฐ๋ฆฌ ์์ ์ด Guard๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ง์ ์์ธ๋ฅผ ๋์ง๋๋ก ํ์ฉํ๋ ๋ค๋ฅธ ์ฅ๋จ์ ์ ๋ฌด์์ ๋๊น?
๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ธฐ์ตํ๋ค๋ฉด Guard
ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ ์ฅ์ ์ ์ฌ์ฉ์ ์ฉ์ด์ฑ์
๋๋ค. C# ์ธ์ IDE์์๋ ๋ ์ด์ ์ ๋ ์๋ก์ด ๊ธฐ์ฌ์์๊ฒ ๊ฐ์ฅ ์ฌ์ด ์ต์
์ด ์๋๋๋ค. ์ผ๊ด์ฑ์ด ํ์ํฉ๋๊น? ์ผ๊ด์ฑ์ ์ฐ๋ฆฌ ์ค ๋๊ตฐ๊ฐ์๊ฒ ๊ฐ์ฅ ์ฌ์ด ๊ฒ๊ณผ (์ ์ฌ์ ์ผ๋ก) ์ฐ๋ฆฌ ์ค ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๊ฐ์ฅ ์ฌ์ด ๊ฒ์
๋๋ค.
๋๋ ๊ฐ์ธ์ ์ผ๋ก ๊ฐ๋ ํด๋์ค๋ฅผ ์ข์ํ์ง๋ง ๋ฐ๊ฒฌ ๊ฐ๋ฅ์ฑ ๋ฌธ์ ์ ๋์ํฉ๋๋ค. ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ผ๋ฐ ๊ธฐ์ฌ์์๊ฒ ์ ์ํ์ง๋ง ์ผํ์ฑ ๊ธฐ์ฌ์์๊ฒ๋ ์ธ๊ธํ์ง ์์ต๋๋ค. ์ ๋ ์ด๊ฒ์ด ์ฐ๋ฆฌ์๊ฒ ํนํ ์ผ๊ด์ฑ์ด ํ์ํ ์์ญ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ ์ฃ ? ์์ ๋ ๋ณด๋ฉด ๊ธฐ์์ง๋ง ์์ ๋๋ ๊ฑฑ์ ํ์ง ์์ต๋๋ค.
๋๋ ์ด ๋ฌธ์ ์ ๊ฒฐ๊ณผ์ ์๋นํ ๋ฌด๊ด์ฌํฉ๋๋ค. ์ด๋ ์ชฝ์ด๋ ์ ์๊ฒ๋ ๊ด์ฐฎ์ต๋๋ค ๐
๋ ์ญ์ ๊ทธ๊ฒ์ ๋ํด ๋ค์ ๋๋ดํ๋ค. ์์ธ ์์ฑ์์ ์ผ๊ด์ฑ๊ณผ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ์ ์ ๊ณตํ์ง๋ง(์ ๋ ๋ฉ์์ง์ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๊ฑฐ๊พธ๋ก ๋ช ๋ฒ ๋ณธ ์ ์ด ์์ต๋๋ค), ํธ์ถ ์คํ์ ์ถ๊ฐ ๋ฉ์๋๋ ์ถ๊ฐํฉ๋๋ค. ๋ํ, ๋ง์ํ์ ๋๋ก ์๋ก์ด C# ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ํจ์ฌ ์ฌ์์ง๋๋ค.
๋๋งค ํผ์ง๊ฐ ํ์ํ์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์๊ตฌํ์ง ์๋ ๊ฒ์ ๊ด์ฐฎ์ต๋๋ค.
๋ชจ๋ ๊ฐ์ฌํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๊ฐ์ธ์ ์ผ๋ก ๊ฐ๋ ํด๋์ค๋ฅผ ์ข์ํ์ง๋ง ๋ฐ๊ฒฌ ๊ฐ๋ฅ์ฑ ๋ฌธ์ ์ ๋์ํฉ๋๋ค. ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ผ๋ฐ ๊ธฐ์ฌ์์๊ฒ ์ ์ํ์ง๋ง ์ผํ์ฑ ๊ธฐ์ฌ์์๊ฒ๋ ์ธ๊ธํ์ง ์์ต๋๋ค. ์ ๋ ์ด๊ฒ์ด ์ฐ๋ฆฌ์๊ฒ ํนํ ์ผ๊ด์ฑ์ด ํ์ํ ์์ญ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ ์ฃ ? ์์ ๋ ๋ณด๋ฉด ๊ธฐ์์ง๋ง ์์ ๋๋ ๊ฑฑ์ ํ์ง ์์ต๋๋ค.
๋๋ ์ด ๋ฌธ์ ์ ๊ฒฐ๊ณผ์ ์๋นํ ๋ฌด๊ด์ฌํฉ๋๋ค. ์ด๋ ์ชฝ์ด๋ ์ ์๊ฒ๋ ๊ด์ฐฎ์ต๋๋ค ๐