E D R , A S I H C RSS

Eight Queen Problem Second Try Discussion

ด๋ฒˆ— •ด๊ฒฐ• ๋•Œ๋Š” ๊ฐ …ŒŠคŠธ ๋ถ€๋ถ„— ๋Œ€•ด ‹œ๊ฐ„ธก •„ •˜๊ณ  –ˆŠต๋‹ˆ๋‹ค. (•œ 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 ผ๊นŒš”.

Wiki:TellDontAsk๋ผ๊ณ  •ฉ๋‹ˆ๋‹ค. (see also Wiki:LawOfDemeter)
~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 ƒ๊ฐ•˜๋А๋ผ ‹œ๊ฐ„๊ฐ€๋Š”„ ๋ชฐ๋žŠต๋‹ˆ๋‹ค. ž ๊นด •„๋‹ˆ๋ผ ๊พธค€žˆ ๋ฐฐ›€ด ฆ๊šธ ˆ˜ žˆ€ ๋ฌ˜…ด žˆœผ๋ฉด ข‹๊ฒ Šต๋‹ˆ๋‹ค. :)
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:11
Processing time 0.0264 sec