πŸ“š book/객체지ν–₯의 사싀과 μ˜€ν•΄

03 νƒ€μž…κ³Ό 좔상화 (2) νƒ€μž…

바쿄리 2021. 12. 29. 21:01

00. νƒ€μž…

νƒ€μž…μ€ κ°œλ…μ΄λ‹€.

 

νƒ€μž…μ€ 곡톡점을 기반으둜 객체듀을 λ¬ΆκΈ° μœ„ν•œ 틀이닀.

νƒ€μž…μ€ κ°œλ…κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 심볼, λ‚΄μ—°, 외연을 μ΄μš©ν•΄ μ„œμˆ ν•  수 있으며 νƒ€μž…μ— μ†ν•˜λŠ” 객체 μ—­μ‹œ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λΌκ³  ν•œλ‹€.

 

νƒ€μž…μ€ κ°œλ…κ³Ό λ™μΌν•˜λ‹€.
λ”°λΌμ„œ νƒ€μž…μ΄λž€ μš°λ¦¬κ°€ μΈμ‹ν•˜κ³  μžˆλŠ” λ‹€μ–‘ν•œ μ‚¬λ¬Όμ΄λ‚˜ 객체에 μ μš©ν•  수 μžˆλŠ” μ•„μ΄λ””μ–΄λ‚˜ 관념을 μ˜λ―Έν•œλ‹€.
μ–΄λ–€ 객체에 νƒ€μž…μ„ μ μš©ν•  수 μžˆμ„ λ•Œ κ·Έ 객체λ₯Ό νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λΌκ³  ν•œλ‹€.
νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λŠ” νƒ€μž…μ„ κ΅¬μ„±ν•˜λŠ” 외연인 객체 μ§‘ν•©μ˜ 일원이 λœλ‹€.

 

νƒ€μž…μ΄ 근본적으둜 κ°œλ…κ³Ό λ™μΌν•˜λ‹€κ³  ν•˜λ”λΌλ„ 일단 컴퓨터 λ‚΄λΆ€λ‘œ λ“€μ–΄μ˜€λŠ” μˆœκ°„ μ’€ 더 기계적인 의미둜 μœ€μƒ‰λ  수 밖에 μ—†λ‹€.

기계적인 μ˜λ―ΈλŠ” μ’…μ’… κ°œλ°œμžλ“€μ˜ 머리λ₯Ό ν˜Όλž€μŠ€λŸ½κ²Œ λ§Œλ“ λ‹€.

 

컴퓨터 μ•ˆμ— μ‚΄μ•„κ°€λŠ” 데이터λ₯Ό λͺ©μ μ— 따라 λΆ„λ₯˜(μˆ«μžν˜•, λ¬Έμžμ—΄ν˜•, λ…Όλ¦¬ν˜•,,)ν•˜κΈ° μ‹œμž‘ν•˜λ©΄μ„œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ μ•ˆμ—λŠ” μ„œμ„œνžˆ νƒ€μž… μ‹œμŠ€ν…œ(type system)이 μžλΌλ‚˜κΈ° μ‹œμž‘ν–ˆλ‹€.

νƒ€μž… μ‹œμŠ€ν…œμ€ λ©”λͺ¨λ¦¬ μ•ˆμ— μ €μž₯된 0κ³Ό 1에 λŒ€ν•΄ μˆ˜ν–‰ κ°€λŠ₯ν•œ μž‘μ—…κ³Ό λΆˆκ°€λŠ₯ν•œ μž‘μ—…μ„ κ΅¬λΆ„ν•¨μœΌλ‘œμ¨ 데이터가 잘λͺ» μ‚¬μš©λ˜λŠ” 것을 λ°©μ§€ν•œλ‹€.

결과적으둜 νƒ€μž… μ‹œμŠ€ν…œμ˜ λͺ©μ μ€ 데이터가 잘λͺ» μ‚¬μš©λ˜μ§€ μ•Šλ„λ‘ μ œμ•½μ‚¬ν•­μ„ λΆ€κ³Όν•˜λŠ” 것이닀.

 

