# 객체지ν–₯의 사싀과 μ˜€ν•΄ - 2-1. μƒνƒœμ™€ 행동, μ‹λ³„μžμ— κ΄€ν•˜μ—¬
Study Repository

객체지ν–₯의 사싀과 μ˜€ν•΄ - 2-1. μƒνƒœμ™€ 행동, μ‹λ³„μžμ— κ΄€ν•˜μ—¬

by rlaehddnd0422

필립 켈만의 물체 인지 μ‹€ν—˜

μ‹€ν—˜μ„ ν† λŒ€λ‘œ 인간은 μ„ μ²œμ μœΌλ‘œ νƒ€κ³ λ‚œ 인지λŠ₯λ ₯을 μ΄μš©ν•΄ 세상에 μ‘΄μž¬ν•˜λŠ” λ‹€μ–‘ν•œ 객체λ₯Ό μ‹λ³„ν•˜κ³  λΆ„λ₯˜ν•¨μœΌλ‘œμ¨ 세상을 μ΄ν•΄ν•œλ‹€λŠ” 사싀을 λ³΄μ—¬μ€λ‹ˆλ‹€. λ¬Έμ œλŠ” λ°”λ‘œ μΈκ°„μ˜ 인지 λŠ₯λ ₯은 물리적인 ν•œκ³„λ₯Ό λ„˜μ–΄ 좔상적인 μ‚¬λ¬ΌκΉŒμ§€λ„ 객체둜 인식할 수 있기 λ•Œλ¬Έμ— 물리적인 κ°œλ…μ„ λ„˜μ–΄μ„œ 좔상적인 κ°œλ…κΉŒμ§€ 객체둜 인식할 만큼 μ†Œν”„νŠΈμ›¨μ–΄μ˜ 세계 μ—­μ‹œ λ‹€μ–‘ν•œ 객체듀이 λͺ¨μ—¬ 이루어져 μžˆλ‹€κ³  μƒκ°ν•˜κΈ° μ‰½λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹¬.

ν•˜μ§€λ§Œ μ†Œν”„νŠΈμ›¨μ–΄ 세계와 ν˜„μ‹€ μ„Έκ³„μ˜ μœ μ‚¬μ„±μ€ λ”± μ΄μ •λ„κΉŒμ§€μΌ 뿐, 객체지ν–₯ νŒ¨λŸ¬λ‹€μž„μ˜ λͺ©μ μ€ 'λͺ¨λ°©'이 μ•„λ‹Œ μƒˆλ‘œμš΄ 세계λ₯Ό 'μ°½μ‘°'ν•˜λŠ” 것에 가깝닀고 μ„€λͺ…ν•©λ‹ˆλ‹€.

ν˜„μ‹€μ„Έκ³„μ˜ 'κ°€λ‘œλ“±'으둜 λΉ„μœ ν•΄λ³΄μžλ©΄, ν˜„μ‹€μ„Έκ³„μ—μ„œλŠ” κ°€λ‘œλ“±μ€ 슀슀둜 λΆˆμ„ 밝힐 수 μ—†κ³ , λ‹€λ₯Έ μ‚¬λžŒ 객체에 μ˜ν•΄ 뢈이 λ°ν˜€μ§€κ²Œ λ˜μ§€λ§Œ, μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„μ—μ„œ 'κ°€λ‘œλ“±' κ°μ²΄λŠ” 슀슀둜 전원을 μΌœκ±°λ‚˜ 끌 수 μžˆλ‹€λŠ” 것이죠.

 
κ²‰μœΌλ‘œ λ³΄κΈ°μ—λŠ” μš°λ¦¬κ°€ μ•Œκ³  μžˆλŠ” ν˜„μ‹€ 세계와 μ†Œν”„νŠΈμ›¨μ–΄ 세계가 맀우 μœ μ‚¬ν•œ λ§€μ»€λ‹ˆμ¦˜μœΌλ‘œ λ™μž‘ν•˜λŠ” κ²ƒμ²˜λŸΌ 보일 수 μžˆμ§€λ§Œ, κ·Έ 속을 μžμ„Ένžˆ λ“€μ—¬λ‹€ 보면 μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„λŠ” ν˜„μ‹€ 세계와 λΉ„κ΅ν•˜μ—¬ 맀우 이질적인 λͺ¨μŠ΅μœΌλ‘œ ν‘œν˜„λ˜μ–΄ μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.
 
즉, μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„μ˜ κ°μ²΄λŠ” μ΄λŸ¬ν•œ 'μžμœ¨μ„±'을 κ°–μŠ΅λ‹ˆλ‹€.


μ΄μƒν•œ λ‚˜λΌμ˜ μ—˜λ¦¬μŠ€λ‘œ λΉ„μœ 

