πŸ“– [객체지ν–₯의 사싀과 μ˜€ν•΄] μ—­ν• , μ±…μž„, ν˜‘λ ₯ κ΄€μ μ—μ„œ λ³Έ 객체지ν–₯

82.831Β·2023λ…„ 1μ›” 6일
1

01. ν˜‘λ ₯ν•˜λŠ” κ°μ²΄λ“€μ˜ 곡동체 / 02. μ΄μƒν•œ λ‚˜λΌμ˜ 객체

객체의 νŠΉμ§•

  • μ—¬λŸ¬ 객체가 λ™μΌν•œ 역할을 μˆ˜ν–‰ν•  수 μžˆλ‹€.
  • 역할은 λŒ€μ²΄ κ°€λŠ₯성을 μ˜λ―Έν•œλ‹€.
  • 각 κ°μ²΄λŠ” μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 방법을 자율적으둜 선택할 수 μžˆλ‹€.
  • ν•˜λ‚˜μ˜ 객체가 λ™μ‹œμ— μ—¬λŸ¬ 역할을 μˆ˜ν–‰ν•  수 μžˆλ‹€.
  • κ°μ²΄λŠ” μƒνƒœλ₯Ό 가지며 μƒνƒœλŠ” λ³€κ²½ κ°€λŠ₯ν•˜λ‹€.
  • 객체의 μƒνƒœλ₯Ό λ³€κ²½μ‹œν‚€λŠ” 것은 객체의 행동이닀.
  • ν–‰λ™μ˜ κ²°κ³ΌλŠ” μƒνƒœμ— 의쑴적이며 μƒνƒœλ₯Ό μ΄μš©ν•΄ μ„œμˆ ν•  수 μžˆλ‹€.
  • ν–‰λ™μ˜ μˆœμ„œκ°€ μ‹€ν–‰ 결과에 영ν–₯을 λ―ΈμΉœλ‹€.
  • κ°μ²΄λŠ” μ–΄λ–€ μƒνƒœμ— μžˆλ”λΌλ„ μœ μΌν•˜κ²Œ 식별 κ°€λŠ₯ν•˜λ‹€.

객체지ν–₯의 본질

  • 객체지ν–₯μ΄λž€ μ‹œμŠ€ν…œμ„ μƒν˜Έμž‘μš©ν•˜λŠ” 자율적인 κ°μ²΄λ“€μ˜ κ³΅λ™μ²΄λ‘œ 바라보고 객체λ₯Ό μ΄μš©ν•΄ μ‹œμŠ€ν…œμ„ λΆ„ν• ν•˜λŠ” 방법
  • 자율적인 κ°μ²΄λž€ μƒνƒœμ™€ ν–‰μœ„λ₯Ό ν•¨κ»˜ μ§€λ‹ˆλ©° 슀슀둜 자기 μžμ‹ μ„ μ±…μž„μ§€λŠ” 객체λ₯Ό 의미
  • κ°μ²΄λŠ” μ‹œμŠ€ν…œμ˜ ν–‰μœ„λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ 객체와 ν˜‘λ ₯
  • 각 κ°μ²΄λŠ” ν˜‘λ ₯ λ‚΄μ—μ„œ 정해진 역할을 μˆ˜ν–‰ν•˜λ©° 역할은 κ΄€λ ¨λœ μ±…μž„μ˜ 집합
  • κ°μ²΄λŠ” λ‹€λ₯Έ 객체와 ν˜‘λ ₯ν•˜κΈ° μœ„ν•΄ λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•˜κ³ , λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•œ κ°μ²΄λŠ” λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 μ ν•©ν•œ λ©”μ„œλ“œλ₯Ό 자율적으둜 선택

μƒνƒœ

  • νŠΉμ • μ‹œμ μ— 객체가 가지고 μžˆλŠ” μ •λ³΄μ˜ μ§‘ν•©μœΌλ‘œ 객체의 ꡬ쑰적 νŠΉμ§•μ„ ν‘œν˜„ν•œλ‹€.
  • 객체의 μƒνƒœλŠ” 객체에 μ‘΄μž¬ν•˜λŠ” 정적인 ν”„λ‘œνΌν‹°μ™€ 동적인 ν”„λ‘œνΌν‹°μ˜ κ°’μœΌλ‘œ κ΅¬μ„±λœλ‹€.
  • 객체의 ν”„λ‘œνΌν‹°λŠ” λ‹¨μˆœν•œ κ°’κ³Ό λ‹€λ₯Έ 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” 링크둜 κ΅¬λΆ„λœλ‹€.

