ํ์ฌ ์บ๋ฆญํฐ ์ํ์ ๋ฐ๋ผ์
๋ฐ์ฌํ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ค๋ฅด๊ฒ ํ๋ค๊ณ ์๊ฐํด๋ณด์
if๋ฌธ์ผ๋ก ๊ตฌํํ ๊ฒฝ์ฐ
fire() {
if(this.state == A) { // ํ์ด ๋ฐ์ฌ }
else if(this.state == B) { // ํ์ฐฝ ๋ฐ์ฌ }
else if(this.sate == C) { // ๋ฅ ๋ฐ์ฌ }
}
์ด๋ฐ ํํ๋ฅผ ๋๊ฒ ์ง
์ด๋ฐ ๊ฒฝ์ฐ ๋ ์ด์ ๋ฐ์ฌ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์๋
๋ ์ด์ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค๊ณ
๋ค์ ์บ๋ฆญํฐ ์ฝ๋๋ก ๋ค์ด๊ฐ์
else if(this.state == D) { // ๋ ์ด์ ๋ฐ์ฌ }
๋ฅผ ์ถ๊ฐํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ์ง
๋ญ ๊ทธ ์๊ฐ ์ ์ผ๋ฉด ์๊ด์์ง๋ง ๋ฐ์ฌํ ๊ฐ์ฒด๊ฐ ๋์ด๋ ์๋ก
ํ๋์ ํ์ผ์ ๋๋ฌด๋ง์ ์ฝ๋(ํ์ด ๋ฐ์ฌ ์ฝ๋, ํ์ฐฝ ๋ฐ์ฌ ์ฝ๋, ๋ฅ ๋ฐ์ฌ ์ฝ๋, ๋ ์ด์ ๋ฐ์ฌ ์ฝ๋)๊ฐ ๋ด๊ธฐ๊ฒ ๋๊ณ
์ ์ง๋ณด์๊ฐ ํ๋ค์ด์ ธ.
์ด ๊ฒฝ์ฐ์๋ Projectile ์ด๋ ๊ฐ์ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ,
๊ทธ ์์ fire(์ ๋นํ ํ๋ผ๋ฏธํฐ)๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ๊ฒ ๋์ง.
์บ๋ฆญํฐ๋ ์๊ธฐ๋ง์ Projectile ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ,
Projectile์ ์์๋ฐ์ ํ, ํ์ฐฝ, ๋ฅ, ๋ ์ด์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ
๊ฐ๊ฐ์ fire()๋ฅผ ๊ตฌํํด์ฃผ๋ ๊ฑฐ์ง.
๊ฒฐ๊ตญ ์บ๋ฆญํฐ์ fire์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋๊ณ
fire() { myProjectile.fire(์ ๋นํ ํ๋ผ๋ฏธํฐ); }
๊ฐ๊ฐ์ ๋ฐ์ฌ ์ฝ๋๋ ๊ฐ๊ฐ์ ์ฝ๋ ํ์ผ์์ ์ ์๋๋ ๊ฑฐ์ผ
์บ๋ฆญํฐ์ myProjectile๋ง setProjectile() ๋ฑ ํจ์๋ฅผ ๋ง๋ค์ด์
ํ์ด, ํ์ฐฝ, ๋ฅ, ๋ ์ด์ ๋ฑ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋๊ณ ,
C#์์ ์ง์ํ๋ polymorphism์ ์ต๋ํ ์ด์ฉํ ์ ์๊ฒ ๋์ง.
์ด๋ ๊ฒ ๋๋ฉด ์บ๋ฆญํฐ์ fire()์๋ if๊ฐ ์ ๋ถ ์ฌ๋ผ์ง๊ฒ ๋์ง. ์ฝ๋๋ ์งง์์ง๊ณ ,
๋ฌผ๋ก ํ, ํ์ฐฝ, ๋ฅ, ๋ ์ด์ ๊ตฌํ ๋ถ์๋ ์ฐ์ผ ์ ์๊ฒ ์ง.
๋ ์ข์ ์ ์ ์๋ก์ด ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค๊ณ ์บ๋ฆญํฐ์ ์ฝ๋๋ฅผ ๊ณ ์น์ง ์์๋ ๋๋ค๋ ์ ์ด์ผ.
์๋กญ๊ฒ ๋ง๋ ๋ค์์ ์ธ๋ถ์์ ์บ๋ฆญํฐ์ setProjectile(์๋กญ๊ฒ ๋ง๋ ํฌ์ฌ์ฒด) ๋ง ์ง์ด๋ฃ์ผ๋ฉด ๋๋๊น.
if๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํ๋ก๊ทธ๋๋ฐ ํ๋๊ฑด ๋ถ๊ฐ๋ฅ ํ์ง๋ง
๊ตฌํ๋ถ๊ฐ ์๋ ๊ตฌ์กฐ์ ์ธ ๋ถ๋ถ์์๋ ์ต๋ํ ์ค์ด๋๊ฒ ๋ง์
์ด๊ฑฐ์ง ์ผํญ์ฐ์ฐ์ ๊บผ๋ด๋ ์ ๋ค ๊ฐ๋๋ฆฌ๊ณ ์ถ์
์ผํญ์ฐ์ฐ์๋ if๋ฌธ ์๋๊ฐ? ์ฐ๋๋ฐฉ๋ฒ๋ง ๋ค๋ฅธ๊ฑด์ค ์์๋๋ฐ
๊ทธ๋๊น ๋์ด ๊ฐ์๊ฑด๋ฐ if ์ ์ฐ๋๊ฒ ์ผํญ ์ฐ๋ผ๊ณ ์ดํดํ๋ ์ ๋ค ์์ด์ ๊ทธ๋ผ
๋ด๊ฐ ์ ๋ชฐ๋ผ์ ๊ทธ๋ฌ๋๊ฑด์ง๋ ๋ชจ๋ฅด๊ฒ ๋๋ฐ ๊ฒฐ๊ตญ ํจ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ ํธ์ถํ๋๊ฑฐ๋ ๋ฌด์จ์ฐจ์ด์ธ๊ฑฐ์?
์ฑ๋ฅ์์ ์ฐจ์ด๋ ์์ด
๋จ์ง ์ข์ ํ๋ก๊ทธ๋๋ฐ์ด๋ ์ด๋ฐ๊ฒ์ด๋ค ๋ผ๋๊ฑด ์ด๋์ ๋ ์ ํด์ ธ ์๊ณ , ๊ทธ์ ๋ฐ๋ผ์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ฐ๊พผ๊ฑฐ์ผ
์๊ฐ ๋งํ ์์๋ก ๋ค์๋ฉด ๊ทธ๋ฅ if else๊ฐ ์ฌ๋ผ์ง๊ณ ๊ฐ ์๋ธํด๋์ค์ ํจ์ ๊ตฌํ๋ถ๋ก ๊ตฌํ์ด ๋๋ ์ง. ์ด๊ฒ๋ง ๊ฐ์ง๊ณ ๋ ๋ฐ๋ก ์ ์ข์์ง ๋ชจ๋ฅผ ์ ์๊ฒ ์ง๋ง ์ด๋ฐ ํํ์ ํจ์๊ฐ ๋ง์์ง์๋ก ๊ฐ ๋ฐ์ฌ์ฒด์ ํน์ฑ์ ๋ง์ถฐ์ ์ปค์คํฐ๋ง์ด์ฆ ํด์ค์ผ ํ๋ ๊ตฌํ๋ถ๊ฐ ํ ๊ณณ์ ๋ชจ์ฌ์๋๊ฒ ํธํจ. ๊ฐ์ฒด์งํฅ์ด๋ผ๋๊ฒ ๋ฐ๋ก ๊ทธ๋ฐ ๋ฐฉํฅ์ฑ์ ๋ฐ๋ฅด๋ ๋ชจ๋ธ์ธ๊ฑฐ๊ณ .. ๊ทผ๋ฐ ๋ด๊ฐ ์ ์ด๋ฅผ ๋ชปํ๋๋ฐ ํจ์๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ ํธ์ถํ๋ค๋๊ฒ ๋ฌด์จ ๋ง์?
๊ทธ๋ฌ๋๊น ์ด์ ์ข ๋ฅ๋ณ๋ก ํจ์๋ฅผ ๋ง๋ค์ด ๋๊ณ ํ์ํ ๋ ๋ถ๋ฌ์ฐ๋๊ฑฐ๋ ๋ฌด์จ์ฐจ์ด๋๊ณ ๋ฌผ์ด๋ณธ๊ฑฐ์
์ข ๋ฅ๋ณ๋ก ํจ์๋ฅผ ๋ง๋ค์ด๋์ผ๋ฉด ์ด์์ด ์ถ๊ฐ๋ ๋๋ง๋ค ํจ์๋ ์ถ๊ฐํ๊ณ if๋ฌธ๋ ์ถ๊ฐํด์ค์ผํ์๋ ํด๋์คํ ์์ผ๋์ผ๋ฉด ๊ทธ๋ฅ state์ ๋ง๋ ์ด์ ์ฐพ์์ fireํจ์ ํธ์ถํด์ฃผ๋ฉด ๋๋๋ฐ ํ์ฅ์ฑ์ด ๋ฌ๋ผ์ง
์ค์์น๋ฌธ,ifelse๋ค์ค์ผ๋ก ๋ง๋ค๋ฉด ๊ทธ ๊ฐ์๋งํผ ์ฐ์ฐ์ ๋จน์์, O n ,์ธ๊ฑฐ๊ณ ๊ตฌ์กฐ ์ก์์ ํธ์ถํด์ฃผ๋ฉด O 1 ์ด๊ณ ์กด๋ ํฐ์ฐจ์ด์ง. ๊ณผ๊ฑฐ์ ์ฑ๋ฅ ๋ ์ฅ์ด์ง๋ ค๊ณ ํจ์ํฌ์ธํฐ๋ฐฐ์ด๊น์ง ์จ์ switch๋ฌธ ์ต์ ํ ํ์์
์ ํํ๋ ํจ์์ ์์น๊ฐ ๋ฌ๋ผ์ง์ฃ . ์ด์ ์ข ๋ฅ๋ณ๋ก ํจ์๋ฅผ ์บ๋ฆญํฐ ์ฝ๋์ ๊ตฌํํ๋ฉด ์บ๋ฆญํฐ ์ฝ๋๋ ๋ฌด์์ ์ํด ์กด์ฌํ๋์ง ๋ชจํธํ๊ฒ ๋๋ฒ๋ฆฌ๋๊น์
๊ฐ์ ์ข ๋ฅ์ ์ด์์ ๊ดํ ํจ์ ๋ฌถ์์ ์ ๋ฌถ์ด์ ๊ฐ์ด ๊ด๋ฆฌํ๋ค๊ณ ๊ฐ์ ํ๋ฉด, ์ข ๋ฅ๋ณ๋ก ํจ์๋ฅผ ๋ง๋ค์ด ๋์ ๊ฑธ ๊ตฌ๋ถํด์ ํธ์ถํ๋ ๊ฑธ ์ธ์ด ๊ธฐ๋ฐ์ ์์กดํ ๊ฑฐ๋ ์ง์ if else๋ก ๊ตฌ๋ถํด์ ํธ์ถํ๋๋ ์ ๋์ ์ฐจ์ด๊ฐ ์์ง ๋ญ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๊ฐ์ง ์์๊น ์ถ๋ค
ํจ์์ ์์น๋ง ๋ฌ๋ผ์ง๋ฟ ๋ด๋ถ ๋ด์ฉ์ ๋๊ฐ์๊ฑฐ ์๋์ผ?
๋น์ฅ์ ๋๊ฐ๊ฒ ์ฃ . ํ์ง๋ง if๋ฌธ์ด ๋์ด๋ ์๋ก ์๊ฒจ๋๋ ํฌ์ง ์์ง๋ง ์ผ์ ํ ์ฑ๋ฅ ํ๋ฝ ์ ์ง๋ณด์ ํ๋ฝ ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ ํ๋ฝ ๋ฑ ๋ฌธ์ ๊ฐ ์๊น๋๋ค.
๊ฒฐ๊ตญ ํ๋ก์ ํธ๊ฐ ํฌ์ง ์์ ์ธ๋๊ฒ์ ๊ฐ์๊ฒฝ์ฐ๋ if๋ฌธ ๋๋ฐฐ๊ฐ ํฐ ๋ฌธ์ ๋ ์๋๋ผ๋๊ฑฐ๋ค
์ด๊ฑฐ ๋งํ๋๊ฑฐ ๋ง๋๋ฐ ๋ชฝํค์๋ผ๋ค์ด ์ผํญ์ฐ์ฐ์๋ ๋ญ๋ ๊ฐ์ง๋๋ ๋๊ฑฐ