μ±…μ—μ„œλŠ” μ΄μƒν•œ λ‚˜λΌμ˜ μ—˜λ¦¬μŠ€ μŠ€ν† λ¦¬λ₯Ό ν† λŒ€λ‘œ μ†Œν”„νŠΈμ›¨μ–΄ 세계λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.
λ™ν™”μ˜ 쀄거리λ₯Ό μš”μ•½ν•˜μžλ©΄ λ™ν™”μ˜ 주인곡 μ—˜λ¦¬μŠ€λŠ” 음료λ₯Ό λ§ˆμ‹œλŠ” ν–‰μœ„λ₯Ό 톡해 μžμ‹ μ˜ ν‚€λ₯Ό 크게 ν•  수 있고, λΆ€μ±„μ§ˆμ„ 톡해 μžμ‹ μ˜ ν‚€λ₯Ό μž‘κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
 
μ—¬κΈ°μ„œ ν‚€λŠ” μ—˜λ¦¬μŠ€λΌλŠ” 객체의 ν”„λ‘œνΌν‹°λ‘œ, 음료λ₯Ό λ§ˆμ‹œκ³  λΆ€μ±„μ§ˆμ„ ν•˜λŠ” ν–‰μœ„λŠ” 객체의 λ©”μ†Œλ“œλ‘œ λΉ„μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
 
κ·Έλ ‡λ‹€λ©΄ μ—˜λ¦¬μŠ€μ˜ μƒνƒœλ₯Ό κ²°μ •ν•˜λŠ” 것은 음료λ₯Ό λ§ˆμ‹œλŠ” ν–‰μœ„λΌκ³  ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ™μ‹œμ— ν–‰λ™μ˜ κ²°κ³Όλ₯Ό κ²°μ •ν•˜λŠ” 것은 μƒνƒœ(음료λ₯Ό λ§ˆμ‹œκΈ° μ „μ˜ ν‚€)μ΄λ©΄μ„œ 말이죠. 

μƒνƒœλ₯Ό κ²°μ •ν•˜λŠ” 것 -> 행동 / 음료λ₯Ό λ§ˆμ‹¬μœΌλ‘œμ¨ ν‚€(μƒνƒœ)κ°€ 컀진닀. 
ν–‰λ™μ˜ κ²°κ³Όλ₯Ό κ²°μ •ν•˜λŠ” 것 -> μƒνƒœ / 행동을 ν•˜κΈ°μ „μ˜ μƒνƒœλ₯Ό λ°”νƒ•μœΌλ‘œ μƒνƒœκ°€ κ²°μ •λœλ‹€.

μΆ”κ°€λ‘œ λ§Œμ•½ μ—˜λ¦¬μŠ€μ˜ ν‚€κ°€ 130cm라고 κ°€μ •ν–ˆμ„ λ•Œ, 50cm의 문에 λ“€μ–΄κ°€λŠ” ν–‰μœ„λ₯Ό ν•˜κΈ° μœ„ν•΄μ„œλŠ” 문에 λ“€μ–΄κ°€λŠ” 'ν–‰μœ„'λ₯Ό ν•˜κΈ° μ „ 음료λ₯Ό μ„­μ·¨ν•˜λŠ” 'ν–‰μœ„'κ°€ μ„ ν–‰λ˜μ–΄μ•Ό ν•˜λŠ” κ²ƒμ²˜λŸΌ ν–‰μœ„μ˜ μˆœμ„œκ°€ 결과에 영ν–₯을 끼치게 λ©λ‹ˆλ‹€.
 

μ§€κΈˆκΉŒμ§€ μ„€λͺ…ν•œ 정보λ₯Ό ν† λŒ€λ‘œ μ—˜λ¦¬μŠ€μ˜ νŠΉμ§•μ„ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
 

  1. μ—˜λ¦¬μŠ€λŠ” 'μƒνƒœ'λ₯Ό 가지며 'μƒνƒœ'λŠ” 변경이 κ°€λŠ₯ν•˜λ‹€.
  2. μ—˜λ¦¬μŠ€μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” 것은 μ—˜λ¦¬μŠ€μ˜ ν–‰μœ„
    1. ν–‰μœ„μ˜ κ²°κ³ΌλŠ” μƒνƒœμ— μ˜μ‘΄μ μž…λ‹ˆλ‹€.
  3. ν–‰μœ„μ˜ μˆœμ„œλŠ” 결과에 영ν–₯을 λΌμΉœλ‹€.
  4. μ—˜λ¦¬μŠ€μ˜ μƒνƒœκ°€ λ³€κ²½λ˜λ”λΌλ„ μ—˜λ¦¬μŠ€λŠ” μœ μΌν•˜κ²Œ 식별 κ°€λŠ₯ν•œ μ‘΄μž¬μ΄λ‹€.
    1. μƒνƒœκ°€ λ³€κ²½λœλ‹€ ν•˜λ”λΌλ„ ν•΄λ‹Ή 객체가 λ‹€λ₯Έ 객체둜 λ³€κ²½λ˜λŠ” 것이 μ•„λ‹ˆλΌλŠ” 의미둜 μ΄ν•΄ν–ˆμŠ΅λ‹ˆλ‹€.

 