행동

  • μ™ΈλΆ€μ˜ μš”μ²­ λ˜λŠ” μˆ˜μ‹ λœ λ©”μ‹œμ§€μ— μ‘λ‹΅ν•˜κΈ° μœ„ν•΄ λ™μž‘ν•˜κ³  λ°˜μ‘ν•˜λŠ” ν™œλ™
  • ν–‰λ™μ˜ 결과둜 κ°μ²΄λŠ” μƒνƒœλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ λ‹€λ₯Έ κ°μ²΄μ—κ²Œ λ©”μ‹œμ§€λ₯Ό 전달할 수 μžˆλ‹€.
  • κ°μ²΄λŠ” 행동을 톡해 λ‹€λ₯Έ κ°μ²΄μ™€μ˜ ν˜‘λ ₯에 μ°Έμ—¬ν•˜λ―€λ‘œ 행동은 외뢀에 κ°€μ‹œμ μ΄λ‹€.

μƒνƒœμ™€ 행동

  • 객체의 행동은 μƒνƒœμ— 영ν–₯을 λ°›λŠ”λ‹€.
  • 객체의 행동은 μƒνƒœλ₯Ό λ³€κ²½μ‹œν‚¨λ‹€.

03. νƒ€μž…κ³Ό 좔상화

  • μ§„μ •ν•œ 의미의 좔상화

ν˜„μ‹€μ—μ„œ μΆœλ°œν•˜λ˜ λΆˆν•„μš”ν•œ 뢀뢄을 λ„λ €λ‚΄κ°€λ©΄μ„œ μ‚¬λ¬Όμ˜ λ†€λΌμš΄ λ³Έμ§ˆμ„ λ“œλŸ¬λ‚˜κ²Œ ν•˜λŠ” 과정이닀. λΆˆν•„μš”ν•œ 뢀뢄을 λ¬΄μ‹œν•¨μœΌλ‘œμ¨ ν˜„μ‹€μ— μ‘΄μž¬ν•˜λŠ” λ³΅μž‘μ„±μ„ κ·Ήλ³΅ν•˜κ³ , λ³΅μž‘ν•œ ν˜„μ‹€μ„ λ‹¨μˆœν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μΈκ°„μ˜ κ°€μž₯ 기본적인 인지 μˆ˜λ‹¨

"μΆ”μƒν™”μ˜ μˆ˜μ€€, 이읡, κ°€μΉ˜λŠ” λͺ©μ μ— μ˜μ‘΄μ μ΄λ‹€.
ν˜„μƒμ€ λ³΅μž‘ν•˜λ‹€. 법칙은 λ‹¨μˆœν•˜λ‹€. 버릴 게 무엇인지 μ•Œμ•„λ‚΄λΌ."

  • μ±…μ—μ„œμ˜ 좔상화

μ–΄λ–€ 양상, μ„ΈλΆ€ 사항, ꡬ쑰λ₯Ό μ’€ 더 λͺ…ν™•ν•˜κ²Œ μ΄ν•΄ν•˜κΈ° μœ„ν•΄ νŠΉμ • μ ˆμ°¨λ‚˜ 물체λ₯Ό μ˜λ„μ μœΌλ‘œ μƒλž΅ν•˜κ±°λ‚˜ 감좀으둜써 λ³΅μž‘λ„λ₯Ό κ·Ήλ³΅ν•˜λŠ” 방법이닀.

두가지 차원
  1. ꡬ체적인 사물듀 κ°„μ˜ 곡톡점은 μ·¨ν•˜κ³  차이점은 λ²„λ¦¬λŠ” μΌλ°˜ν™”λ₯Ό 톡해 λ‹¨μˆœν•˜κ²Œ λ§Œλ“œλŠ” 것
  2. μ€‘μš”ν•œ 뢀뢄을 κ°•μ‘°ν•˜κΈ° μœ„ν•΄ λΆˆν•„μš”ν•œ μ„ΈλΆ€ 사항을 μ œκ±°ν•¨μœΌλ‘œμ¨ λ‹¨μˆœν•˜κ²Œ λ§Œλ“œλŠ” 것

