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

μŠ€ν„°λ””44

[였브젝트] 8μž₯ 'μ˜μ‘΄μ„± κ΄€λ¦¬ν•˜κΈ°' 8μž₯μ—μ„œλŠ” μ˜μ‘΄μ„±μ„ κ΄€λ¦¬ν•˜λŠ” 방법에 λŒ€ν•΄μ„œ 닀룬닀. μ˜μ‘΄μ„±μ€ λŸ°νƒ€μž„ μ˜μ‘΄μ„±κ³Ό μ»΄νŒŒμΌνƒ€μž„ μ˜μ‘΄μ„±μœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€. λŸ°νƒ€μž„ μ˜μ‘΄μ„±(run-time dependency) - 객체 μ‚¬μ΄μ˜ μ˜μ‘΄μ„± μ»΄νŒŒμΌνƒ€μž„ μ˜μ‘΄μ„±(compile-time dependency) - 클래슀 μ‚¬μ΄μ˜ μ˜μ‘΄μ„± μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ 섀계λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” μ»΄νŒŒμΌνƒ€μž„ μ˜μ‘΄μ„±κ³Ό λŸ°νƒ€μž„ μ˜μ‘΄μ„±μ΄ 달라야 ν•œλ‹€(p.260) 그럼 μ–΄λ–»κ²Œ μ»΄νŒŒμΌνƒ€μž„ μ˜μ‘΄μ„±κ³Ό λŸ°νƒ€μž„ μ˜μ‘΄μ„±μ„ λ‹€λ₯΄κ²Œ ν•  수 μžˆμ„κΉŒ? μ˜μ‘΄μ„±μ„ ν•΄κ²°ν•˜λŠ” 방법은 λ‹€μŒκ³Ό 같이 3가지가 μžˆλ‹€. 1. 객체λ₯Ό μƒμ„±ν•˜λŠ” μ‹œμ μ— μƒμ„±μžλ₯Ό 톡해 μ˜μ‘΄μ„± ν•΄κ²° 2. 객체 생성 ν›„ setter λ©”μ„œλ“œλ₯Ό 톡해 μ˜μ‘΄μ„± ν•΄κ²° 3. λ©”μ„œλ“œ μ‹€ν–‰ μ‹œ 인자λ₯Ό μ΄μš©ν•΄ μ˜μ‘΄μ„± ν•΄κ²° μ—¬κΈ°μ„œ 2번 setter λ©”μ„œλ“œλ§Œ μ‚¬μš©ν•˜λŠ”.. 2022. 12. 2.
[였브젝트] 7μž₯ '객체 λΆ„ν•΄' 7μž₯μ—μ„œλŠ” μΆ”μƒν™”μ˜ ν•œ 가지 방법인 λΆ„ν•΄μ˜ 역사에 λŒ€ν•΄ 배울 수 μžˆλ‹€. μΆ”μƒν™”λŠ” ν”„λ‘œμ‹œμ € 좔상화(procedure abstraction)와 데이터 좔상화(data abstraction)둜 λ‚˜λˆŒ 수 μžˆλŠ”λ° 객체지ν–₯은 ν”„λ‘œμ‹œμ € 좔상화이닀. 객체지ν–₯μ—μ„œλŠ” νƒ€μž… λ³€μˆ˜λ₯Ό μ΄μš©ν•œ 쑰건문을 λ‹€ν˜•μ„±μœΌλ‘œ λŒ€μ²΄ν•œλ‹€. -> replace type code with class μ„€κ³„μ˜ 변경은 νƒ€μž… 좔가와 μ˜€νΌλ ˆμ΄μ…˜ μΆ”κ°€λ‘œ ꡬ뢄할 수 있고 νƒ€μž… μΆ”κ°€μ˜ 경우, 객체지ν–₯ μ„€κ³„λŠ” μƒˆλ‘œμš΄ 클래슀λ₯Ό 상속 계측에 μΆ”κ°€ν•˜λŠ” κ²ƒμœΌλ‘œ μ‰½κ²Œ 변경이 κ°€λŠ₯ν•˜λ‹€. μ˜€νΌλ ˆμ΄μ…˜ μΆ”κ°€μ˜ 경우, 상속 계측에 μ†ν•˜λŠ” λͺ¨λ“  클래슀λ₯Ό ν•œλ²ˆμ— μˆ˜μ •ν•΄μ•Ό ν•˜λŠ” 객체지ν–₯적 μ„€κ³„λ³΄λ‹€λŠ” 좔상 데이터 νƒ€μž…μ΄ 변경에 μš©μ΄ν•˜λ‹€. 좔상 λ°μ΄ν„°λŠ” 전체 νƒ€μž…μ— λŒ€ν•œ κ΅¬ν˜„ μ½”λ“œκ°€ ν•˜λ‚˜μ˜.. 2022. 11. 25.
[였브젝트] 6μž₯ 'λ©”μ‹œμ§€μ™€ μΈν„°νŽ˜μ΄μŠ€' 6μž₯μ—μ„œλŠ” 퍼블릭 μΈν„°νŽ˜μ΄μŠ€(객체가 μˆ˜μ‹ ν•˜λŠ” λ©”μ‹œμ§€)λ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ 섀계 원칙을 μ•Œλ €μ€€λ‹€. - λ””λ―Έν„° 법칙 - 묻지 말고 μ‹œμΌœλΌ - μ˜λ„λ₯Ό λ“œλŸ¬λ‚΄λŠ” μΈν„°νŽ˜μ΄μŠ€ - λͺ…λ Ή-쿼리 뢄리 원칙 섀계 원칙을 μ‘°ν•©ν•˜λ©΄ 직관적이고, 예츑 κ°€λŠ₯ν•˜λ©°, μœ μ—°ν•œ 퍼블릭 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. λ©”μ‹œμ§€ = μ˜€νΌλ ˆμ΄μ…˜λͺ… + 인자 λ©”μ‹œμ§€ 전솑 = μ˜€νΌλ ˆμ΄μ…˜λͺ… + 인자 + λ©”μ‹œμ§€ μˆ˜μ‹ μž μ‹œκ·Έλ‹ˆμ²˜ = μ˜€νΌλ ˆμ΄μ…˜(λ©”μ†Œλ“œ)λͺ… + νŒŒλΌλ―Έν„°λͺ©λ‘ λ””λ―Έν„° 법칙 ν˜‘λ ₯ν•˜λŠ” 객체의 λ‚΄λΆ€ ꡬ쑰에 λŒ€ν•œ κ²°ν•©μœΌλ‘œ 인해 λ°œμƒν•˜λŠ” 섀계 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ œμ•ˆλœ 원칙 -> 점(.)을 ν•˜λ‚˜λ§Œ μ‚¬μš©ν•˜μž use only one dot // μ•ˆμ’‹μ€ 예 (train wreck) screening.getMovie().getDiscountConditions(); .. 2022. 11. 18.
[였브젝트] 5μž₯ 'μ±…μž„ ν• λ‹Ήν•˜κΈ°' 5μž₯은 GRASP μ±…μž„ν• λ‹ΉνŒ¨ν„΄μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•˜κ³ , μ±…μž„μ„ μ€‘μ‹¬μœΌλ‘œ 섀계λ₯Ό ν•˜λŠ” 것이 μΊ‘μŠν™”, 응집도, 결합도 κ΄€μ μ—μ„œ 섀계λ₯Ό κ°œμ„ ν•  수 μžˆλ‹€λŠ” 것을 보여쀀닀. 객체 λ””μžμΈμ—μ„œ κ°€μž₯ 기본이 λ˜λŠ” 것 μ€‘μ˜ ν•˜λ‚˜λŠ” μ±…μž„μ„ 어디에 λ‘˜ 지λ₯Ό κ²°μ •ν•˜λŠ” 것이닀. λ‚˜λŠ” μ‹­λ…„ 이상 객체λ₯Ό 가지고 μΌν–ˆμ§€λ§Œ 처음 μ‹œμž‘ν•  λ•ŒλŠ” μ—¬μ „νžˆ μ λ‹Ήν•œ μœ„μΉ˜λ₯Ό 찾지 λͺ»ν•œλ‹€. 늘 이런 점이 λ‚˜λ₯Ό κ΄΄λ‘­ν˜”μ§€λ§Œ, μ΄μ œλŠ” 이런 κ²½μš°μ— λ¦¬νŒ©ν„°λ§μ„ μ‚¬μš©ν•˜λ©΄ λœλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€ [Fowler 1999a](p.166). GRASP "General Responsibility Assignment Software Pattern (일반적인 μ±…μž„ 할당을 μœ„ν•œ μ†Œν”„νŠΈμ›¨μ–΄ νŒ¨ν„΄)" INFORMATION EXPERT(정보 μ „λ¬Έκ°€) νŒ¨ν„΄ - μ±…μž„μ„ μˆ˜ν–‰ν•  정보λ₯Ό .. 2022. 11. 11.
[였브젝트] 4μž₯ '섀계 ν’ˆμ§ˆκ³Ό νŠΈλ ˆμ΄λ“œμ˜€ν”„' 4μž₯μ—μ„œλŠ” μ˜ν™” 예맀 μ‹œμŠ€ν…œμ„ 절차적 ν”„λ‘œκ·Έλž˜λ°(데이터 쀑심)으둜 κ΅¬ν˜„ν•˜κ³  μΊ‘μŠν™”, 응집도, κ²°ν•©λ„λ‘œ μ½”λ“œλ₯Ό 평가해 λ³Έλ‹€. 2μž₯ μ½”λ“œκ°€ μ–΄λ €μ›Œμ„œ 4μž₯도 미리 κ²λ¨Ήμ—ˆλŠ”λ° 생각보닀 μ΄ν•΄ν•˜κΈ° 쉬웠닀. ν™•μ‹€νžˆ λΉ„κ΅ν•΄μ„œ λ³΄λ‹ˆκΉŒ μ™œ 객체지ν–₯적으둜 μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜λŠ”μ§€ μ•Œ 수 μžˆμ—ˆλ‹€. μ§„μ •ν•œ μΊ‘μŠν™”λž€? λ‹¨μˆœνžˆ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό private둜 λ³€κ²½ν•˜κ³  ν•΄λ‹Ή 데이터λ₯Ό λ³€κ²½ν•  수 μžˆλ„λ‘ public κ²Œν„°/μ„Έν„°λ₯Ό λ§Œλ“€μ–΄ λ†“λŠ”κ±΄ μ§„μ •ν•œ 의미의 μΊ‘μŠν™”λŠ” μ•„λ‹ˆλ‹€. μΊ‘μŠν™”λŠ” 변경될 수 μžˆλŠ” μ–΄λ–€ 것이라도 κ°μΆ”λŠ” 것이고, λ‚΄λΆ€ 속성을 μ™ΈλΆ€λ‘œλΆ€ν„° κ°μΆ”λŠ” 것은 '데이터 μΊ‘μŠν™”'이닀. ν•˜μ§€λ§Œ μ±…μ—μ„œ μ„€λͺ…ν•˜λ“―이 μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ” λ©”μ†Œλ“œλ₯Ό 톡해 객체가 가지고 μžˆλŠ” λ‚΄λΆ€ 속성을 μ•Œ 수 μžˆλ‹€λŠ” 건 λ‚΄λΆ€ κ΅¬ν˜„μ„ λ³€κ²½ν•  경우, 이 λ©”μ†Œλ“œλ₯Ό.. 2022. 11. 4.
[였브젝트] 3μž₯ 'μ—­ν• , μ±…μž„, ν˜‘λ ₯' 3μž₯μ—μ„œλŠ” 객체지ν–₯ μ„€κ³„μ˜ 핡심인 μ—­ν• , μ±…μž„, ν˜‘λ ₯에 λŒ€ν•΄ μ„€λͺ…ν•œλ‹€. 객체지ν–₯ νŒ¨λŸ¬λ‹€μž„μ˜ 핡심은? μ—­ν• (role) : 객체듀이 ν˜‘λ ₯ μ•ˆμ—μ„œ μˆ˜ν–‰ν•˜λŠ” μ±…μž„λ“€μ΄ λͺ¨μ—¬ 객체가 μˆ˜ν–‰ν•˜λŠ” μ—­ν•  ꡬ성 μ±…μž„(responsibility) : 객체가 ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” 둜직(행동) λ©”μ‹œμ§€κ°€ 객체λ₯Ό κ²°μ •ν•˜κ³ , 행동이 μƒνƒœλ₯Ό 결정함 ν˜‘λ ₯(collaboration) : 객체듀이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›μœΌλ©΄μ„œ μƒν˜Έμž‘μš©ν•˜λŠ” 것 μ±…μž„μ΄λž€? 객체가 '무엇을 μ•Œκ³  μžˆλŠ”κ°€' + 무엇을 ν•  수 μžˆλŠ”κ°€'둜 ꡬ성됨 즉 'ν•˜λŠ” 것' + 'μ•„λŠ” 것'으둜 λ‚˜λˆŒ 수 있음 역할을 κ΅¬ν˜„ν•˜λŠ” 방법은? 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•œλ‹€ -> ꡬ체 ν΄λž˜μŠ€λ“€μ΄ 따라야 ν•˜λŠ” μ±…μž„μ˜ 집합을 μ„œμˆ ν•¨ CRC μΉ΄λ“œ (Candi.. 2022. 10. 27.