μ΄λ ‡κ²Œ μ΄μƒν•œ λ‚˜λΌμ˜ μ—˜λ¦¬μŠ€μ— λΉ„μœ ν•œ μ΄μœ λŠ” μ΄μƒν•œ λ‚˜λΌμ˜ μ—˜λ¦¬μŠ€λŠ” ν˜„μ‹€μ„Έκ³„κ°€ μ•„λ‹Œ μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„μ˜ 객체와 μ€‘μš”ν•œ λͺ‡ κ°€μ§€μ˜ 곡톡점을 κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
 
이 μ±…μ—μ„œ μ •μ˜ν•˜λŠ” κ°μ²΄λŠ” μ΄λŸ¬ν•©λ‹ˆλ‹€.
 

κ°μ²΄λŠ” 식별 κ°€λŠ₯ν•œ κ°œμ²΄λ‘œμ„œ, ꡬ별 κ°€λŠ₯ν•œ μ‹λ³„μž, νŠΉμ§•μ μΈ 행동, λ³€κ²½ κ°€λŠ₯ν•œ μƒνƒœλ§Œ μžˆλ‹€λ©΄ 좔상적인 κ°œλ…μ΄ 될 μˆ˜λ„ 있고, μ‹€μ§ˆμ μΈ 사물이 될 μˆ˜λ„ μžˆλ‹€. κ°μ²΄λŠ” μ €μž₯된 μƒνƒœμ™€ μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό 톡해 κ΅¬ν˜„λœλ‹€.

 
μš”μ•½ν•˜λ©΄ μƒνƒœ, 행동, μ‹λ³„μžλ₯Ό 가진닀면 객체가 될 수 μžˆλ‹€λŠ” 것인데, μ§€κΈˆλΆ€ν„° μ„Έ κ°€μ§€μ˜ κ°œλ…λ“€μ„ μ•Œμ•„λ΄…μ‹œλ‹€.


μƒνƒœ

μš°λ¦¬κ°€ λ‹Ήμž₯ 여행을 μœ„ν•΄ λΉ„ν–‰κΈ°λ₯Ό 이용 ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒμš”?

μ—¬κΆŒμ„ λ°œκΈ‰λ°›λŠ”λ‹€. β–ΆοΈŽ ν•­κ³΅κΆŒμ„ μ˜ˆμ•½ν•œλ‹€. β–ΆοΈŽ 곡항에 κ°„λ‹€. β–ΆοΈŽ 비행기에 νƒ‘μŠΉν•œλ‹€.

 
더 λ³΅μž‘ν•œ μ ˆμ°¨κ°€ μžˆκ² μ§€λ§Œ, μš”μ•…ν•˜λ©΄ 이런 μ ˆμ°¨λ“€μ„ 거쳐야 ν•˜κ² μ£ . 이와 같은 ν•˜λ‚˜ν•˜λ‚˜μ˜ μ ˆμ°¨λ“€μ„ ν–‰μœ„λ‘œ 보면 이 ν–‰μœ„λ“€μ€ ν–‰μœ„κ°„ μœ κΈ°κ΄€κ³„λ₯Ό 가지기 떄문에 ν–‰μœ„μ˜ μˆœμ„œκ°€ 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. 비행기에 νƒ‘μŠΉν•˜κ³  ν•­κ³΅κΆŒμ„ μ˜ˆμ•½ν•  μˆ˜λŠ” μ—†λŠ” κ²ƒμ²˜λŸΌ λ§μž…λ‹ˆλ‹€.
 
객체 λ˜ν•œ ν–‰μœ„μ— 따라 μƒνƒœ(λΉ„ν–‰κΈ° νƒ‘μŠΉ μ—¬λΆ€)κ°€ κ²°μ •λ˜κ³ , 이 μƒνƒœλŠ” 유기적인 행동듀에 μ˜ν•΄ 결정될 수 μžˆμŠ΅λ‹ˆλ‹€.
 
이 λ•Œ λ§Œμ•½ μƒνƒœλ₯Ό μ΄μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, ν–‰λ™μ˜ κ²°κ³Όλ₯Ό νŒλ‹¨ν•˜λŠ” 방식이 λ³΅μž‘ν•˜κ³  λ²ˆκ±°λ‘œμ›€κ³Ό λ™μ‹œμ— μ΄ν•΄ν•˜κΈ° μ–΄λ ΅κ²Œ λ©λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κ³ μž ν–‰λ™μ˜ κ³Όμ •κ³Ό κ²°κ³Όλ₯Ό λ‹¨μˆœν•˜κ²Œ κΈ°μˆ ν•˜κΈ° μœ„ν•΄μ„œ μƒνƒœλΌλŠ” κ°œλ…μ„ κ³ μ•ˆν•˜μ—¬ λ„μž…ν•œ κ²ƒμž…λ‹ˆλ‹€.
 