κ°œλ…(concept)

  • 곡톡점을 기반으둜 객체듀을 λ¬ΆκΈ° μœ„ν•œ 그릇
  • 일반적으둜 μš°λ¦¬κ°€ μΈμ‹ν•˜κ³  μžˆλŠ” λ‹€μ–‘ν•œ μ‚¬λ¬Όμ΄λ‚˜ 객체에 μ μš©ν•  수 μžˆλŠ” μ•„μ΄λ””μ–΄λ‚˜ 관념
  • κ°μ²΄λ“€μ˜ λ³΅μž‘μ„±μ„ κ·Ήλ³΅ν•˜κΈ° μœ„ν•œ 좔상화 도ꡬ
  • κ°œλ…μ„ μ΄μš©ν•˜λ©΄ 객체λ₯Ό μ—¬λŸ¬ 그룹으둜 λΆ„λ₯˜(classification)ν•  수 μžˆλ‹€. (μΆ”μƒν™”μ˜ 두가지 차원을 λͺ¨λ‘ μ‚¬μš©)
  • 객체에 μ–΄λ–€ κ°œλ…μ„ μ μš©ν•˜μ—¬ κ°œλ… 그룹의 일원이 될 λ•Œ 객체λ₯Ό κ·Έ κ°œλ…μ˜ μΈμŠ€ν„΄μŠ€(instance)라고 ν•œλ‹€.

λΆ„λ₯˜(classification)

  • 객체에 νŠΉμ •ν•œ κ°œλ…μ„ μ μš©ν•˜λŠ” μž‘μ—…μ΄λ‹€.
  • 객체에 νŠΉμ •ν•œ κ°œλ…μ„ μ μš©ν•˜κΈ°λ‘œ κ²°μ‹¬ν–ˆμ„ λ•Œ μš°λ¦¬λŠ” κ·Έ 객체λ₯Ό νŠΉμ •ν•œ μ§‘ν•©μ˜ λ©€λ²„λ‘œ λΆ„λ₯˜ν•˜κ³  μžˆλŠ” 것이닀.

κ°œλ…μ˜ 세가지 관점

  • νŠΉμ •ν•œ 객체가 μ–΄λ–€ 그룹에 속할 것인지λ₯Ό κ²°μ •ν•œλ‹€. 객체λ₯Ό λΆ„λ₯˜ν•˜κΈ° μœ„ν•œ ν‹€.

심볼(symbol): κ°œλ…μ„ κ°€λ¦¬ν‚€λŠ” κ°„λž΅ν•œ μ΄λ¦„μ΄λ‚˜ λͺ…μΉ­
λ‚΄μ—°(intension): κ°œλ…μ˜ μ™„μ „ν•œ μ •μ˜λ₯Ό λ‚˜νƒ€λ‚΄λ©° λ‚΄μ—°μ˜ 의미λ₯Ό μ΄μš©ν•΄ 객체가 κ°œλ…μ— μ†ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό 확인할 수 μžˆλ‹€.
μ™Έμ—°(extension): κ°œλ…μ— μ†ν•˜λŠ” λͺ¨λ“  객체의 집합 (set)


νƒ€μž…

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

  • 객체와 νƒ€μž…
  1. μ–΄λ–€ 객체가 μ–΄λ–€ νƒ€μž…μ— μ†ν•˜λŠ”μ§€λ₯Ό κ²°μ •ν•˜λŠ” 것은 객체가 μˆ˜ν–‰ν•˜λŠ” 행동이닀. 객체가 μ–΄λ–€ 행동을 ν•˜λƒμ— 따라 객체의 νƒ€μž…μ΄ κ²°μ •λœλ‹€.
  2. 객체의 내뢀적인 ν‘œν˜„μ€ μ™ΈλΆ€λ‘œλΆ€ν„° μ² μ €ν•˜κ²Œ 감좰진닀.

객체의 νƒ€μž…μ€ 객체의 λ‚΄λΆ€ ν‘œν˜„κ³ΌλŠ” μ•„λ¬΄λŸ° 상관이 없기에 객체의 λ‚΄λΆ€ ν‘œν˜„ 방식이 λ‹€λ₯΄λ”라도 μ–΄λ–€ 객체듀이 λ™μΌν•œ 행동을 μˆ˜ν–‰ν•œλ‹€λ©΄ κ·Έ 객체듀은 λ™μΌν•œ νƒ€μž…μ— μ†ν•œλ‹€.

"객체의 νƒ€μž…μ„ κ²°μ •ν•˜λŠ” 것은 객체의 행동뿐이닀. 객체가 μ–΄λ–€ 데이터λ₯Ό λ³΄μœ ν•˜κ³  μžˆλŠ”μ§€λŠ” νƒ€μž…μ„ κ²°μ •ν•˜λŠ”λ° μ•„λ¬΄λŸ° 영ν–₯도 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€."

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

  • λ‹€ν˜•μ„±

