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

πŸ“šμ½μ€ μ±… 정리/μžλ°” 객체지ν–₯ 원리와 이해

[μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체지ν–₯의 원리와 이해] 3μž₯ : μžλ°”μ™€ 객체 지ν–₯

객체지ν–₯은 인간 지ν–₯이닀

객체 지ν–₯의 큰 κ·Έλ¦Ό

  • μ„Έμƒμ˜ λͺ¨λ“  것은 "객체"λ‹€.
  • 각각의 κ³ μœ ν•˜λ‹€.
  • 사물은 속성을 κ°–λŠ”λ‹€.
  • 사물은 ν–‰μœ„λ₯Ό ν•œλ‹€.

우리 인간은 사물을 "λΆ„λ₯˜"λ₯Ό 톡해 μ΄ν•΄ν•˜κ³  μΈμ§€ν•œλ‹€.

클래슀 : 객체

μ‚¬λžŒμ€ λ‚˜μ΄, λͺΈλ¬΄κ²Œλ₯Ό 가지며 "λ¨Ήκ±°λ‚˜, μžκ±°λ‚˜, μš°λŠ” 등에 행동"을 ν•˜λŠ” 물체λ₯Ό λœ»ν•œλ‹€. (κ°œλ…μ— λ”°λ₯Έ λΆ„λ₯˜)

 

μš°λ¦¬κ°€ μ‹€μ œ 사물을 μΈμ§€ν•˜κ³  μ‚¬κ³ ν•˜λŠ” λ°©μ‹λŒ€λ‘œ 객체 λ‹¨μœ„μ˜ ν”„λ‘œκ·Έλž˜λ°μ΄ 객체 지ν–₯μ—μ„œ κ°€λŠ₯ν•˜λ‹€.

 

객체 지ν–₯의 4λŒ€ νŠΉμ„± - μΊ‘! 상좔닀 

  • μΊ‘μŠν™” : 정보은닉
  • 상속 : μž¬μ‚¬μš©
  • 좔상화 : λͺ¨λΈλ§
  • λ‹€ν˜•μ„± : μ‚¬μš©νŽΈμ˜

클래슀 vs. 객체 = λΆ•μ–΄λΉ΅ν‹€ vs. λΆ•μ–΄λΉ΅ ???

λΆ•μ–΄λΉ΅ν‹€ λΆ•μ–΄λΉ΅ = new λΆ•μ–΄λΉ΅ν‹€(); //???

뢕어빡틀을 μƒˆλ‘œμš΄ λ§Œλ“ λ‹€κ³  "λΆ•μ–΄λΉ΅"이 될순 μ—†λ‹€

-> 뢕어빡틀은 κ·Έμ € 뢕어빡을 λ§Œλ“œλŠ” νŒ©ν„°λ¦¬μΌ 뿐이닀.

ν΄λž˜μŠ€μ™€ 객체의 ꡬ뢄 방법

주어진 단어에 λ‚˜μ΄λ₯Ό λ¬Όμ–΄λ³΄μž. λ§Œμ•½ λŒ€λ‹΅ν•  수 μžˆλ‹€λ©΄ 객체이고 λŒ€λ‹΅ν•  수 μ—†λ‹€λ©΄ 클래슀일 것이닀.

μ‚¬λžŒ -> 클래슀, κΉ€μ—°μ•„ -> 객체

ν΄λž˜μŠ€λŠ” λΆ„λ₯˜μ— λŒ€ν•œ κ°œλ…!
κ°μ²΄λŠ” μ‹€μ²΄ν™”ν•œ 것!

좔상화: λͺ¨λΈλ§

"객체 지ν–₯의 μΆ”μƒν™”λŠ” 곧 λͺ¨λΈλ§μ΄λ‹€"

μΆ”μƒν™”λž€ ꡬ체적인 것을 λΆ„ν•΄ν•΄μ„œ κ΄€μ°°μžκ°€ 관심 μžˆλŠ” νŠΉμ„±λ§Œ 가지고 μž¬μ‘°ν•©ν•˜λŠ” 것이닀.

(세뢀사항은 버리고 μ€‘μš”ν•˜κ³  곡톡적인 κ²ƒλ§Œ μ·¨ν•΄ λ‚΄κ°€ κ΄€μ‹¬μžˆλŠ” 것에 μ§‘μ€‘ν•˜λŠ” 것)

 

  • 객체 : 세상에 μ‘΄μž¬ν•˜λŠ” μœ μΌλ¬΄μ΄ν•œ 사물
  • 클래슀 : 같은 속성과 κΈ°λŠ₯을 가진 객체λ₯Ό μ΄μΉ­ν•˜λŠ” κ°œλ…