βœ” νƒ€μž…μ€ 데이터가 μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠλƒμ— κ΄€ν•œ 것이닀.

    - μˆ«μžν˜• 데이터 : 데이터λ₯Ό λ”ν•˜κ±°λ‚˜ λΉΌκ±°λ‚˜ κ³±ν•˜κ±°λ‚˜ λ‚˜λˆŒ 수 μžˆλ‹€.

    - λ¬Έμžμ—΄ν˜• 데이터 : 두 데이터λ₯Ό μ—°κ²°ν•΄ μƒˆλ‘œμš΄ λ¬Έμžμ—΄λ‘œ λ§Œλ“€ 수 있고, 데이터에 ν¬ν•¨λœ 문자의 길이λ₯Ό μ•Œ 수 μžˆλ‹€.

 : 데이터가 μ–΄λ–€ νƒ€μž…μ— μ†ν•˜λŠ”μ§€λ₯Ό κ²°μ •ν•˜λŠ” 것 = 데이터에 μ μš©ν•  수 μžˆλŠ” μž‘μ—…

 

μ—°μ‚°μž(operate) : 데이터λ₯Ό μ΄μš©ν•΄ μˆ˜ν–‰ν•  수 μžˆλŠ” μž‘μ—… (ex: +, -, *, / -> μ‚°μˆ  μ—°μ‚°μžμ˜ 일쒅)

μ—¬κΈ°μ„œ !! μ—°μ‚°μžμ˜ μ’…λ₯˜κ°€ μ•„λ‹ˆλΌ μ–΄λ–€ 데이터에 μ–΄λ–€ μ—°μ‚°μžλ₯Ό μ μš©ν•  수 μžˆλŠλƒκ°€ κ·Έ λ°μ΄ν„°μ˜ νƒ€μž…μ„ κ²°μ •ν•œλ‹€.

 

βœ” νƒ€μž…에 μ†ν•œ 데이터λ₯Ό λ©”λͺ¨λ¦¬μ— μ–΄λ–»κ²Œ ν‘œν˜„ν•˜λŠ”μ§€λŠ” μ™ΈλΆ€λ‘œλΆ€ν„° μ² μ €ν•˜κ²Œ 감좰진닀.

데이터 νƒ€μž…μ˜ ν‘œν˜„μ€ μ—°μ‚° μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ°μ— κ°€μž₯ 효과적인 ν˜•νƒœκ°€ μ„ νƒλ˜λ©°,

κ°œλ°œμžλŠ” ν•΄λ‹Ή 데이터 νƒ€μž…μ˜ ν‘œν˜„ 방식을 λͺ°λΌλ„ 데이터λ₯Ό μ‚¬μš©ν•˜λŠ” 데 μ§€μž₯이 μ—†λ‹€.

 

데이터 νƒ€μž…μ€ λ©”λͺ¨λ¦¬ μ•ˆμ— μ €μž₯된 λ°μ΄ν„°μ˜ μ’…λ₯˜λ₯Ό λΆ„λ₯˜ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ 집합에 κ΄€ν•œ 메타데이터닀.
데이터에 λŒ€ν•œ λΆ„λ₯˜λŠ” μ•”μ‹œμ μœΌλ‘œ μ–΄λ–€ μ’…λ₯˜μ˜ 연산이 ν•΄λ‹Ή 데이터에 λŒ€ν•΄ μˆ˜ν–‰λ  수 μžˆλŠ”μ§€λ₯Ό κ²°μ •ν•œλ‹€.

객체지ν–₯ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ μš°λ¦¬λŠ” 객체λ₯Ό μΌμ’…μ˜ λ°μ΄ν„°μ²˜λŸΌ μ‚¬μš©ν•œλ‹€.

λ”°λΌμ„œ 객체λ₯Ό νƒ€μž…μ— 따라 λΆ„λ₯˜ν•˜κ³  κ·Έ νƒ€μž…μ— 이름을 λΆ™μ΄λŠ” 것은 κ²°κ΅­ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•  μƒˆλ‘œμš΄ 데이터 νƒ€μž…μ„ μ„ μ–Έν•˜λŠ” 것과 κ°™λ‹€.

 

λ™μΌν•œ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 일련의 κ°μ²΄λŠ” λ™μΌν•œ νƒ€μž…μ— μ†ν•œλ‹€κ³  말할 수 μžˆλ‹€.

-> 같은 νƒ€μž…μ— μ†ν•œ κ°μ²΄λŠ” ν–‰λ™λ§Œ λ™μΌν•˜λ‹€λ©΄ μ„œλ‘œ λ‹€λ₯Έ 데이터λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

 

μ—¬κΈ°μ„œ, λ™μΌν•œ 행동 = λ™μΌν•œ μ±…μž„ = λ™μΌν•œ λ©”μ„Έμ§€