λ™μΌν•œ μš”μ²­μ— λŒ€ν•΄ μ„œλ‘œ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ 응닡할 수 μžˆλŠ” λŠ₯λ ₯이닀. λ‹€ν˜•μ μΈ 객체듀은 λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό μ„œλ‘œ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ λ™μΌν•œ νƒ€μž…μ— μ†ν•˜κ²Œ λœλ‹€.

  • μΊ‘μŠν™”

λ°μ΄ν„°μ˜ λ‚΄λΆ€ ν‘œν˜„ 방식과 λ¬΄κ΄€ν•˜κ²Œ ν–‰λ™λ§Œμ΄ κ³ λ € λŒ€μƒμ΄λΌλŠ” 사싀은 외뢀에 데이터λ₯Ό 감좰야 ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.


μ±…μž„-주도 섀계(Responsibility-Driven Design)

  • 객체지ν–₯ 섀계 방법
    객체가 외뢀에 μ œκ³΅ν•΄μ•Ό ν•˜λŠ” μ±…μž„μ„ λ¨Όμ € κ²°μ •ν•˜κ³  κ·Έ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 데 μ ν•©ν•œ 데이터λ₯Ό λ‚˜μ€‘μ— κ²°μ •ν•œ ν›„, 데이터λ₯Ό μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ μ™ΈλΆ€ μΈν„°νŽ˜μ΄μŠ€ λ’€λ‘œ μΊ‘μŠν™” ν•΄μ•Όν•œλ‹€.

μΌλ°˜ν™”/νŠΉμˆ˜ν™”(generalization/specialization) 관계

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

일반적인 νƒ€μž…: νŠΉμˆ˜ν•œ νƒ€μž…μ΄ 가진 λͺ¨λ“  행동듀 μ€‘μ—μ„œ 일뢀 ν–‰λ™λ§Œμ„ κ°€μ§€λŠ” νƒ€μž…
νŠΉμˆ˜ν•œ νƒ€μž…: 일반적인 νƒ€μž…μ΄ 가진 λͺ¨λ“  행동을 ν¬ν•¨ν•˜μ§€λ§Œ 거기에 더해 μžμ‹ λ§Œμ˜ 행동을 μΆ”κ°€ν•˜λŠ” νƒ€μž…

  • 일반적인 νƒ€μž…μ„ νŠΉμˆ˜ν•œ νƒ€μž…λ³΄λ‹€ 더 적은 수의 행동을 κ°€μ§€μ§€λ§Œ, 더 큰 크기의 μ™Έμ—° 집합을 가진닀.
μŠˆνΌνƒ€μž…/μ„œλΈŒνƒ€μž…

일반적인 νƒ€μž… == μŠˆνΌνƒ€μž…
νŠΉμˆ˜ν•œ νƒ€μž… == μ„œλΈŒνƒ€μž…

  • μ–΄λ–€ νƒ€μž…μ΄ λ‹€λ₯Έ νƒ€μž…μ˜ μ„œλΈŒ νƒ€μž…μ΄ 되기 μœ„ν•΄μ„œλŠ” ν–‰μœ„μ  ν˜Έν™˜μ„±μ„ λ§Œμ‘±μ‹œμΌœμ•Ό ν•œλ‹€.
  • 일반적으둜 μ„œλΈŒνƒ€μž…μ€ μŠˆνΌνƒ€μž…μ˜ ν–‰μœ„μ™€ ν˜Έν™˜λ˜κΈ° λ•Œλ¬Έμ— μŠˆνΌνƒ€μž…μ„ λŒ€μ²΄ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
동적λͺ¨λΈ/정적λͺ¨λΈ

μŠ€λƒ…μƒ· == 객체 λ‹€μ΄μ–΄κ·Έλž¨ == 동적 λͺ¨λΈ(dynamic model)
νƒ€μž… λͺ¨λΈ == 정적 λͺ¨λΈ(static model)

클래슀

νƒ€μž…μ„ 'κ΅¬ν˜„ν•˜λŠ”' κ°€μž₯ 보편적인 방법이닀.
νƒ€μž…μ„ κ΅¬ν˜„ν•  수 μžˆλŠ” μ—¬λŸ¬ κ΅¬ν˜„ λ©”μ»€λ‹ˆμ¦˜ 쀑 ν•˜λ‚˜μΌ 뿐

0개의 λŒ“κΈ€