μš°λ¦¬λŠ” 객체λ₯Ό λ¨Όμ € μΈμ‹ν•˜κ³  κ·Έ 객체가 가진 νŠΉμ„±μ— 따라 λΆ„λ₯˜λ₯Ό 톡해 클래슀λ₯Ό μΈμ‹ν•˜κ²Œ λœλ‹€.

ν•˜μ§€λ§Œ μ‚¬λ¬Όμ˜ μ°½μ‘°μ£ΌλŠ” "μ•„λ‹΄"κ³Ό "이브"λΌλŠ” 객체λ₯Ό λ§Œλ“€κΈ° 전에 ν΄λž˜μŠ€λΌλŠ” κ°œλ…μ„ λ¨Όμ € λ§Œλ“€μ—ˆμ„ 것이닀.

 

μš°λ¦¬λ„ 객체 지ν–₯μ—μ„œλŠ” ν•΄λ‹Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ°½μ‘°μ£Όκ°€ λœλ‹€.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμžλŠ” 클래슀λ₯Ό μ„€κ³„ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 물체의 κ³΅ν†΅λœ νŠΉμ„±μ„ νŒŒμ•…ν•œλ‹€.

 

κ°œλ°œμžκ°€ "μ‚¬λžŒ 클래슀"λ₯Ό λ§Œλ“ λ‹€λ©΄ "λ¨Ήλ‹€, μžλ‹€, μΌν•˜λ‹€, μšΈλ‹€, μ‹œλ ₯, λͺΈλ¬΄κ²Œ, λ‚˜μ΄ λ“±" μ—¬λŸ¬ κ³΅ν†΅λœ νŠΉμ„±μ„ 찾게 λœλ‹€.

 

ν•˜μ§€λ§Œ  κ³Όμ—° "μ‚¬λžŒ"의 λͺ¨λ“  νŠΉμ„±μ„ λ‚˜μ—΄ν•  ν•„μš”κ°€ μžˆμ„κΉŒ??

 

κ°œλ°œμžκ°€ ν•„μš”ν•œ "μ‚¬λžŒ"은 Context(μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 경계)에 따라 λ‹¬λΌμ§ˆ 수 μžˆλ‹€.

 

병원 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ -> μ‹œλ ₯, λͺΈλ¬΄κ²Œ μ •λ³΄λ‚˜ μ ‘μˆ˜ν•˜λ‹€. λ“±μ˜ κΈ°λŠ₯이 ν•„μš”ν•˜λ‹€.

은행 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ - > μ‹œλ ₯, λͺΈλ¬΄κ²Œ μ •λ³΄λŠ” ν•„μš”μ—†κ³  λ‚˜μ΄, μ—°λ΄‰μ΄λ‚˜ μ΄μ²΄ν•˜λ‹€. λŒ€μΆœν•˜λ‹€. λ“±μ˜ κΈ°λŠ₯이 ν•„μš”ν•˜λ‹€.

 

κ²°κ΅­, IT κ΄€μ μ˜

μΆ”μƒν™”λž€ ꡬ체적인 것을 λΆ„ν•΄ν•΄μ„œ 관심 μ˜μ—­(μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 경계)에 μžˆλŠ” νŠΉμ„±λ§Œ 가지고 μž¬μ‘°ν•©ν•˜λŠ” 것을 λ§ν•œλ‹€. (λͺ¨λΈλ§)

-> μžλ°”λŠ” μ΄λŸ¬ν•œ 객체 지ν–₯의 좔상화λ₯Ό "class ν‚€μ›Œλ“œ"λ₯Ό 톡해 μ§€μ›ν•˜κ³  μžˆλ‹€.

 

클래슀 멀버 - 객체 멀버

클래슀 λ³€μˆ˜λŠ” ν•΄λ‹Ή 클래슀의 λͺ¨λ“  객체가 같은 값을 κ°€μ§ˆ λ•Œ μ‚¬μš©ν•˜λŠ” 것이 기본이닀.

클래슀 λ©”μ„œλ“œλŠ” κ°μ²΄λ“€μ˜ 쑴재 여뢀에 관계없이 μ“Έ 수 μžˆλŠ” λ©”μ„œλ“œμ΄λ‹€. ex) Math와 같은 μœ ν‹Έλ¦¬ν‹°μ„± λ©”μ„œλ“œ

상속: μž¬μ‚¬μš© + ν™•μž₯

상속은 계측적인 κ°œλ…μ΄ μ•„λ‹Œ "μž¬μ‚¬μš©κ³Ό ν™•μž₯"으둜 μ΄ν•΄ν•˜λŠ” 것이 λ§žλ‹€!

λΆ€λͺ¨-μžμ‹ κ°„μ˜ 관계 (X)