μƒνƒœλ₯Ό μ΄μš©ν•˜λ©΄ 과거에 μ–΄λ–€ 행동을 ν–ˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄λ”라도 λΉ„ν–‰κΈ° νƒ‘μŠΉ μ—¬λΆ€λ₯Ό μ•Œ 수 μžˆλŠ” 것과 같이 유기적인 κ³Όμ •λ“€μ˜ λ³΅μž‘μ„±μ„ μ΄ν•΄ν•˜μ§€ μ•Šκ³ λ„ μ˜€λ‘œμ§€ 'μƒνƒœ'λ₯Ό ν†΅ν•΄μ„œλ„ ν–‰λ™μ˜ κ²°κ³Όλ₯Ό μ˜ˆμΈ‘ν•  수 μžˆλ‹€λŠ” 큰 μž₯점을 κ°–κ²Œ λ˜λŠ” 것이죠.


μƒνƒœμ™€ ν”„λ‘œνΌν‹°

κ°μ²΄λŠ” μƒνƒœλ‘œ ν”„λ‘œνΌν‹°λ₯Ό κ°€μ§‘λ‹ˆλ‹€. ν”„λ‘œνΌν‹°λŠ” μƒνƒœλ₯Ό κ΅¬μ„±ν•˜λŠ” μš”μ†Œλ‘œ, ν”„λ‘œνΌν‹° μžμ²΄κ°€ 변경될 여지가 μ—†μœΌλ‹ˆ '정적'인 μƒνƒœμ΄λ©°, ν”„λ‘œνΌν‹°μ˜ 값은 λ³€κ²½μ˜ 여지가 μžˆμœΌλ‹ˆ '동적'인 μƒνƒœλ‘œ ꡬ뢄할 수 μžˆκ² μŠ΅λ‹ˆλ‹€.

public class Alice {

    /**
     * height, position : ν”„λ‘œνΌν‹°,
     * (height = 130, position = 0)이라면 130, 0은 ν”„λ‘œνΌν‹° κ°’
     */
    private final Integer height;
    private final Integer position;

    public Alice(Integer height, Integer position) {
        this.height = height;
        this.position = position;
    }
}

 
이 λ•Œ λ‹¨μˆœν•œ 값은 κ·Έ 자체둜 독립적인 의미λ₯Ό 가지기보닀, νŠΉμ„±μ„ ν‘œν˜„ν•˜λŠ”λ° μ‚¬μš©λ˜κΈ° 떄문에 일반적으둜 객체둜 μΉ˜λΆ€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
λ²ˆμ™Έ) μ›μ‹œ 값을 포μž₯ν•œ "κ°’ 객체"둜 닀루기도 ν•œλ‹€.!
 
λ”°λΌμ„œ 일반적으둜 객체λ₯Ό κ΅¬μ„±ν•˜λŠ” λ‹¨μˆœ 값인 속성 뿐만 μ•„λ‹ˆλΌ κ°’ 객체 λ˜ν•œ ν”„λ‘œνΌν‹°κ°€ 될 수 μžˆλŠ”λ°, 이λ₯Ό 링크라고 ν•©λ‹ˆλ‹€. 
객체와 객체 μ‚¬μ΄μ—μ„œ 링크가 μ‘΄μž¬ν•΄μ•Όμ§€λ§Œ λ©”μ‹œμ§€λ₯Ό μ£Όκ³  받을 수 μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆμ‹œλ₯Ό ν•œλ²ˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

  • height, position : 속성 ν”„λ‘œνΌν‹°λ‘œ 객체의 νŠΉμ„±μ„ λ‚˜νƒ€λƒ„.
  • Drink : 링크 ν”„λ‘œνΌν‹°λ‘œ λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•΄ μ‚¬μš©λ¨.
  • κ°μ²΄λŠ” 이 두 가지 μ’…λ₯˜μ˜ 정적 ν”„λ‘œνΌν‹°λ₯Ό κ°€μ§ˆ 수 있고, 동적은 ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ κ΅¬μ„±λ˜λ©°, 객체의 ν”„λ‘œνΌν‹°λŠ” λ‹¨μˆœν•œ κ°’κ³Ό λ‹€λ₯Έ 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” 링크둜 ꡬ뢄될 수 μžˆλ‹€.

 

κ°μ²΄λŠ” 자율적인 μ‘΄μž¬λΌλŠ” 점을 λͺ…μ‹¬ν•©μ‹œλ‹€. 객체지ν–₯의 μ„Έκ²Œμ—μ„œ κ°μ²΄λŠ” λ‹€λ₯Έ 객체의 μƒνƒœμ— μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν•  μˆ˜λ„ μ—†κ³ , μƒνƒœλ₯Ό λ³€κ²½ν•  μˆ˜λ„ μ—†λ‹€(getter, setter). 자율적인 κ°μ²΄λŠ” μžμ‹ μ˜ μƒνƒœμ— λŒ€ν•΄ μžμ‹ μ΄ μ±…μž„μ„ μ§€μ›Œμ•Όν•©λ‹ˆλ‹€.!

