์ด๋ฒ์ ํด๊ฒฐํ ๋๋ ๊ฐ ํ
์คํธ ๋ถ๋ถ์ ๋ํด ์๊ฐ์ธก์ ์ ํ๊ณ ํ์ต๋๋ค. (ํ 5๋ถ๊ฐ๊ฒฉ์ ๋ ๊ธฐ์ค) ์ค๊ฐ์ ํ
์คํธ๋ฅผ ์์ ํ
์คํธ๋ก ๋๋๋ ๋นผ๊ณ ๋ ๋ณดํต ํ ํ
์คํธ ๋น 5๋ถ์ ๋ ๊ฑธ๋ฆฌ๋๊ตฐ์.
์ฐ.. ๊ทธ๋ฆฌ๊ณ ์ฌ์ ํ ํ
์คํธ ์ฝ๋๋ฅผ ์๊ฐํ๊ธฐ ์ด๋ ค์ ๋ ๋ถ๋ถ์ด ์ค์ Queen ์ ๋๋ ๋ถ๋ถ์ธ๋ฐ์. ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ๋์ดํ๊ณ ์ฌ๊ทํธ์ถ ๋ถ๋ถ์ ๋ํด์ ์ ๋๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ์๋ํด๋ดค์ต๋๋ค. ์ผ์ข
์ ์์ด ์ฐพ๋ ๋ฐฉ๋ฒ์ด ๋๋๊ตฐ์. ์.. ์ด ๋ถ๋ถ์ ๋ํด์๋ EightQueenProblem ์ ๋ํ ํ๋์ ํด๋ฅผ ์์๋๊ณ ์์ํ๋ค๋ฉด TDD๋ฅผ ์๋ํ ์ ์์๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค๊ธด ํ๋๋ฐ. (๋ฌธ์ ๋, ๋ต์ ๊ตฌํด๋๊ณ ๋์์ผ ์ด ์๊ฐ์ด ๋ฌ๋๋ผ๋. --;)
- ํ๊ณ ๋๋ ์์ฌ์ ๋์ - ์ฌ์ ๊ฐ ์์๋๋ฐ, ๋ง๋ค๊ณ ๋๋ ๊ธฐ์กด์ ์๊ฐํ์๋ ๋ฐฉ๋ฒ๊ณผ ๋น์ทํ๊ฒ ๋์ด๋ฒ๋ ธ๋ค๋ ์ . ์ข ๋ ์ฌ์ ๋ฅผ ๊ฐ์ง๊ณ , ํ์ฌ ์๊ฐํ ๋ฐฉ๋ฒ ์์ฒด๊ฐ ๋ณต์กํ ๋ฐฉ๋ฒ์ด ์๋๊น ์๊ฐํ๋ฉด์ ๋ ์ฌ์ด๋ฐฉ๋ฒ์ ์๊ฐํด๋ผ ์ ์์์ํ
๋ฐ.. ๋ค๋ฅธ ์ฌ๋๋ค์ ์์ค๋ฅผ ๋ณด๋ Queen์ ๋ํ ๋๊ฐ์ ์ฒ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ถ์ด ํจ์ฌ ๋ ๋จ์ํ๊ฒ ํ ์ ์๊ฒ ๋๋ผ๋.
์๊ณ ๋ฆฌ์ฆ์๋ OAOO๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. ์ ๋ณด์ ์ค๋ณต(duplication)์ด ์๋ค๋ฉด ์ ๊ฑฐํ๋ ์์ผ๋ก ๋ฆฌํฉํ ๋ง์ ํ๋ ๊ฒ๋๋ค. ์ด ๋ ์ ๋ณด์ ์ค๋ณต์ ์ ํ์ค ํน์ ์ธ๋งํฑ์ค์ ์ค๋ณต์ผ ์ ์์ต๋๋ค.
์ ๋ ๊ณผ์ ๋ถ๋ถ ¶
~cpp def MakeEightQueen (self, Level): UnAttackableList0 = self.GetUnAttackableOthersPositionList (0) for UnAttackablePosition0 in UnAttackableList0: self.SetQueen (UnAttackablePosition0) UnAttackableList1 = self.GetUnAttackableOthersPositionList (1) if not len (UnAttackableList1): self.EraseQueen (UnAttackablePosition0) continue for UnAttackablePosition1 in UnAttackableList1: self.SetQueen (UnAttackablePosition1) UnAttackableList2 = self.GetUnAttackableOthersPositionList (2) if not len (UnAttackableList2): self.EraseQueen (UnAttackablePosition1) continue for UnAttackablePosition2 in UnAttackableList2: self.SetQueen (UnAttackablePosition2) . . ## if level == 8: ## make clone and append the eq = QueenBoard () self.Clone (eq) self.EightQueenList.append (eq) return 0
์ต์ข ๋ถ๋ถ ¶
~cpp def MakeEightQueen (self, Level): if Level == self.size: eq = QueenBoard () self.Clone (eq) self.EightQueenList.append (eq) return 0 UnAttackableList = self.GetUnAttackableOthersPositionList (Level) if not len (UnAttackableList): return 0 ## return before level. ( if level == 0: have no solution) for UnAttackablePosition in UnAttackableList: self.SetQueen (UnAttackablePosition[0], UnAttackablePosition[1]) if not self.MakeEightQueen (Level + 1): self.EraseQueen (UnAttackablePosition)
-- ์์ฒ
EightQueenProblemDiscussion ์์ ์ง์ ํด์ฃผ์ ๊ฒ์ฒ๋ผ, OOP๋ฅผ ์จ๋ณด์๋ผ๋ ๋ชฉํ๋ก ๋ค์ ์์ฑํด๋ณด์๋๋, ๋์์ธ์์ ๊ณ ๋ ค ๋๋ฌธ์ธ์ง, ์ ๋
์๊ฐ์ด๋ผ ๋๋ ฅ์ ์๋ชจ ๋๋ฌธ์ธ์ง๋ ๋ชฐ๋ผ๋ ์คํ๋ ค ์๊ฐ์ด ๋ ๋์ด๋ฒ๋ ธ์ต๋๋ค. ์ด๋ฒ ๋์์ธ์ ๊ณผ์ฐ OOP๋ฅผ ์ ๋๋ก ์ด๊ฑด์ง ์๊ฒฌ์ ๊ตฌํฉ๋๋ค.
๋์์ธํ๋ฉด์, ๊ฐ์ฅ ์๋ฌธ์ด ๋ค์๋ ๋ถ๋ถ์ด ์ถ๋ ฅ๊ณผ ๊ด๊ณ๋ ๋ถ๋ถ์ด์์ต๋๋ค. EightQueenProblem ์์ฒด๊ฐ ์ถ๋ ฅ์ด ํ์ํ ๋ฌธ์ ์ธ์ง, ์๋์ง๋ก ์์๋ ๊ณ ๋ฏผ์.. ๊ฒฐ๊ตญ '์ถ๋ ฅ์ด ํ์ํ๋ค' ๋ผ๊ณ ๊ฒฐ๋ก ์ ๋ด๋ฆฌ๊ฒ ๋์ด, ์ถ๋ ฅ์ ์ํ ๊ฒฝ์ฐ, ์ธ์๋ก ์ถ๋ ฅ ์์ค๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ์ง์ํ ๊ณณ์ผ๋ก ์ถ๋ ฅํ๊ณ , ๋ถ๊ฐ์ ์ผ๋ก output format์ ์ง์ํ๋ ๋ฐฉ์์ ์ฑํํ์์ต๋๋ค.
--์ด์ ์ฐ
์ ๊ฐ ๋ณด๊ธฐ์ ํ์ฌ์ ๋์์ธ์ class ํค์๋๋ง ๋นผ๋ฉด ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ(procedural programming)์ด ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ค๋ธ์ ํธ ์์ฑ์ ์ ์ญ ๋ณ์๊ฐ ๋๊ณ ๋ง์ด์ฃ . ์ด๋ฐ ๊ตฌ์ฑ์ ์ผ๋ฌ God Class Problem์ด๋ผ๊ณ ๋ ํฉ๋๋ค. AOP(Action-Oriented Programming -- ์์ Procedural Programming์ด๋ผ๊ณ ํ๋ ๊ฒ) ์ชฝ์์ ์จ ํ๋ก๊ทธ๋๋จธ๋ค์ด ์์ฃผ ๋ง๋๋ ์ค์์ด๊ธฐ๋ ํฉ๋๋ค. ๊ฐ์ฒด์งํฅ ๋ถํด๋ผ๊ธฐ๋ณด๋ค๋ ํ ๊ฑฐ๋ ํด๋์ค ๋ด์์์ ๊ธฐ๋ฅ์ ๋ถํด(functional decomposition)๊ฐ ๋๋ ๊ฒ์ด์ฃ . Wirfs-Brock์ ์ง๋ฅ(Intelligence)์ ๊ณ ๋ฅธ ๋ถํฌ๋ฅผ OOD์ ์ค์์์๋ก ๋ฝ์ต๋๋ค. NQueen ์ค๋ธ์ ํธ๋ ๊ทธ ์ด๋ฆ์ "Manager"๋ "MainController"๋ก ๋ฐ๊ฟ๋ ๋ ์ ๋๋ก ๋ชจ๋ ์ฑ
์(responsibility)์ ๋๋งก์ ํ๊ณ ์์ต๋๋ค -- Meyer๋ ํ๋์ ํด๋์ค๋ ํ๊ฐ์ง ์ฑ
์๋ง์ ์ ๋๋ก ํด์ผํ๋ค(A class has a single responsibility: it does it all, does it well, and does it only )๊ณ ๋งํ๋๋ฐ, ์ด๊ฒ์ ํด๋์ค ์ด๋ฆ์ด ์ ์ง์ด์ก๋์ง, ์ผ๋ง๋ ๊ตฌ์ฒด์ฑ์ ์ฃผ๋์ง ๋ฑ์์ ์ ์ ์์ต๋๋ค. (Coad๋ "In OO, a class's statement of responsibility (a 25-word or less statement) is the key to the class. It shouldn't have many 'and's and almost no 'or's."๋ผ๊ณ ํฉ๋๋ค. ๋ง์ฝ ์ด๊ฒ ์์ฐ์ค๋ฝ๊ฒ ๋์ง์๋๋ค๋ฉด ํด๋์ค๋ฅผ ํ๋ ์ด์ ๋ง๋ค์ด์ผ ํ๋ค๋ ์๊ธฐ๊ฐ ๋๊ฒ ์ฃ .) ํ๊ฐ์ง ๊ฐ๋ฅํ ์ง๋ฅ ๋ถ์ฐ์ผ๋ก, ์ฌ๋ฌ๊ฐ์ Queen ์ค๋ธ์ ํธ์ Board ์ค๋ธ์ ํธ ํ๋๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ณผ ์ ์๊ฒ ์ต๋๋ค. Queen ์ค๋ธ์ ํธ ๊ฐ์ด Queen ์ค๋ธ์ ํธ ์์๊ฒ ๋ฌผ์ด๋ด
๋๋ค. "๋ด๊ฐ ๋๋ฅผ ๊ท์ฐฎ๊ฒ ํ๊ณ ์๋?" --๊น์ฐฝ์ค
๋ง์ํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ดํด๊ฐ ์๋๋ ๋ถ๋ถ ๋ช๊ฐ์ง ์ฌ์ญค๋ณด๊ฒ ์ต๋๋ค. ์ข
ํฉํด๋ณด๋ฉด, NQueen ์์ฒด๋ ์ด๋ ํ ๋ณด๋ ํํ๊ฐ n-Queens problem์ ๋ง์กฑํ๋๊ฒ์ธ์ง๋ฅผ ์์๋ด์ผ ํ๊ณ , n * n ํฌ๊ธฐ์ ๋ณด๋๋ฅผ ๋ง๋ค์ด๊ฑฐ๋ ๋ง๋ค์ด์ง ๋ณด๋๋ฅผ ์ถ๋ ฅํ๋๊ฑด ๋ค๋ฅธ ๋๊ตฐ๊ฐ์ ๋ชซ์ด๋ค. ๋ผ๋ ์ด์ผ๊ธฐ๊ฐ ๋๋๊ฑด๊ฐ์?(์ด ๋ด์ฉ์ด ์์์ ์ฐ์ ํ๊ฐ์ง ๊ฐ๋ฅํ ... ๋ณผ ์ ์๊ฒ ์ต๋๋ค์ ๋ด์ฉ์ธ์ง๋ ๊ถ๊ธํฉ๋๋ค.) ๊ทธ๋ฆฌ๊ณ , ๋ง์ง๋ง์ ์ฐ์ Queen ์ค๋ธ์ ํธ ๊ฐ์ด Queen ์ค๋ธ์ ํธ ์์๊ฒ ๋ฌผ์ด๋ด
๋๋ค. "๋ด๊ฐ ๋๋ฅผ ๊ท์ฐฎ๊ฒ ํ๊ณ ์๋?" ์ ๋ด์ฉ์ด ์ด๋ค ๋ป์ธ์ง ๊ถ๊ธํฉ๋๋ค. --์ด์ ์ฐ
์๋ฅผ ๋ค์ด, Board ๊ฐ์ฒด๋ Queen ๊ฐ์ฒด๋ค์ ๋ง๋ค๊ณ ๋ฐฐ์น, ์์ ์ ์ํ๋ฅผ ์ถ๋ ฅํ๋ ์๋น์ค๋ฅผ ์ง์ํ๊ณ , Queen ๊ฐ์ฒด๋ ๋ด๊ฐ ๋ค๋ฅธ Queen ๊ฐ์ฒด๋ฅผ ๊ณต๊ฒฉํ ์ ์๋์ง ์๋์ง ์๋ ค์ฃผ๋ ์๋น์ค๋ฅผ ์ง์ํฉ๋๋ค -- ๋ ๋์๊ฐ์ ์ค์ค๋ก ์๊ธฐ ์์ ์๋ฆฌ๋ฅผ ์ฐพ์๊ฐ ์ ๋๋ก ๋๋ํ๊ฒ ๋ง๋ค ์๋ ์๊ฒ ์ฃ . Queen ์ค๋ธ์ ํธ ๊ฐ์ด Queen ์ค๋ธ์ ํธ ์์๊ฒ ๋ฌผ์ด๋ด
๋๋ค. "๋ด๊ฐ ๋๋ฅผ ๊ท์ฐฎ๊ฒ ํ๊ณ ์๋(attackable์ ๋ํ ๋ฉํํฌ์)?", ๋ผ๋ ๋ถ๋ถ์ OOP๋ก ์ด๋ป๊ฒ ํํ๋ ์ ์์๊น ์ง์ ์๊ฐํด ๋ณด๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. OOP์์ ๊ฐ์ฒด๋ผ๋ฆฌ์ ์์ฌ์ํต์ ๋ณดํต ๋ฉ์๋ ํธ์ถ๋ก ์ด๋ฃจ์ด์ง๊ณ , ๋ชฉ์ ์ด๋ ์ธ์์ ํํ๋ก ์ ๋ฌ๋๋ค๋ ์ ์ ๊ณ ๋ คํ๋ค๋ฉด ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ๋ ์ค๋ฅผ ์ ์๊ฒ ์ฃ .
๊ณ์ํด์ ๋ฌธ์ ์ ์ ๋ฐ๊ฒฌํ๋ ์ฌ๋ฐ์ต๋๋ค. ๋๋ค์ OOP์ ๋์ ํด๋ดค์ต๋๋ค. ๊ธฐ๋ณธ ์ปจ์
์, ์ฒด์ค ๋ง๊ณผ ๋ณด๋ ๊ทธ๋ฆฌ๊ณ ์ฒด์ค ํ๋ ์ด์ด๊ฐ ๋ฑ์ฅํฉ๋๋ค. ์ฒด์ค ๋ง์ ์์ ์ด ๋์์ผ๋ก์จ ๋ค๋ฅธ ๋ง์ "๊ท์ฐฎ๊ฒ ํ๋์ง"๋ฅผ ํ๋จํ๊ณ , ๋ณด๋๋ ์ด๋ฌํ ์ฒด์ค ๋ง๋ค์ด ๋์ด๊ณ ์ถ๋ ฅํ๋ ์ผ์ ๋ด๋นํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ฒด์ค ํ๋ ์ด์ด๋ ์์ ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ๋ณด๋์ ํธ์ ๋ฐฐ์ดํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฒ์ ๋๊ฐ์ ๋ฐฉํฅ์ ํธ์ ์ฒดํฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ธฐ์ธ๊ธฐ์ ์ํ ๋ฐฉ๋ฒ์ด ๋ ์ฌ๋์ต๋๋ค. ๋๋ถ์ ๋๊ฐ์ ์ฒดํฌ๊ฐ ๊น๋ํด์ง๋ฏ ํฉ๋๋ค. ์์์ ์ด์ผ๊ธฐํด์ฃผ์ ๋ฐฉ๋ฒ ๊ฐ์ด๋ฐ '์ค์ค๋ก ์๊ธฐ ์์ ์๋ฆฌ๋ฅผ ์ฐพ์๊ฐ๋ค'๋ผ๋ ๋ถ๋ถ์, ๊ทธ๋ ๊ฒ ๋๋ฉด ์ฒด์ค ๋ง๊ณผ ๋ณด๋๊ฐ ์๋ก tightlyํ๊ฒ ์ฐ๊ฒฐ๋ ๊ณต์ฐ์ด ์ปค์ ๊ณ ๋ฏผํ๋ค๊ฐ ์ฒด์ค ํ๋ ์ด์ด๋ฅผ ํ์์ํจ ๋ฐฐ๊ฒฝ์ด ๋์์ต๋๋ค.
--์ด์ ์ฐ
์.. ์์ง ๊ตฌํ์ ์ํด๋ณด๊ณ ๊ทธ๋ฅ ์๊ฐํด๋ณธ๊ฑฐ์ง๋ง, ์ฒด์ค ๋ง๊ณผ ๋ณด๋๊ฐ ํ์ดํธํ๊ฒ ์ฐ๊ฒฐ๋์ด๋ ํฐ ๋ฌธ์ ๋ ์๋ ๊ฒ ๊ฐ์๋ฐ์. ๋ณด๋๋ฅผ Singleton ์ผ๋ก ๋ชจ๋ Queen๋ค์ด ๊ณต์ ํ๋ ๊ฐ์ฒด๋ก ์๊ฐํด๋ ์ข์ ๊ฒ ๊ฐ๊ณ ์. (Queen์ ๋์ด ๋ฌ๋ ธ๋์ง, ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฒด์ค ํ๋ ์ด์ด๊ฐ์ด Queen์ด ์กด์ฌํ๊ณ ์๋ ์ธ๊ณ์ ๋ํ ๋ต์ ๋ด๋ ค์ค ์ (?) ์ด ์กด์ฌํ๋์ง ๋์ค ํ๋๊ฐ ๋ ๋ฏ ํ๋ค๋. ^^;) ์์ง OO ๊ด์ ์ผ๋ก๋ ๊ทธ๋ฅ ์๊ฐ๋ง ํด๋ณด๋์ค. --์์ฒ
์ปคํ๋ง์๋ ์๊ณผ ์์ด ์์ต๋๋ค.
OO ํจ๋ฌ๋ค์์ ์ฌ๋ฌผ(์ฌ๊ฑด + ๋ฌผ๊ฑด)๋ค์ด ์ ํ ์ผ์ ์ค์ค๋ก ์์ ํ๋ ์ ๊ธฐํ๊ณ ํธ๋ฆฌํ ์ธ์์ ์์ ํฉ๋๋ค. ์น๊ตฌ๊ฐ ์ง์ ์ฐพ์์๋ค๊ฐ ๋ฐฉ์ ์ด์ง๋ฝํ๊ณ ๊ฐ์ต๋๋ค. ์์ ์ด ๊ฐ๊ณ ์๋ "๊นจ๋ํ ๋ฐฉ ๋ฐฐ์น๋"๋ฅผ ์ด์ฉํ๊ฑฐ๋ ํน์ ๊ฐ ๋ฌผ๊ฑด ๋น ๋ถ์ด์๋ "์๋ ์์น" ๊ผฌ๋ฆฌํ๋ฅผ ๋ณด๊ณ ๊ฐ๋ค ๋์ ์์น์ ๊ฑฐ๊ธฐ๋ก ์ด๋ฅด๋ ๊ฒฝ๋ก๋ฅผ ํ๋จ, ์ง์ ์ฌ๋ฐฐ์น๋ฅผ ํด์ผํ๋ ์ธ์๊ณผ, ๋ฒฝ์ ์ง๋ ํ์ฅ์ ๋ถ์ฌ๋๊ณ ๋ง์น ๋ง์ (automagically)์ฒ๋ผ "๋ชจ๋ ๋ฌผ๊ฑด์ ์ ์์น๋ก!"๋ผ๊ณ ์ธ์น๋ฉด ๋ง๋ํ ์ ๋ฆฌ๊ฐ ๋๋ ์ธ์, ์ด๋ ๊ฒ์ด OOP์ ์ผ๊น์.