-> λ™μΌν•œ νƒ€μž…μ— μ†ν•œ κ°μ²΄λŠ” λ‚΄λΆ€μ˜ 데이터 ν‘œν˜„ 방식이 λ‹€λ₯΄λ”라도 λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•˜κ³  이λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ‹€.

     λ‹€λ§Œ λ‚΄λΆ€μ˜ ν‘œν˜„ 방식이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방식을 μ„œλ‘œ λ‹€λ₯Ό μˆ˜λ°–μ— μ—†λ‹€.

-> 이것은 λ‹€ν˜•μ„±μ— 의미λ₯Ό λΆ€μ—¬ν•œλ‹€.

     (λ‹€ν˜•μ„± : λ™μΌν•œ μš”μ²­μ— λŒ€ν•΄ μ„œλ‘œ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ 응닡할 수 μžˆλŠ” λŠ₯λ ₯) -> λ‹€ν˜•μ μΈ 객체듀은 λ™μΌν•œ νƒ€μž…(λ˜λŠ” νƒ€μž… 계측)에 μ†ν•œλ‹€.

 

ν›Œλ₯­ν•œ 객체지ν–₯ μ„€κ³„λŠ” 외뢀에 ν–‰λ™λ§Œμ„ μ œκ³΅ν•˜κ³  λ°μ΄ν„°λŠ” 행동 λ’€λ‘œ 감좰야 ν•œλ‹€. -> μΊ‘μŠν™” 

-> 곡용 μΈν„°νŽ˜μ΄μŠ€ λ’€λ‘œ 데이터λ₯Ό μΊ‘μŠν™”ν•˜λŠ” 였래된 격언은 객체λ₯Ό 행동에 따라 λΆ„λ₯˜ν•˜κΈ° μœ„ν•΄ μ§€μΌœμ•Όν•˜λŠ” 기본적인 원칙이닀.

 

행동에 따라 객체λ₯Ό λΆ„λ₯˜ν•˜κΈ° μœ„ν•΄μ„œλŠ” 객체가 λ‚΄λΆ€μ μœΌλ‘œ 관리해야 ν•˜λŠ” 데이터가 μ•„λ‹ˆλΌ 객체가 외뢀에 μ œκ³΅ν•΄μ•Ό ν•˜λŠ” 행동을 λ¨Όμ € 생각해야 ν•œλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” 객체가 외뢀에 μ œκ³΅ν•΄μ•Ό ν•˜λŠ” μ±…μž„μ„ λ¨Όμ € κ²°μ •ν•˜κ³  κ·Έ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 데 μ ν•©ν•œ 데이터λ₯Ό λ‚˜μ€‘μ— κ²°μ •ν•œ ν›„, 데이터λ₯Ό 책암을 μˆ˜ν–‰ν•˜λŠ” 데 ν•„μš”ν•œ μ™ΈλΆ€ μΈν„°νŽ˜μ΄μŠ€ λ’€λ‘œ μΊ‘μŠν™”ν•΄μ•Ό ν•œλ‹€.

μ±…μž„-주도 섀계(Responsibility-Driven Design)라고 λΆ€λ₯΄λŠ” 객체지ν–₯ 섀계 방법은 데이터λ₯Ό λ¨Όμ € μƒκ°ν•˜λŠ” 데이터-주도 섀계(Data-Driven Design) λ°©λ²•μ˜ 단점을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ κ³ μ•ˆλλ‹€.

 

객체λ₯Ό κ²°μ •ν•˜λŠ” 것은 행동이닀.

λ°μ΄ν„°λŠ” 단지 행동을 λ”°λ₯Ό 뿐이닀.

이것이 객체λ₯Ό κ°μ²΄λ‹΅κ²Œ λ§Œλ“œλŠ” κ°€μž₯ 핡심적인 원칙이닀.

 

01. νƒ€μž…μ˜ 계측

μΌλ°˜ν™”/νŠΉμˆ˜ν™”

일반적인 νƒ€μž…μ΄λž€ νŠΉμˆ˜ν•œ νƒ€μž…μ΄ κ°€μ§„ λͺ¨λ“  행동듀 μ€‘μ—μ„œ 일뢀 ν–‰λ™λ§Œμ„ κ°€μ§€λŠ” νƒ€μž…μ„ 가리킨닀.