-> 동물은 포유λ₯˜μ˜ λΆ€λͺ¨κ°€ 될 수 μ—†λ‹€. 동물을 μ’€ 더 μ„ΈλΆ„ν™”ν•΄μ„œ 포유λ₯˜κ°€ λ‚˜μ˜¬ 수 μžˆλ‹€.

 

**상속은 계측도가 μ•„λ‹Œ λΆ„λ₯˜λ„이닀**

λΆ€λͺ¨ν΄λž˜μŠ€ - μžμ‹ν΄λž˜μŠ€ (x)

슈퍼클래슀 - μ„œλΈŒν΄λž˜μŠ€ (o)

 

 

좔상화(μΌλ°˜ν™”) vs ꡬ체화(νŠΉμˆ˜ν™”)

μƒμœ„ 클래슀둜 갈수둝 좔상화/μΌλ°˜ν™”κ°€ 되고 ν•˜μœ„ 클래슀둜 갈수둝 ꡬ체화/νŠΉμˆ˜ν™”κ°€ μ§„ν–‰λœλ‹€.

 

μƒμ†κ΄€κ³„μ—μ„œ λ§Œμ‘±ν•΄μ•Όλ§Œ ν•˜λŠ” λ¬Έμž₯

  • ν•˜μœ„ ν΄λž˜μŠ€λŠ” μƒμœ„ ν΄λž˜μŠ€μ΄λ‹€. (λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 법칙)

μ˜ν¬λŠ” μ•„λΉ κ°€ 될 수 μ—†λ‹€. (μΌλ°˜ν™” λΆˆκ°€)

νŽ­κ·„μ€ λ™λ¬Όμ˜ 역할을 μˆ˜ν–‰ν•  수 μžˆλ‹€. (μΌλ°˜ν™” κ°€λŠ₯)

 

  • 'is a' 보단 'a kind of'

νŽ­κ·„μ€ ν•œλ§ˆλ¦¬μ˜ μ‘°λ₯˜μ΄λ‹€ 보단 νŽ­κ·„μ€ μ‘°λ₯˜μ˜ ν•œ μ’…λ₯˜μ΄λ‹€.

μƒμ†μ˜ κ°•λ ₯함

  • 상속을 톡해 μ΅œμƒμœ„ 클래슀 Object의 νŠΉμ„±μ„ λ¬Όλ €λ°›μ•„ toString() λ©”μ„œλ“œλ₯Ό λͺ¨λ“  μ„œλΈŒν΄λž˜μŠ€μ—μ„œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.
  • κ΅¬μ²΄ν™”λœ 객체듀을 ν•˜λ‚˜μ˜ μΌλ°˜ν™”λœ κ°œλ…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

μžλ°”λŠ” 닀쀑 μƒμ†μ˜ 닀이아λͺ¬λ“œ 문제둜 인해 닀쀑상속을 버리고 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ„μž…ν–ˆλ‹€.

 

상속과 μΈν„°νŽ˜μ΄μŠ€

상속과 μΈν„°νŽ˜μ΄μŠ€

μΈν„°νŽ˜μ΄μŠ€λŠ” 'be able to'와 같이 "무엇을 ν•  수 μžˆλŠ”" ν˜•νƒœλ‘œ λ§Œλ“œλŠ” 것이 μ’‹λ‹€.

  • μžλ°” API μ˜ˆμ‹œ
    • Comparable μΈν„°νŽ˜μ΄μŠ€ : 비ꡐ할 수 μžˆλŠ”
    • Runnable μΈν„°νŽ˜μ΄μŠ€ : μ‹€ν–‰ν•  수 μžˆλŠ”

μΈν„°νŽ˜μ΄μŠ€λŠ” ν΄λž˜μŠ€κ°€ '무엇을 ν•  수 μžˆλ‹€'λΌλŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λ„λ‘ "κ°•μ œ"ν•˜κ²Œ λœλ‹€.

 

  • ν€΄μ¦ˆ
    • μƒμœ„ ν΄λž˜μŠ€λŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—κ²Œ 물렀쀄 νŠΉμ„±μ΄ λ§Žμ„μˆ˜λ‘ μ’‹μ„κΉŒ?
    • μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„μ„ κ°•μ œν•  λ©”μ„œλ“œκ°€ λ§Žμ„μˆ˜λ‘ μ’‹μ„κΉŒ?

λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙에 μ˜ν•΄ μƒμœ„ ν΄λž˜μŠ€κ°€ ν’μ„±ν• μˆ˜λ‘ μ’‹λ‹€.