~cpp route=superman.getEverydayPath() for each city in the route: superman.visit(each city)์
~cpp superman.travelEverydayPath()์ ์ฐจ์ด์ ๋๋ค.
--๊น์ฐฝ์ค
๋ค์ ๋จธ๋ฆฌ๊ฐ ์ํ์ค๊ธฐ ์์ํฉ๋๋ค. ์ด๋ฒ์ ์๋ฅผ ์ ์๋๋ฐ๋ก ์๋ผ๋ณด์๋ผ๊ณ ๊ฒฐ์ฌ์ ํ๊ฒ ๋ ๋ฐฐ๊ฒฝ์ค ํ๋๊ฐ, NQueen2 ์์ ์์ ์ ์์ญ์ ๋ฐ์ด๋๋ Manager๊ฐ ๋๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ์ ๋ํ ์ด์ผ๊ธฐ๊ฐ ์์ด์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ญ์ผ๋ก, ์์์ superman๊ณผ object์ ๊ฐ๋
์ด๋ ๊ฒฝ๊ณ๋ ๋ชจํธํด์ง๋๊ฒ ์๋๊ฐ์? ๊ทธ๋ ๋ค๋ฉด, Player๊ฐ ๋ฐ๋ก ์๋ ๊ฐ๋
๋ณด๋ค๋ Board์์ ์ฒ๋ฆฌํ๋๊ฒ ๋ OO์ ์ธ๊ฐ์?
--์ด์ ์ฐ
์ ๋ง์
~cpp mainProgram.runEverything()
์ ์คํํ๋ฉด ๋ชจ๋ ๊ฒ ๋ง์ ์ฒ๋ผ ์์์ ์คํ๋๊ฒ ํ๋ผ๋ ๋ป์ผ๋ก ์คํดํ์ง๋ ์์์ผ๋ฉด ํฉ๋๋ค. ์ superman์ ์์์๋, ์ ์์ ๊ฒฝ์ฐ superman์ ์ ๋๋ก ์ด์ฉํด ๋จน์ผ๋ ค๋ฉด superman์ ๋ด๋ถ์ ๊ตฌ์กฐ๋ฅผ ์์์ผ ํฉ๋๋ค. superman์ ๊ตฌํ์ ์ข
์์ ์ด ๋๋ ์
์ด์ฃ . ํ์ง๋ง ํ์๋ ๊ทธ๊ฒ ๋์ปคํ๋ง์ด ๋ฉ๋๋ค. ์๊ธฐ๊ฐ ๋งค์ผ ๊ฐ๋ ๊ธธ์ ์๋ ๋์๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ superman์ด ์ค์ค๋ก ์ํํ ์ ์์ด์ผ ํ ์ฑ
์์ด ์๋ค ์ด๊ฑฐ์ฃ . Queen์ด๋ผ๋ ๊ฐ์ฒด๊ฐ ์ฌ๋๊ฐ๊ฐ ์๋ค๊ณ ์นฉ์๋ค. ์๋ค๋คํํ
"๋๋ ์ ์ฌ์์ ๊ณต๊ฒฉํ ์ ์๋?"ํ๊ณ ๋ฌป๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์ฌ์์ ๋ฐฐ์นํ๊ณ ํ๋ ๊ฒ์ ํ๋์ ์ถ์(abstraction)์ผ๋ก ๋ฌถ๋ ๊ฒ์ด ์ด๋จ๊น์? ๋ฌป์ง๋ง๊ณ "์ํค์"๋ ๊ฒ์ด์ฃ -- ์ฌ๋๊ฐ์ ๋๋ํ Queen ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ํ๋์ฉ "ํ ์๋ก ์ฌ๋ผ๊ฐ๋ผ"๊ณ ์ํต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Board์ Queen์ ์ปคํ๋ง์ด ์๊ฒจ์ ๋ฌธ์ ๊ฐ ๋๋ ๊ฑด ์๋๋๊ณ ํ๋๋ฐ, ์ด์ฐจํผ Queen์ Board ์์ด๋ ๋ณ ์๋ฏธ๊ฐ ์๊ณ , ๋, ๊ทธ๋ ๊ฒ ํ์ง ์๋๋ผ๋ ์ด๋ป๊ฒ๋ ๋น์ทํ๊ฑฐ๋ ํน์ ๋ ํฐ ์ ๋์ ์ปคํ๋ง์ด ์กด์ฌํฉ๋๋ค. ์ด์จ๊ฑด, ์ง๊ธ ๋จ๊ณ์์๋, ๋ ๋์ ๋ฐฉ๋ฒ์ด๋ผ๊ธฐ๋ณด๋ค ๊ทธ๋ฅ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํธ์ํ๊ฒ ์๊ฐํ๋ฉด ์ข์ ๋ฏ ํฉ๋๋ค. --๊น์ฐฝ์คDeleteMeLater) ๋ค, ๋ฌด์จ ๋ง์์ด์ ์ง ์๊ฒ ์ต๋๋ค. ๋ฉฐ์น ๋์ Queen ์๊ฐํ๋๋ผ ์๊ฐ๊ฐ๋์ค ๋ชฐ๋์ต๋๋ค. ์ ๊น์ด ์๋๋ผ ๊พธ์คํ ๋ฐฐ์์ด ์ฆ๊ฑฐ์ธ ์ ์์ ๋ฌ์ฑ
์ด ์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค. .png)
.png)