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.0620 sec