νŠΉμˆ˜ν•œ νƒ€μž…μ΄μ΄λž€ 일반적인 νƒ€μž…μ΄ κ°€μ§„ λͺ¨λ“  νƒ€μž…μ„ ν¬ν•¨ν•˜μ§€λ§Œ 거기에 더해 μžμ‹ λ§Œμ˜ 행동을 μΆ”κ°€ν•˜λŠ” νƒ€μž…μ„ 가리킨닀.

 

μŠˆνΌνƒ€μž…/μ„œλΈŒνƒ€μž…

μΌλ°˜ν™”/νŠΉμˆ˜ν™” κ΄€κ³„λŠ” μ’€ 더 일반적인 ν•œ νƒ€μž…κ³Ό μ’€ 더 νŠΉμˆ˜ν•œ ν•œ νƒ€μž… κ°„μ˜ 관계닀.

이 λ•Œ μ’€ 더 일반적인 νƒ€μž…μ„ μŠˆνΌνƒ€μž…(Supertype)이라고 ν•˜κ³  μ’€ 더 νŠΉμˆ˜ν•œ νƒ€μž…μ„ μ„œλΈŒνƒ€μž…(Subtype)이라고 ν•œλ‹€.

 

μŠˆνΌνƒ€μž…κ³Ό μ„œλΈŒνƒ€μž…μ—μ„œ μ€‘μš”ν•œ 것은 두 νƒ€μž… κ°„μ˜ 관계가 행동에 μ˜ν•΄ κ²°μ •λœλ‹€.

-> μ–΄λ–€ νƒ€μž…μ΄ λ‹€λ₯Έ νƒ€μž…μ˜ μ„œλΈŒνƒ€μž…μ΄ 되기 μœ„ν•΄μ„œλŠ” ν–‰μœ„μ  ν˜Έν™˜μ„±μ„ λ§Œμ‘±μ‹œμΌœμ•Ό ν•œλ‹€.

-> 일반적으둜 μ„œλΈŒνƒ€μž…μ€ μŠˆνΌνƒ€μž…μ˜ ν–‰μœ„μ™€ ν˜Έν™˜λ˜κΈ° λ•Œλ¬Έμ— μ„œλΈŒνƒ€μž…μ€ μŠˆνΌνƒ€μž…μ„ λŒ€μ²΄ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

 

02. 정적 λͺ¨λΈ

μ™œ νƒ€μž…μ„ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”κ°€? 객체지ν–₯은 객체λ₯Ό μ§€ν–₯ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ 객체만 닀루면 λ˜μ§€ μ•ŠλŠ”κ°€?

: νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” μΈκ°„μ˜ 인지 λŠ₯λ ₯μœΌλ‘œλŠ” μ‹œκ°„μ— 따라 λ™μ μœΌλ‘œ λ³€ν•˜λŠ” 객체릐 λ³΅μž‘μ„±μ„ κ·Ήλ³΅ν•˜κΈ°κ°€ λ„ˆλ¬΄ μ–΄λ ΅κΈ° λ•Œλ¬Έμ΄λ‹€.

 

νƒ€μž…μ„ μ‚¬μš©ν•˜λ©΄ λ™μ μœΌλ‘œ λ³€ν•˜λŠ” 객체의 μƒνƒœλ₯Ό 정적인 κ΄€μ μ—μ„œ ν‘œν˜„ν•  수 μžˆλ‹€.

 

βœ” νƒ€μž…μ€ 좔상화닀.

    νƒ€μž…μ„ μ΄μš©ν•˜λ©΄ 객체의 동적인 νŠΉμ„±μ„ 좔상화할 수 μžˆλ‹€.

    κ²°κ΅­ νƒ€μž…μ€ μ‹œκ°„μ— λ”°λ₯Έ 객체의 μƒνƒœ λ³€κ²½μ΄λΌλŠ” λ³΅μž‘μ„±μ„ λ‹¨μˆœν™”ν•  수 μžˆλŠ” 효과적인 방법이닀.

 