μ™ΈλΆ€μ˜ 객체가 μ§μ ‘μ μœΌλ‘œ 객체의 μƒνƒœλ₯Ό μ‘°μ •ν•  수 μ—†λ‹€λ©΄, κ°„μ ‘μ μœΌλ‘œ 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ μ‘°νšŒν•  수 μžˆλŠ” 방법이 ν•„μš”ν•©λ‹ˆλ‹€.
이 μ‹œμ μ— 행동(λ©”μ†Œλ“œ)κ°€ λ“±μž₯ν•˜λŠ”λ°, 행동은 λ‹€λ₯Έ 객체둜 ν•˜μ—¬κΈˆ κ°„μ ‘μ μœΌλ‘œ 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” 것을 κ°€λŠ₯ν•˜κ²Œ ν•΄μ€λ‹ˆλ‹€.

이 간접적인 방법을 μ‚¬μš©ν•˜λŠ” 것을 μ œμ™Έν•˜λ©΄, 객체지ν–₯의 기본적인 사상은 μƒνƒœμ™€ μƒνƒœλ₯Ό μ‘°μ •ν•˜κΈ° μœ„ν•œ 행동을 ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ λ¬ΆλŠ”λ‹€λŠ” 점을 λ°˜λ“œμ‹œ λͺ…μ‹¬ν•©μ‹œλ‹€.

행동(λ©”μ†Œλ“œ)

μƒνƒœμ™€ ν–‰λ™μ˜ μ—°κ΄€μ„±

  • μ±…μ—μ„œ 자주 μ–ΈκΈ‰λ˜λŠ” 만큼 μ€‘μš”ν•œ λ‚΄μš©μ΄λΌκ³  μƒκ°λ˜κΈ°μ— λ‹€μ‹œ ν•œ 번 μ–ΈκΈ‰ν•˜μžλ©΄, 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” 것은 Only 객체의 자발적인 행동 λΏμž…λ‹ˆλ‹€.
  • 이처럼 객체의 행동에 μ˜ν•΄ 객체의 μƒνƒœκ°€ λ³€κ²½λ˜λŠ” 것을 λΆ€μˆ˜ 효과(Side Effect)라 ν•©λ‹ˆλ‹€.
λ©”μ†Œλ“œμ™€ ν”„λ‘œνΌν‹°μ˜ 연관관계
  • 객체의 행동은 μƒνƒœμ˜ 영ν–₯을 λ°›κ³ , μƒνƒœλ₯Ό λ³€κ²½μ‹œν‚΅λ‹ˆλ‹€.
    • μ—˜λ¦¬μŠ€λ₯Ό μ˜ˆμ‹œλ‘œ λ“€λ©΄ μ—˜λ¦¬μŠ€μ˜ μƒνƒœ(ν‚€)κ°€ 50cmμ΄ν•˜μΈ κ²½μš°μ—λ§Œ "문을 λ“€μ–΄κ°€λŠ” ν–‰μœ„"λ₯Ό μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” μ μ—μ„œ μƒνƒœμ˜ 영ν–₯을 λ°›κ²Œ λœλ‹€λŠ” 것이고, ν–‰μœ„λ₯Ό 톡해 μƒνƒœλ₯Ό λ³€κ²½ν•œλ‹€λŠ” 것은 "음료λ₯Ό μ„­μ·¨ν•˜λŠ” ν–‰μœ„"λ₯Ό 톡해 μƒνƒœ(ν‚€)λ₯Ό λ³€κ²½μ‹œν‚¨λ‹€λŠ” λΉ„μœ λ‘œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€.
μƒνƒœλ₯Ό μ΄μš©ν•œλ‹€λ©΄ 객체의 λ³΅μž‘ν•œ 행동도 μ‰½κ²Œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€.

 


ν˜‘λ ₯κ³Ό ν–‰λ™μ˜ μ—°κ΄€μ„±

κ°μ²΄λŠ” λ‹€λ₯Έ 객체와 μ˜€λ‘œμ§€ λ©”μ‹œμ§€λ₯Ό ν†΅ν•΄μ„œλ§Œ μ˜μ‚¬μ†Œν†΅ν•  수 μžˆλ‹€λŠ” 것을 λ‹€μ‹œ ν•œ 번 κΈ°μ–΅ν•©μ‹œλ‹€.

 
객체의 μƒνƒœλ₯Ό 객체 μžμ‹ μ˜ 행동을 톡해 λ³€κ²½ν•œλ‹€λŠ” μ μ—μ„œ 객체λ₯Ό λ‹€λ₯Έ μ‚¬λžŒμ˜ 도움을 받지 μ•ŠλŠ” κ³ λ…ν•œ 섬과 같은 쑴재둜 κΈ°μ–΅ν•  수 μžˆλŠ”λ°, κ²°μ½” 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. κ°μ²΄λŠ” μžμ‹ μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” λΆ€μˆ˜νš¨κ³Ό 뿐만 μ•„λ‹ˆλΌ, λ‹€λ₯Έ 객체와 ν˜‘λ ₯ν•˜κΈ° μœ„ν•΄ λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•˜μ—¬ μš”μ²­ν•˜λŠ” λ°©μ‹κΉŒμ§€ 행동을 톡해 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ±…μ—μ„œλŠ” 행동을 μ΄λ ‡κ²Œ μ •μ˜ν•©λ‹ˆλ‹€.
 

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

 
객체와 객체가 λ©”μ‹œμ§€λ₯Ό 톡해 ν˜‘λ ₯ν•˜λŠ” μ˜ˆμ‹œλ₯Ό 고객과 μ£Όλ¬Έ 객체λ₯Ό 톡해 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

