๋ฆฌํฉํ ๋ง ํ๊ณ ์ถ๋ค!
์ค๋์ ๊ฐ๋ง์ ๋ฆฌํฉํ ๋ง ์ฆ๊ธฐ๋ ์ค์ธ๋ฐ
๊ฝค ๊ด์ฐฎ์ ๋ฆฌํฉํ ๋ง์ด๋ผ ์๊ฐ๋์ ์ ์ด๋ด
if(xxx == null)
if(xxx != null)
๋ค์
if(xxx.Isxxed)
if(xxx.Hasxxx)
๋ก ๋ฐ๊พธ๋ ๋ฆฌํฉํ ๋ง์.
์ด๋ฌ๋ฉด ์ฅ์ ์ด ๋์ฒดํฌ๊ฐ ํด๋น ํด๋์ค์ ์ฑ ์์ด ๋์ด์
ํน์ ํด๋์ค์ ํน์ ๋ณ์๊ฐ null์ธ์ง ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๊ฒ ๋จ.
ํนํ xxx == null ์ด๊ฒ์ ํด๋น ๋ณ์๊ฐ null ์ธ์ง ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ๊ฒ์ด์ง,
์ด๋ค '์๋ฏธ'๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ์๋์์?
๊ตฌํ์ ๋งค์ฐ ์ฌํํจ
class Actor{
Item Item {get; private set;}
}
์
class Actor{
private Item _item;
public bool HasWeapon => _item != null;
public bool IsUnEquipped => _item == null;
}
์๋ ๊ฒ ๊ณ ์น๋ฉด ๋ก์.
์ด๋ฌ๋ฉด ๋์ฒดํฌ๋ Actor ์์์๋ง ํํ๊ฒ ๋๊ณ ,
์ธ๋ถ์์๋ ์ข ๋ ์๋ฏธ์๋ ์ฝ๋๋ฅผ ์ธ ์ ์์.
if(Actor.HasWeapon) {
Actor.Attack();
}
if(Actor.IsUnEquipped){
Actor.Equip(newItem)
}
์กํฐ์ ์์ดํ ์ด null์ธ์ง ์ธ๋ถ์์๋ ์ ํ์๊ฐ ์์ด์ก๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ค์ HasWeapon ๋ฑ์ bool ์ด ๋ณด๋ค ๋ณต์กํ ์กฐ๊ฑด์ ๊ฐ์ง๊ฒ ๋์ด๋,
Actor ํด๋์ค๋ง ๊ณ ์ณ์ฃผ๋ฉด ๋๋ฏ๋ก ์ธ๋ถ์ฝ๋์๋ ์๋ฌด๋ฐ ์์ ์ฌํญ์ด ์๊ธฐ์ง ์์ ์ข์.
ํ...
c#8 ๋ ์๋๋ ์ ๋ํฐ ๋ถ๋ค๊ณ ๊ณ ์ํ๋ค...
์๋ IsValid๊ฐ์๊ฑด ๋ง์ด๋ค ์ฐ์ง์์?
๋๋ ํด๋์ค ์ด๊ธฐํ๋๋์ง ์๋๋์ง ์ฑํฌํ ๋ ์ ๋ ๊ฒ ํ๊ธด ํจ. ๋ฃจํ ์์์ ์ธ์ ํธ์ถ๋ ์ง ๋ชจ๋ฅด๋๋ฐ ์๊ฐ ์ด๊ธฐํ๋์ค์ง ์๋์ค์ง ๋ชจ๋ฅด๋๊น
xxx =! null ๋ฌธ์ ๋ฅผ xxx.hasblah ๋ก ๋ฐ๊ฟจ๋ค๊ณ ? ๋ญ๊ฐ์ข ์ด์ํ์ง ์๋;;? - dc App
๊ผญ has๋ฅผ ์ฐ๋ ๊ฑด ์๋๊ณ , ์ฝ๋ ๋ฌธ๋งฅ์ ๋ฐ๋ผ ์ด๋ฆ์ ๋ฐ๋ ์ ์์. ๋ฑ ๋ฐ๊พธ๊ณ ๋๋ฉด ์ด๊ฑธ ์ํ๋ ์ถ์ง๋ง, ์กฐ๊ฑด๋ค์ด ์ถ๊ฐ๋๊ธฐ ์์ํ๋ฉด ์ ์ฉํจ. ํนํ ์ธ๋ถ์์ Actor.Item == null ์ ๊ฒ์ฌํ๊ธฐ ์์ํ๋ฉด ๊ณจ์น์ํ. ์ด๋ฏธ Item์ด ๋ ธ์ถ๋ ๊ฑฐ๋ผ์ Item์ public ๋ณ์๋ฅผ ์์ ํ ์ฐ๋ ค๋ ์๊ธฐ๊ณ .
if(Actor.HasWeapon) { Actor.Attack(); }
์ด๊ฑฐ๋ฅผ Actor?.Attack();๋ก ํ๋๊ฒ ๋ซ์ง์๋
๊ทธ๊ฑด Actor ๊ฐ null ์ธ์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์๋ํ๋ ์ฝ๋๊ณ , Actor.TryAttack() ๊ฐ์๊ฑธ๋ก ํ์ณ๋ ๋๊ฒ ๋ค. ์ด ๋ฆฌํฉํ ๋ง์ ํฌ์ธํธ๋ ๋์ฒดํฌ๋ฅผ ์ข ๋ ์๋ฏธ์๋ ๊ฒ์ฌ๋ก ๊ฐ์ธ์ ์ฝ๊ธฐ ํธํ๊ฒ ํ๋ ๊ฑฐ์.
๊ทธ๋ฆฌ๊ณ ๋ฆฌํฉํ ๋ง์ ์ทจํฅ๋ ์๋นํ ํ๋ ๋ถ์ผ๋ผ์ ๊ฑ ์ด๋ ๊ฒ๋ ์๊ฐํ๋๊ตฌ๋ ํ๋ฉด ์ข๊ฒ ๋ค.
๋นผ๋จน์๊ฑด๋ฐ, ์ด๊ฑด ํด๋น ํ๋กํผํฐ(๋ณ์) ๊ฐ public get์ผ ๋ ์ด์ผ๊ธฐ์. private ๋ณ์๋ค์ ๊ตณ์ด ์ด๋ ๊ฒ ํ ํ์ ์์ด ๊ฑ ๋์ฒดํฌ ํด์ผ์ง ๋ญ... ๊ทธ๊ฑธ ๋นผ๋จน์ผ๋ ๋๊ฒ ์ด์ํ๊ฒ ๋ณด์ด๋ค ใ ใ
์ธ๋ฆฌ์ผ์ด IsValid์
?. sugar ์ฐ์ง