βœ” 객체λ₯Ό 생각할 λ•Œ, μš°λ¦¬λŠ” 두 κ°€μ§€ λͺ¨λΈμ„ λ™μ‹œμ— κ³ λ €ν•˜κ³  μžˆλ‹€.

 

    1. 객체가 νŠΉμ • μ‹œμ μ— ꡬ체적으둜 μ–΄λ–€ μƒνƒœλ₯Ό κ°€μ§€λŠλƒ?

       → 이λ₯Ό 객체의 μŠ€λƒ…μƒ·(snapshot)이라고 ν•œλ‹€.

       → 객체지ν–₯ λͺ¨λΈλ§μ„ μœ„ν•œ ν‘œμ€€ μ–Έμ–΄(UML)μ—μ„œ μŠ€λƒ…μƒ·μ€ κ°μ²΄ λ‹€μ΄μ–΄κ·Έλž¨(object diagram)이라고도 λΆˆλ¦°λ‹€.

     μŠ€λƒ…μƒ·μ²˜λŸΌ μ‹€μ œλ‘œ 객체가 μ‚΄μ•„ μ›€μ§μ΄λŠ” λ™μ•ˆ μƒνƒœκ°€ μ–΄λ–»κ²Œ λ³€ν•˜κ³  μ–΄λ–»κ²Œ ν–‰λ™ν•˜λŠ”μ§€λ₯Ό ν¬μ°©ν•˜λŠ” 것을 동적 λͺ¨λΈ(dynamic model)라고 ν•œλ‹€.

 

     2. 객체가 κ°€μ§ˆ 수 μžˆλŠ” λͺ¨λ“  μƒνƒœμ™€ λͺ¨λ“  행동을 μ‹œκ°„μ— λ…λ¦½μ μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 것

        → 일반적으둜 이런 λͺ¨λΈμ„ νƒ€μž… λͺ¨λΈ(type diagram)이라고 ν•œλ‹€.

      이 λͺ¨λΈμ€ λ™μ μœΌλ‘œ λ³€ν•˜λŠ” 객체의 μƒνƒœκ°€ μ•„λ‹ˆλΌ 객체가 μ†ν•œ νƒ€μž…μ˜ 정적인 λͺ¨μŠ΅μ„ ν‘œν˜„ν•˜κΈ° λ•Œλ¬Έμ— 정적 λͺ¨λΈ(static model)이라고 ν•œλ‹€.

 

* 객체지ν–₯ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„€κ³„ν•˜κ³  κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” 객체 κ΄€μ μ˜ 동적 λͺ¨λΈκ³Ό 객체λ₯Ό μΆ”μƒν™”ν•œ νƒ€μž… κ΄€μ μ˜ 정적 λͺ¨λΈμ„ 적절히 ν˜Όμš©ν•΄μ•Ό ν•œλ‹€.

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό μ΄μš©ν•΄ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” μ‹œμ μ—λŠ” μ‹œμŠ€ν…œμ„ 정적인 κ΄€μ μ—μ„œ μ ‘κ·Όν•˜λŠ” 것이닀.

κ·ΈλŸ¬λ‚˜ μ‹€μ œλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•΄ 객체의 μƒνƒœ 변경을 μΆ”μ ν•˜κ³  λ””λ²„κΉ…ν•˜λŠ” λ™μ•ˆμ—λŠ” 객체의 동적인 λͺ¨λΈμ„ νƒν—˜ν•˜κ³  μžˆλŠ” 것이닀.

 

βœ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 정적인 λͺ¨λΈμ€ 클래슀λ₯Ό μ΄μš©ν•΄ κ΅¬ν˜„λœλ‹€.

    λ”°λΌμ„œ νƒ€μž…μ„ κ΅¬ν˜„ν•˜λŠ” κ°€μž₯ 보편적인 방법은 클래슀λ₯Ό μ΄μš©ν•˜λŠ” 것이닀.

    - νƒ€μž… : 객체λ₯Ό λΆ„λ₯˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” κ°œλ…

    - 클래슀 : 단지 νƒ€μž…μ„ κ΅¬ν˜„ν•  수 μžˆλŠ” μ—¬λŸ¬ κ΅¬ν˜„ λ©”μ»€λ‹ˆμ¦˜ 쀑 ν•˜λ‚˜μΌ 뿐

    (μ‹€μ œλ‘œ μžλ°”μŠ€νŠΈλ¦½νŠΈμ™€ 같은 ν”„λ‘œν† νƒ€μž… 기반의 μ–Έμ–΄μ—λŠ” ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.)


⭐  κ²°κ΅­ 객체지ν–₯μ—μ„œ μ€‘μš”ν•œ 것은 λ™μ μœΌλ‘œ λ³€ν•˜λŠ” 객체의 'μƒνƒœ'와 μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” 'ν–‰μœ„'이닀. ⭐

⭐  ν΄λž˜μŠ€λŠ” νƒ€μž…μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ œκ³΅ν•˜λŠ” κ΅¬ν˜„ λ©”μ»€λ‹ˆμ¦˜μ΄λΌλŠ” 사싀을 κΈ°μ–΅ν•˜μž. ⭐