고객과 주문 객체
public class Main {

    public static void main(String[] args) {
        Customer customer = new Customer("Alice");
        String orderedMenu = customer.makeOrder("salad", 1);

        Order order = Order.createOrder(orderedMenu);
        customer.receiveFeedback(order.sendFeedback());
    }
}

 
1.고객 κ°μ²΄λŠ” μ£Όλ¬Έ κ°μ²΄μ—κ²Œ λ©”μ‹œμ§€λ₯Ό 톡해 μ£Όλ¬Έ 정보λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.

customer.makeOrder() 을 톡해 orderedMenuλΌλŠ” λ©”μ‹œμ§€ 생성 for μš”μ²­)

 

2. μ£Όλ¬Έ κ°μ²΄λŠ” λ©”μ‹œμ§€λ₯Ό 전달 λ°›κ³  μžμ‹ μ˜ μƒνƒœλ₯Ό 슀슀둜 λ³€κ²½ν•©λ‹ˆλ‹€.

(Order.createOrder(orderedMenu))

 

3. μ£Όλ¬Έ κ°μ²΄λŠ” μžμ‹ μ˜ λ³€κ²½λœ μƒνƒœλ₯Ό 톡해 고객 κ°μ²΄μ—κ²Œ λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•¨μœΌλ‘œμ¨ 주문이 μ™„λ£Œλ˜μ—ˆμŒμ„ μ•Œλ¦½λ‹ˆλ‹€.

customer.receiveFeedback(order.sendFeedback());

 
* λ©”μ‹œμ§€


μƒνƒœ μΊ‘μŠν™”

ν˜„μ‹€ μ„Έκ³„μ˜ 객체와 μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„μ˜ 객체의 μ€‘μš”ν•œ 차이점이 ν•˜λ‚˜ 더 μžˆμŠ΅λ‹ˆλ‹€. μ—˜λ¦¬μŠ€κ°€ λ§ˆμ‹œλŠ” 음료λ₯Ό λ‹€μ‹œ ν•œ 번 λΉ—λŒ€μ–΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.
 
ν˜„μ‹€ μ„Έκ³„μ—μ„œ μ•¨λ¦¬μŠ€λŠ” 슀슀둜 음료λ₯Ό λ§ˆμ‹œλŠ” λŠ₯동적인 μ‘΄μž¬μ§€λ§Œ μŒλ£ŒλŠ” 슀슀둜 아무것도 ν•  수 μ—†λŠ” μˆ˜λ™μ μΈ μ‘΄μž¬μž…λ‹ˆλ‹€.
 

But, μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„μ˜ 음료 κ°μ²΄λŠ” μ–˜κΈ°κ°€ μ’€ λ‹€λ¦…λ‹ˆλ‹€. 객체지ν–₯ μ„Έκ³„μ—μ„œ λͺ¨λ“  κ°μ²΄λŠ” μžμ‹ μ˜ μƒνƒœλ₯Ό 슀슀둜 κ΄€λ¦¬ν•˜λŠ” 자율적인 쑴재라고 μ–ΈκΈ‰ν–ˆλ“―μ΄, 음료 λ˜ν•œ λ§ˆμ°¬κ°€μ§€λ‘œ 음료 객체의 양을 μ€„μ΄λŠ” 것은 음료 μžμ‹ μ΄μ–΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.
 
λ‹€μ‹œλ§ν•΄ ν˜„μ‹€μ„Έκ³„μ—μ„œ μˆ˜λ™μ μΈ 쑴재둜 λ³΄μ΄λŠ” κ°μ²΄λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„μ—μ„œλŠ” λŠ₯동적이며, 자율적인 μ‘΄μž¬λΌλŠ” 것이죠.
 
λ”°λΌμ„œ μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„μ—μ„œ μ—˜λ¦¬μŠ€λŠ” μ§μ ‘μ μœΌλ‘œ 음료의 μƒνƒœλ₯Ό λ³€κ²½ν•  수 μ—†κ³ , κ°„μ ‘μ μœΌλ‘œ μžμ‹ μ΄ 음료λ₯Ό λ§ˆμ…¨λ‹€λŠ” 음료 κ°μ²΄μ—κ²Œ λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜κ³ , μŒλ£ŒλŠ” λ©”μ‹œμ§€λ₯Ό 전달받아 슀슀둜의 양을 μ€„μ΄λŠ” λ™μž‘μ„ ν•¨μœΌλ‘œμ¨ 음료의 양을 κ°„μ ‘μ μœΌλ‘œ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. 
 
