λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

였브젝트17

[였브젝트] 뢀둝 B, C 'νƒ€μž… κ³„μΈ΅μ˜ κ΅¬ν˜„', '동적인 ν˜‘λ ₯, 정적인 μ½”λ“œ' 뢀둝 BλŠ” 상속이 μ•„λ‹Œ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ νƒ€μž… 계측을 κ΅¬ν˜„ν•˜λŠ” 방법에 λŒ€ν•΄ μ„€λͺ…ν•œλ‹€. 뢀둝 CλŠ” 동적인 ν˜‘λ ₯을 기반으둜 정적인 μ½”λ“œλ₯Ό ꡬ성해야 ν•˜λŠ” μ΄μœ μ— λŒ€ν•΄ μ„€λͺ…ν•œλ‹€. νƒ€μž… κ³„μΈ΅μ˜ κ΅¬ν˜„ 클래슀λ₯Ό μ΄μš©ν•œ νƒ€μž… 계측 κ΅¬ν˜„ 객체지ν–₯ μ–Έμ–΄μ—μ„œ ν΄λž˜μŠ€λŠ” μ‚¬μš©μž μ •μ˜ νƒ€μž…(user-defined data type)이고, ν΄λž˜μŠ€λŠ” 객체의 νƒ€μž…κ³Ό κ΅¬ν˜„μ„ λ™μ‹œμ— μ •μ˜ν•˜λŠ” 것이닀. 클래슀λ₯Ό μ΄μš©ν•œ νƒ€μž… 계측은 상속을 μ΄μš©ν•˜λŠ” 방법이닀. 상속을 μ΄μš©ν•  경우, μžμ‹ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ 클래슀의 κ΅¬ν˜„κ³Ό 퍼블릭 μΈν„°νŽ˜μ΄μŠ€ λͺ¨λ‘ 물렀받을 수 μžˆμ–΄ νƒ€μž… 계측을 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμ§€λ§Œ μžμ‹ν΄λž˜μŠ€μ™€ λΆ€λͺ¨ν΄λž˜μŠ€λ₯Ό κ°•ν•˜κ²Œ κ²°ν•©μ‹œν‚€κΈ° λ•Œλ¬Έμ— λ˜λ„λ‘μ΄λ©΄ 좔상 ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™œμš©ν•΄μ„œ νƒ€μž… 계측을 κ΅¬ν˜„ν•˜λŠ” 것이 μ’‹λ‹€. μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•œ νƒ€μž… 계.. 2023. 2. 10.
[였브젝트] 뢀둝 A '계약에 μ˜ν•œ 섀계' 뢀둝 Aμ—μ„œλŠ” 사전쑰건, 사후쑰건, λΆˆλ³€μ‹μ„ μ•Œμ•„λ³΄κ³  λ‹€ν˜•μ„±μ˜ μΈ‘λ©΄μ—μ„œ μŠˆνΌνƒ€μž…κ³Ό μ„œλΈŒνƒ€μž…μ΄ μ€€μˆ˜ν•΄μ•Ό ν•˜λŠ” μ œμ•½μ‘°κ±΄μ„ κ³„μ•½μ˜ κ΄€μ μ—μ„œ μ„€λͺ…ν•œλ‹€. 계약에 μ˜ν•œ 섀계(Design by Contract, DBC)λ₯Ό μ‚¬μš©ν•˜λ©΄ ν˜‘λ ₯에 ν•„μš”ν•œ λ‹€μ–‘ν•œ μ œμ•½κ³Ό λΆ€μˆ˜νš¨κ³Όλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•˜κ³  λ¬Έμ„œν™”ν•  수 μžˆλ‹€(p.535). 계약에 μ˜ν•œ 섀계 κ΅¬μ„±μš”μ†Œ 사전쑰건 (precondition): λ©”μ„œλ“œκ°€ 호좜되기 μœ„ν•΄ λ§Œμ‘±λΌμ•Ό ν•˜λŠ” 쑰건. μš”κ΅¬μ‚¬ν•­(requires)을 λͺ…μ‹œν•˜λ©°, 사전쑰건을 λ§Œμ‘±μ‹œν‚€λŠ” 것은 λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μ˜λ¬΄λ‹€. 사후쑰건 (postcondition): λ©”μ„œλ“œκ°€ μ‹€ν–‰λœ 후에 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 보μž₯ν•΄μ•Ό ν•˜λŠ” 쑰건. 사후쑰건(effects)을 μ„œλ²„κ°€ λ§Œμ‘±μ‹œν‚€μ§€ λͺ»ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ˜ˆμ™Έλ₯Ό λ˜μ Έμ€˜μ•Ό ν•˜λ©°, 이.. 2023. 2. 3.
[였브젝트] 15μž₯ 'λ””μžμΈ νŒ¨ν„΄κ³Ό ν”„λ ˆμž„μ›Œν¬' 15μž₯은 섀계λ₯Ό μž¬μ‚¬μš©ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄κ³Ό μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬μ— λŒ€ν•΄ μ„€λͺ…ν•˜κ³ , 이전 movie μ˜ˆμ œμ— 적용된 λ””μžμΈ νŒ¨ν„΄μ„ μ†Œκ°œν•œλ‹€. λ””μžμΈ νŒ¨ν„΄μ΄λž€? - μ†Œν”„νŠΈμ›¨μ–΄ μ„€κ³„μ—μ„œ 반볡적으둜 λ°œμƒν•˜λŠ” λ¬Έμ œμ— λŒ€ν•΄ 반볡적으둜 μ μš©ν•  수 μžˆλŠ” ν•΄κ²° 방법이닀(섀계 μž¬μ‚¬μš©). - λ””μžμΈ νŒ¨ν„΄μ€ νŠΉμ • μ •ν™©(context)λ‚΄μ—μ„œ 일반적인 섀계 문제(problem)λ₯Ό ν•΄κ²°(solution)ν•˜λ©°, ν˜‘λ ₯ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ“€ μ‚¬μ΄μ—μ„œ 반볡적으둜 λ°œμƒν•˜λŠ” ꡬ쑰λ₯Ό μ„œμˆ ν•œλ‹€(p.516). - νŒ¨ν„΄μ€ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” μ—­ν• , μ±…μž„, ν˜‘λ ₯의 ν…œν”Œλ¦Ώμ΄λ‹€(p.517). - νŠΉμ •ν•œ 변경을 μΊ‘μŠν™”ν•¨μœΌλ‘œμ¨ ν˜‘λ ₯을 일관성 있고 μœ μ—°ν•˜κ²Œ ν•΄μ€€λ‹€. λ”°λΌμ„œ, μ–΄λ–€ λ””μžμΈ νŒ¨ν„΄μ΄ μ–΄λ–€ 변경을 μΊ‘μŠν™”ν•˜λŠ”μ§€λ₯Ό μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€. Strate.. 2023. 1. 21.
[였브젝트] 14μž₯ '일관성 μžˆλŠ” ν˜‘λ ₯' 14μž₯은 섀계λ₯Ό 일관성 있게 λ§Œλ“€κΈ° μœ„ν•΄ 변경을 μΊ‘μŠν™”ν•˜λŠ” 기법을 μ†Œκ°œν•œλ‹€. μ •λ¦¬ν•˜μžλ©΄ μœ μ‚¬ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μœ μ‚¬ν•œ ν˜‘λ ₯ νŒ¨ν„΄μ„ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”λ°, 일관성 μžˆλŠ” ν˜‘λ ₯ νŒ¨ν„΄μ„ μ μš©ν•˜λ©΄ μ½”λ“œκ°€ μ΄ν•΄ν•˜κΈ° 쉽고 직관적이며 μœ μ—°ν•΄μ§€κΈ° λ•Œλ¬Έμ΄λ‹€. 일관성 μžˆλŠ” ν˜‘λ ₯을 μ„€λͺ…ν•˜κΈ° μœ„ν•΄ μ±…μ—μ„œλŠ” μ €λ²ˆμ— λ‹€λ£¨μ—ˆλ˜ ν•Έλ“œν° μš”κΈˆμ œ 예제 μ½”λ“œλ₯Ό μ‚¬μš©ν•œλ‹€. μ½”λ“œλ‘œ μ„€λͺ…ν•΄ μ£ΌλŠ” κ±° 쒋은데... μ½”λ“œ λ„ˆλ¬΄ μ–΄λ ΅λ‹€.... γ… γ…  μΊ‘μŠν™” μ’…λ₯˜ κ°œλ³„ 객체에 λŒ€ν•œ λ³€κ²½ 관리 데이터 μΊ‘μŠν™” : 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό private으둜 μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 없도둝 μΊ‘μŠν™”ν•œ 것. λ©”μ„œλ“œ μΊ‘μŠν™” : 클래슀의 λ‚΄λΆ€ 행동을 μΊ‘μŠν™”ν•œ 것 ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” κ°μ²΄λ“€μ˜ 관계에 λŒ€ν•œ λ³€κ²½ 관리 객체 μΊ‘μŠν™” : 객체와 객체 μ‚¬μ΄μ˜ 관계λ₯Ό μΊ‘μŠν™”ν•œ 것. (합성을.. 2023. 1. 14.
[였브젝트] 13μž₯ 'μ„œλΈŒν΄λž˜μ‹±κ³Ό μ„œλΈŒνƒ€μ΄ν•‘' 13μž₯μ—μ„œλŠ” μŠˆνΌνƒ€μž…κ³Ό μ„œλΈŒνƒ€μž…μ˜ κ°œλ…μ„ μ„€λͺ…ν•˜κ³  νƒ€μž… 계측을 λ§Œμ‘±μ‹œν‚€κΈ° μœ„ν•΄ μ μš©ν•  수 μžˆλŠ” 섀계 원칙을 μ„€λͺ…ν•œλ‹€. μ˜¬λ°”λ₯Έ νƒ€μž… 계측을 κ΅¬μ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ κ΄€μ μ—μ„œ μŠˆνΌνƒ€μž…κ³Ό μ„œλΈŒνƒ€μž… 사이에 행동이 ν˜Έν™˜λ˜λ„λ‘ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. μƒμ†μ˜ μš©λ„λŠ” λ‘κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€. 첫 λ²ˆμ§ΈλŠ” νƒ€μž… 계측 κ΅¬ν˜„μ΄κ³  λ‘λ²ˆμ§ΈλŠ” μ½”λ“œ μž¬μ‚¬μš©μ΄λ‹€. λ™μΌν•œ λ©”μ‹œμ§€μ— λŒ€ν•΄ μ„œλ‘œ λ‹€λ₯΄κ²Œ 행동할 수 μžˆλŠ” λ‹€ν˜•μ μΈ 객체λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ 객체의 행동을 기반으둜 νƒ€μž… 계측을 ꡬ성해야 ν•œλ‹€. 그리고 상속은 이 νƒ€μž… 계측을 κ΅¬ν˜„ν•  수 있게 ν•΄ μ€€λ‹€. 그럼 νƒ€μž… κ³„μΈ΅μ—μ„œ νƒ€μž…μ€ 무엇을 λ§ν•˜λŠ” 걸까? 객체지ν–₯ νŒ¨λŸ¬λ‹€μž„μ˜ κ΄€μ μ—μ„œμ˜ νƒ€μž…μ€ λ™μΌν•œ μ˜€νΌλ ˆμ΄μ…˜μ„ μ μš©ν•  수 μžˆλŠ” μΈμŠ€ν„΄μŠ€μ˜ 집합이닀. 즉, λ™μΌν•œ 퍼블릭 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°€μ§€λŠ” κ°μ²΄λŠ”.. 2023. 1. 6.
[였브젝트] 12μž₯ 'λ‹€ν˜•μ„±' 12μž₯μ—μ„œλŠ” 객체지ν–₯의 핡심 λ©”μ»€λ‹ˆμ¦˜ 쀑 ν•˜λ‚˜μΈ λ‹€ν˜•μ„±μ— λŒ€ν•΄ μ„€λͺ…ν•œλ‹€. 특히, λ‹€ν˜•μ„± μ€‘μ—μ„œ μ„œλΈŒνƒ€μž… λ‹€ν˜•μ„±μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ³  λŸ°νƒ€μž„μ— λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  μ μ ˆν•œ λ©”μ„œλ“œλ₯Ό 찾을 λ•Œ μ‚¬μš©ν•˜λŠ” 동적 λ©”μ„œλ“œ 탐색 기법에 λŒ€ν•΄ μ•Œ 수 μžˆλ‹€. λ‹€ν˜•μ„±μ€ λŸ°νƒ€μž„μ— λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜κΈ°μ— μ ν•©ν•œ λ©”μ„œλ“œλ₯Ό λ™μ μœΌλ‘œ νƒμƒ‰ν•˜λŠ” 과정을 톡해 κ΅¬ν˜„λ˜λ©°, 상속은 이런 λ©”μ„œλ“œλ₯Ό μ°ΎκΈ° μœ„ν•œ μΌμ’…μ˜ 탐색 경둜λ₯Ό 클래슀 κ³„μΈ΅μ˜ ν˜•νƒœλ‘œ κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ 방법이닀(p.390) λ‹€ν˜•μ„±(Polymorphism)μ΄λž€ ν•˜λ‚˜μ˜ 좔상 μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•΄ μ„œλ‘œ λ‹€λ₯Έ κ΅¬ν˜„μ„ μ—°κ²°ν•  수 μžˆλŠ” λŠ₯λ ₯이닀. 즉, μ—¬λŸ¬ νƒ€μž…μ„ λŒ€μƒμœΌλ‘œ λ™μž‘ν•  수 μžˆλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλŠ” 방법이닀. λ‹€ν˜•μ„±μ€ μœ λ‹ˆλ²„μ„€ λ‹€ν˜•μ„±, μž„μ‹œ λ‹€ν˜•μ„±μœΌλ‘œ λΆ„λ₯˜λ˜λ©°, μœ λ‹ˆλ²„μ„€ λ‹€ν˜•μ„±μ€ λ§€κ°œλ³€μˆ˜, 포함 λ‹€.. 2022. 12. 30.