μΈν„°νŽ˜μ΄μŠ€ λΆ„ν•  원칙에 μ˜ν•΄ μΈν„°νŽ˜μ΄μŠ€ λ©”μ„œλ“œλŠ” μ μ„μˆ˜λ‘ μ’‹λ‹€. (μžμ‹ μ˜ μ±…μž„μ΄ μ•„λ‹Œ 것을 맑을 수 μžˆμœΌλ―€λ‘œ..)

 

λ‹€ν˜•μ„±: μ‚¬μš©νŽΈμ˜μ„±

객체지ν–₯μ—μ„œ λ‹€ν˜•μ„±μ΄λΌκ³  ν•˜λ©΄ "μ˜€λ²„λΌμ΄λ”©"κ³Ό "μ˜€λ²„λ‘œλ”©"이라고 ν•  수 μžˆλ‹€.

-> ν•˜μ§€λ§Œ "μ˜€λ²„λ‘œλ”©"이 λ‹€ν˜•μ„±μΈμ§€μ— λŒ€ν•΄μ„œλŠ” 이견이 μžˆλ‹€.

 

μ˜€λ²„λΌμ΄λ”© : 같은 λ©”μ„œλ“œ 이름, 같은 인자 λͺ©λ‘μœΌλ‘œ μƒμœ„ 클래슀의 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜

μ˜€λ²„λ‘œλ”© : 같은 λ©”μ„œλ“œ 이름, λ‹€λ₯Έ 인자 λͺ©λ‘μœΌλ‘œ λ‹€μˆ˜μ˜ λ©”μ„œλ“œλ₯Ό 쀑볡 μ •μ˜

 

Animal pingu = new Penguin();

μœ„ μ½”λ“œμ—μ„œ pingu의 showName() λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ Animal 객체에 μ˜ν•΄ μ •μ˜λœ λ©”μ„œλ“œκ°€ μ•„λ‹ˆλΌ Penguin 객체에 μ˜ν•΄ μž¬μ •μ˜λœ showName()λ©”μ„œλ“œκ°€ 싀행됨을 κΈ°μ–΅ν•˜μž.

 

-> μƒμœ„ 클래슀 νƒ€μž…μ˜ 객체 μ°Έμ‘° λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ”©ν•œ λ©”μ„œλ“œκ°€ ν˜ΈμΆœλœλ‹€!!

μƒμœ„ 클래슀 μ°Έμ‘° λ³€μˆ˜λ‘œ ν•˜μœ„ ν΄λž˜μŠ€κ°€ μ˜€λ²„λΌμ΄λ”©ν•œ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

 

λ‹€ν˜•μ„±μ€ κ°œλ°œμžκ°€ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ μ‚¬μš©νŽΈμ˜μ„±μ„ μ€€λ‹€.

 

μΊ‘μŠν™”: 정보 은닉

μ •λ³΄μ€λ‹‰ν•˜λ©΄ μƒκ°λ‚˜λŠ” μ ‘κ·Όμ œμ–΄μž -> private, pretected, public

 

μ ‘κ·Ό μ œμ–΄μž

  • 상속을 받지 μ•Šμ•˜λ‹€λ©΄ 객체 λ©€λ²„λŠ” 객체λ₯Ό μƒμ„±ν•œ ν›„ μ°Έμ‘° λ³€μˆ˜λ₯Ό 톡해 μ ‘κ·Όν•  것
  • 정적 λ©€λ²„λŠ” 클래슀λͺ….정적멀버 ν˜•μ‹μœΌλ‘œλ§Œ μ ‘κ·Όν•˜λŠ” 것을 ꢌμž₯.

μ°Έμ‘° λ³€μˆ˜μ˜ 볡사

κΈ°λ³Έ μžλ£Œν˜• λ³€μˆ˜ λ³΅μ‚¬μ‹œ μ—λŠ” "Call by Value"에 μ˜ν•΄ λ³΅μ‚¬λ˜μ–΄ 두 개의 λ³€μˆ˜κ°€ μ„œλ‘œμ—κ²Œ 영ν–₯을 μ „ν˜€ 주지 μ•ŠλŠ”λ‹€.

 

μ°Έμ‘° μžλ£Œν˜• λ³€μˆ˜λŠ” 값을 μ£Όμ†Œ, 즉 ν¬μΈν„°λ‘œ νŒλ‹¨ν•œλ‹€.

κ²°κ΅­, 두 μžλ£Œν˜• λͺ¨λ‘ λ³΅μ‚¬μ‹œμ— μžμ‹ μ΄ 가지고 μžˆλŠ” 값을 κ·ΈλŒ€λ‘œ λ³΅μ‚¬ν•΄μ„œ λ„˜κ²¨μ€€λ‹€. 그게 값이냐 μ£Όμ†Œκ°’μ΄λƒμ˜ 차이일 뿐이닀.