객체의 행동을 μœ λ°œν•˜λŠ” 것은 μ™ΈλΆ€λ‘œλΆ€ν„° μ „λ‹¬λœ λ©”μ‹œμ§€μ§€λ§Œ, 객체의 μƒνƒœλ₯Ό 변경할지 μ—¬λΆ€λŠ” 객체 슀슀둜 κ²°μ •ν•œλ‹€λŠ” 점은 μΊ‘μŠν™”μ™€ κΉŠμ€ 관련이 μžˆμŠ΅λ‹ˆλ‹€. 
 
μ΄λ ‡κ²Œ μƒνƒœλ₯Ό 외뢀에 λ…ΈμΆœμ‹œν‚€μ§€ μ•Šκ³  행동을 κ²½κ³„λ‘œ μΊ‘μŠν™”ν•˜λŠ” 것은 객체의 μžμœ¨μ„±μ„ λ†’μ—¬ ν˜‘λ ₯을 λ‹¨μˆœν•˜κ³  μœ μ—°ν•˜κ²Œ λ§Œλ“œλŠ” κ³Όμ •μ˜ 좜발점이라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
 


μ‹λ³„μžμ— κ΄€ν•˜μ—¬

λͺ¨λ“  κ°μ²΄λŠ” 각각을 ꡬ뢄할 수 μžˆλŠ” μ‹λ³„μžλ₯Ό κ°€μ§‘λ‹ˆλ‹€. (μ €λŠ” 이λ₯Ό 객체의 μ£Όμ†Œκ°€ μ‹λ³„μžλΌκ³  μ΄ν•΄ν–ˆμŠ΅λ‹ˆλ‹€)
λͺ¨λ“  객체가 μ‹λ³„μžλ₯Ό κ°€μ§„λ‹€λŠ” 것은 λ°˜λŒ€λ‘œ 객체가 μ•„λ‹Œ λ‹¨μˆœν•œ 값은 μ‹λ³„μžλ₯Ό 가지지 μ•ŠλŠ”λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
 
이처럼 κ°’κ³Ό 객체의 차이점을 λͺ…ν™•ν•˜κ²Œ κ΅¬λΆ„ν•˜κ³  λͺ…μ‹œμ μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 것이 μ€‘μš”ν•œλ°, κ°’κ³Ό 객체가 μ–΄λ–»κ²Œ λ‹€λ₯Έμ§€ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.
 

κ°’ (Value)

  • 값은 숫자, λ¬Έμžμ—΄, λ‚ μ§œ, μ‹œκ°„, κΈˆμ•‘ λ“±κ³Ό 같이 λ³€ν•˜μ§€ μ•ŠλŠ” 양을 λͺ¨λΈλ§ν•©λ‹ˆλ‹€.
  • ν”νžˆ κ°’μ˜ μƒνƒœλŠ” λ³€ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λΆˆλ³€ μƒνƒœλ₯Ό 가진닀고 λ§ν•˜λŠ”λ°, κ°’μ˜ κ²½μš°μ—λŠ” 두 μΈμŠ€ν„΄μŠ€μ˜ μƒνƒœκ°€ κ°™λ‹€λ©΄ 두 μΈμŠ€ν„΄μŠ€λ₯Ό 같은 κ²ƒμœΌλ‘œ νŒλ‹¨ν•œλ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€. 
  • 값이 같은지 μ—¬λΆ€λŠ” κ°’μ˜ μƒνƒœκ°€ λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” μ μ—μ„œ μƒνƒœκ°€ 같은 μ§€μ˜ μ—¬λΆ€λ₯Ό μ΄μš©ν•΄ νŒλ‹¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 동등성(equality) : μƒνƒœλ₯Ό μ΄μš©ν•΄ 두 값이 같은지 νŒλ‹¨ν•  수 μžˆλ‹€. eg) == 으둜 비ꡐ 

 

객체 (Obejct)

  • μ‹λ³„μžλ₯Ό κ°€μ§€λŠ” 쑴재둜, μ‹œκ°„μ— 따라 λ³€κ²½λ˜λŠ” μƒνƒœλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • 행동을 톡해 μƒνƒœλ₯Ό λ³€κ²½ν•  수 있기 λ•Œλ¬Έμ— 가변적인 쑴재라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ˜ν•œ μ‹λ³„μžλ₯Ό 가지기 λ•Œλ¬Έμ— 두 객체의 μƒνƒœκ°€ κ°™λ‹€κ³  ν•΄μ„œ 두 객체λ₯Ό κ°™λ‹€κ³  νŒλ‹¨ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • μ˜€λ‘œμ§€ μ‹λ³„μžλ₯Ό 톡해 두 객체가 같은지 νŒλ‹¨ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.
  • 동일성(identical) : μ‹λ³„μž 기반으둜 객체가 같은지 νŒλ‹¨ κ°€λŠ₯. eg) equals(), hashCode() method override

(정리해도 ν—·κ°ˆλ¦¬λŠ” 뢀뢄듀이 μžˆλŠ”λ°, κ·Έ μ΄μœ λŠ” μ•„λ§ˆλ„ 값도 ν΄λž˜μŠ€λ‘œλΆ€ν„°, 객체도 ν΄λž˜μŠ€λ‘œλΆ€ν„° μ‚¬μš©ν•˜λŠ” 탓인 λ“― ν•©λ‹ˆλ‹€.)
예λ₯Όλ“€λ©΄ μˆ«μžλΌλŠ” 값도 IntergerλΌλŠ” 클래슀둜 μ •μ˜ν•˜κ³ , 객체도 예λ₯Όλ“€λ©΄ μ‚¬λžŒμ€ Personμ΄λΌλŠ” 클래슀둜 μ •μ˜ν•  수 밖에 μ—†λŠ”..
 
이런 μ˜€ν•΄μ˜ μ†Œμ§€λ₯Ό 쀄이기 μœ„ν•΄ μ°Έμ‘° 객체, μ—”ν‹°ν‹°λŠ” μ‹λ³„μžλ₯Ό μ§€λ‹Œ 객체둜, κ°’ κ°μ²΄λŠ” μ‹λ³„μžλ₯Ό 가지지 μ•ŠλŠ” 값을 κ°€λ¦¬ν‚€λŠ” μš©μ–΄λ‘œ μ‚¬μš©ν•˜λŠ”λ°, 이 μ±…μ—μ„œλŠ” λ³„λ„μ˜ 언급이 μ—†λŠ” ν•œ κ°μ²΄λΌλŠ” μš©μ–΄λŠ” μ‹λ³„μžλ₯Ό κ°€μ§€λŠ” μ°Έμ‘° κ°μ²΄λ‚˜ μ—”ν‹°ν‹°λ₯Ό 가리킨닀고 λͺ…μ‹œν•˜μ˜€μŠ΅λ‹ˆλ‹€.
 
이제 μ΄μƒν•œ λ‚˜λΌμ˜ μ—˜λ¦¬μŠ€ μ΄μ•ΌκΈ°λŠ” 놓아주고, μ•„κΉŒ λ§ν•œ μ—˜λ¦¬μŠ€μ˜ νŠΉμ§•μ—μ„œ μ—˜λ¦¬μŠ€λ₯Ό 객체둜 λ°”κΎΈμ–΄ 객체의 νŠΉμ„±μ„ μ΄ν•΄ν•˜λ„λ‘ ν•©μ‹œλ‹€.

  1. κ°μ²΄λŠ” 'μƒνƒœ'λ₯Ό 가지며 'μƒνƒœ'λŠ” 변경이 κ°€λŠ₯ν•˜λ‹€.
  2. 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” 것은 객체의 ν–‰μœ„
  3. ν–‰μœ„μ˜ μˆœμ„œλŠ” 결과에 영ν–₯을 λΌμΉœλ‹€.
  4. 객체의 μƒνƒœκ°€ λ³€κ²½λ˜λ”λΌλ„ κ°μ²΄λŠ” μœ μΌν•˜κ²Œ 식별 κ°€λŠ₯ν•œ μ‘΄μž¬μ΄λ‹€.

 
μ§€κΈˆκΉŒμ§€ 객체의 μ€‘μš”ν•œ νŠΉμ„±μΈ μƒνƒœ, 행동, μ‹λ³„μžμ— κ΄€ν•˜μ—¬ μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. 아직 2μž₯의 λ‚΄μš©μ΄ λλ‚˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ 글이 λ„ˆλ¬΄ κΈΈμ–΄μ Έ μ΄μ–΄μ§€λŠ” 2μž₯ λ‚΄μš©μ€ λ‹€μŒ κΈ€λ‘œ λΆ„λ¦¬ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. μΆ”κ°€λ‘œ 책에 μ€‘μš”ν•¨μ„ κ°•μ‘°ν•˜κΈ° μœ„ν•΄ λ°˜λ³΅λ˜λŠ” λ‚΄μš©λ“€μ΄ λ§Žμ€λ°, λ‚΄μš© 정리에도 λ˜‘κ°™μ΄ μ μš©λœλ‹€λŠ” 점 μ°Έκ³ ν•΄μ£Όμ„Έμš”.


 
<참고 자료>

객체지ν–₯의 사싀과 μ˜€ν•΄

μœ„ν‚€λΆμŠ€ IT Leaders μ‹œλ¦¬μ¦ˆ 23ꢌ. 객체지ν–₯μ΄λž€ 무엇인가? 이 책은 이 μ§ˆλ¬Έμ— λŒ€ν•œ 닡을 μ°ΎκΈ° μœ„ν•΄ λ…Έλ ₯ν•˜κ³  μžˆλŠ” λͺ¨λ“  개발자λ₯Ό μœ„ν•œ 책이닀.

www.aladin.co.kr

λΈ”λ‘œκ·Έμ˜ 정보

Study Repository

rlaehddnd0422

ν™œλ™ν•˜κΈ°