πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[3νŒ€/κΉ€κ·œλ¦¬] 8μ°¨μ‹œ 파이썬 μŠ€ν„°λ”” - 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

kyuree 2023. 5. 18. 15:25

8μ°¨μ‹œ_과제_객체지ν–₯ν”„λ‘œκ·Έλž˜λ°.pdf
6.84MB
8α„Žα…‘α„‰α…΅_α„€α…’α†¨α„Žα…¦α„Œα…΅α„’α…£α†Όα„‘α…³α„…α…©α„€α…³α„…α…’α„†α…΅α†Ό_α„€α…ͺα„Œα…¦α„ƒα…‘α†Έα„‹α…‘α†«.pdf
0.18MB
8μ°¨μ‹œ_κ°•μ˜μ•ˆ_객체지ν–₯ν”„λ‘œκ·Έλž˜λ°.pdf
11.47MB

#1. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 이해

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ λ°°μš°λŠ” 이유


객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ κ°œλ…μ€ μ™œ μ‚¬μš©ν• κΉŒ?

  • ν•¨μˆ˜μ²˜λŸΌ μ—¬λŸ¬ μ‚¬λžŒκ³Ό ν”„λ‘œκ·Έλž¨ κ°œλ°œν•  λ•Œ
  • λ‹€λ₯Έ μ‚¬λžŒμ΄ μž‘μ„±ν•œ μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λ©΄ 쒋을지 κ³ λ―Όν•  λ•Œ
  • 남이 λ§Œλ“  μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜κ³  싢을 λ•Œ λŒ€ν‘œμ μΈ 방법!

κ°œλ…

  • μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” ν•˜λ‚˜μ˜ 단일 ν”„λ‘œκ·Έλž¨μ„ 객체라고 ν•˜λŠ” μ½”λ“œλ‘œ λ§Œλ“€μ–΄ λ‹€λ₯Έ μ‚¬λžŒμ΄ μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ 함

객체와 클래슀


  • 객체속성(attribute)κ³Ό 행동(action)으둜 ꡬ성
    • 속성 → λ³€μˆ˜λ‘œ μ •μ˜
    • 행동 → ν•¨μˆ˜λ‘œ μ •μ˜

μ˜ˆμ‹œ) 인곡지λŠ₯ 좕ꡬ ν”„λ‘œκ·Έλž¨

  • κ²Œμž„ ꡬ성 λ‹¨μœ„
    • μ‹¬νŒ, μ„ μˆ˜, νŒ€ → 각각이 객체가 됨

 

  • κ°μ²΄λŠ” ν•œ ν”„λ‘œκ·Έλž¨μ—μ„œ μ—¬λŸ¬ 개 μ‚¬μš© κ°€λŠ₯
  • λ”°λΌμ„œ 객체듀을 μœ„ν•œ 섀계도 μ œμž‘ ν•„μš” ⇒ 클래슀(class)
    • 각 객체의 개수?
    • μ–΄λ–€ 객체가 ν•„μš”ν• κΉŒ?
  • μ‹€μƒν™œμ— μ‘΄μž¬ν•˜λŠ” μ‹€μ œμ  물건 및 κ°œλ…μ„ 의미
  • 클래슀
    • [객체]좕ꡬ μ„ μˆ˜ → μ„ μˆ˜ 이름 & ν¬μ§€μ…˜ & μ†Œμ†νŒ€
    • 이런 클래슀λ₯Ό λ°”νƒ•μœΌλ‘œ μ‹€μ œ 값이 ν• λ‹Ήλœλ‹€λ©΄ ⇒ μΈμŠ€ν„΄μŠ€(instance)
  • 객체가 κ°€μ Έμ•Ό ν•  κΈ°λ³Έ 정보 담은 μ½”λ“œ, μΌμ’…μ˜ 섀계도 μ½”λ“œ
  • μΈμŠ€ν„΄μŠ€

 

  • μ˜ˆμ‹œ) λΆ•μ–΄λΉ΅ν‹€ & λΆ•μ–΄λΉ΅
    • λΆ•μ–΄λΉ΅ν‹€λ‘œ μ—¬λŸ¬ 개의 λΆ•μ–΄λΉ΅ λ§Œλ“€ 수 μžˆλ‹€
    • [클래슀] λΆ•μ–΄λΉ΅ν‹€ , [μΈμŠ€ν„΄μŠ€] λΆ•μ–΄λΉ΅
    • 잘 λ§Œλ“  λΆ•μ–΄λΉ΅ν‹€ 있으면 λ‹€μ–‘ν•œ λΆ•μ–΄λΉ΅ λ§Œλ“€ μˆ˜λ„ μžˆλ‹€!
    • ⇒ 잘 λ§Œλ“  클래슀 μ½”λ“œκ°€ μžˆλ‹€λ©΄, μ΄κ²ƒμœΌλ‘œ λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ μΈμŠ€ν„΄μŠ€ 생성할 수 μžˆλ‹€~

#2-1. 파이썬의 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

클래슀 κ΅¬ν˜„ν•˜κΈ°


  • 클래슀 선언을 μœ„ν•œ κΈ°λ³Έ μ½”λ“œ ν…œν”Œλ¦Ώ

  • μ„€λͺ…
    • 맨 μ•ž → 클래슀 μ˜ˆμ•…μ–΄μΈ class
    • 쀑간 → λ§Œλ“€κ³ μžν•˜λŠ” 클래슀 이름
    • λ§ˆμ§€λ§‰ → 상속받아야 ν•  λ‹€λ₯Έ 클래슀 이름
      • 상속? → κΈ°μ‘΄ 클래슀의 νŠΉμ§• κ·ΈλŒ€λ‘œ 이어받아 μ‚¬μš©ν•˜λŠ” 것
  • 클래슀 μž‘λͺ… 방법

  • μ†μ„±μ˜ μ„ μ–Έ
    • μ„ μ–Έ → 클래슀의 속성 μΆ”κ°€
    • init()
      • 속성에 λŒ€ν•œ 정보 μ„ μ–Έν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ˜ˆμ•½ ν•¨μˆ˜
      • +) 파이썬의 μ˜ˆμ•½ ν•¨μˆ˜
        • init(), str, add
        • μ•½μ†λœ ν˜•νƒœμ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ€Œ

  • ν•¨μˆ˜μ˜ μ„ μ–Έ
    • 클래슀의 λ‹€μ–‘ν•œ λ™μž‘ μ •μ˜
    • μ½”λ“œ

  • _의 μ“°μž„
    • κ°œμˆ˜μ— 닀라 μ“°μž„μ΄ 닀름
    • ‘_’ 1 개 → μ΄ν›„λ‘œ 쓰이지 μ•Šμ„ λ³€μˆ˜μ— νŠΉλ³„ν•œ 이름 λΆ€μ—¬ν•˜κ³  싢지 μ•Šμ„ λ•Œ

μΈμŠ€ν„΄μŠ€ μ‚¬μš©ν•˜κΈ°


  • μΈμŠ€ν„΄μŠ€
    • ν΄λž˜μŠ€μ—μ„œ μ‹€μ œμ μΈ 데이터가 μž…λ ₯λ˜μ–΄ μ‚¬μš©ν•  수 μžˆλŠ” ν˜•νƒœμ˜ 객체
  • ν΄λž˜μŠ€μ—μ„œ μΈμŠ€ν„΄μŠ€ 호좜 방법
    • 클래슀 이름 호좜
    • μ •μ˜ν•œ ‘init’의 λ§€κ°œλ³€μˆ˜μ— 맞좰 κ°’ μž…λ ₯
    • ν•¨μˆ˜μ˜ μ΄ˆκΉƒκ°’ 지정과 같은 κ°œλ…
    • self에 μ–΄λ– ν•œ 값도 ν• λ‹Ήν•˜μ§€ μ•ŠμŒ

  • #14
    • μΈμŠ€ν„΄μŠ€ μƒˆλ‘­κ²Œ 생선
    • jinhyun → name, position, back_mimber에 각각 Jinhyiin, MF, 10이 할당됨
  • ν•¨μˆ˜ ν˜ΈμΆœν•  λ•Œλ„ μΈμŠ€ν„΄μŠ€ 이름과 ν•¨μˆ˜λͺ… μ‚¬μš©

클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 이유


  • μžμ‹ μ˜ μ½”λ“œλ₯Ό λ‹€λ₯΄ μ‚¬λžŒμ΄ μ†μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ„€κ³„ν•˜κΈ° μœ„ν•¨
  • ν•˜λ‚˜μ˜ 객체둜 μƒμ„±ν•˜κΈ°κ°€ 더 μ’‹μŒ
  • μ½”λ“œλ₯Ό μ’€ 더 μ†μ‰½κ²Œ μ„ μ–Έ κ°€λŠ₯

  • μ£Όμ˜ν•  점
    • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 만λŠ₯주의λ₯Ό μ‘°μ‹¬ν•˜μž!
      • λͺ¨λ“  μƒˆλ‘œμš΄ λ°©λ²•μœΌλ‘œ μ‹œλ„ν•˜κΈ° 보닀 ν•„μš”λ°©λ²•μ„ μ μž¬μ μ†Œμ— μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•˜μž

#3. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•

상속


  • 무언가λ₯Ό λ‚΄λ €λ°›λŠ” 것을 의미
  • λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ •μ˜λœ 속성과 λ©”μ„œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ λ¬Όλ €λ°›μ•„ μ‚¬μš©

  • μ„€λͺ…
    • λ¨Όμ € Person 클래슀λ₯Ό 생성
      • Person ν΄λž˜μŠ€μ—λŠ” μƒμ„±μž 인수λ₯Ό λ§Œλ“€μ–΄ nameκ³Ό age에 κ΄€λ ¨λœ 정보λ₯Ό μž…λ ₯ν•  수 μžˆλ„λ‘ 함
    • Korean 클래슀λ₯Ό λ§Œλ“¦ → Person 클래슀λ₯Ό μƒμ†λ°›μŒ
      • class Korean(Person)κ³Ό 같이 μž‘μ„±ν•˜λ©΄ κ°„λ‹¨νžˆ 상속가λŠ₯.
      • pass → λ³„λ„μ˜ λ‚΄μš© 없이 클래슀만 μ‘΄μž¬ν•œλ‹€λŠ” 뜻
      • 즉, λ³„λ„μ˜ λ‚΄μš©μ΄ μ—†λŠ” Korean 클래슀 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“  것
      • Korean ν΄λž˜μŠ€λŠ” λ³„λ„μ˜ μƒμ„±μžλŠ” μ—†μ§€λ§Œ, Person ν΄λž˜μŠ€κ°€ 가진 μƒμ„±μžλ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜μ—¬ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“¦
      • Person ν΄λž˜μŠ€μ—μ„œ μƒμ„±ν•œ λ³€μˆ˜λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©κ°€λŠ₯
      • μ΄λŸ¬ν•œ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•μ„ 상속이라고 함
  • 상속을 λ„ν‘œλ‘œ ν‘œν˜„
    • μ‚¬κ°ν˜•μ΄ 클래슀
    • ν™”μ‚΄ν‘œλŠ” 각 클래슀 의 상속 관계
      • 즉, Person 클래슀λ₯Ό Employeeκ°€ 상속받고, 이 클래슀λ₯Ό λ‹€μ‹œ ν•œλ²ˆ Manager, Staff. Hourly 등이 μƒμ†λ°›λŠ” 것

λ¨Όμ € λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ Person

  • name, age, gender에 λŒ€ν•΄ λ³€μˆ˜λ₯Ό μ„ μ–Έ
  • about_ me ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ„±λœ μΈμŠ€ν„΄μŠ€κ°€ μžμ‹ μ„ μ„€λͺ…ν•  수 μžˆλ„λ‘ν•¨
  • 사싀 str() ν•¨μˆ˜μ— 듀어가도 λ˜λŠ” ν΄λž˜μŠ€μ΄μ§€λ§Œ μž„μ˜μ˜ about_me 클래슀λ₯Ό 생성

λ‹€μŒμœΌλ‘œ μƒμ†λ°›λŠ” Employee 클래슀

  • Person ν΄λž˜μŠ€κ°€ λ‹¨μˆœνžˆ μ‚¬λžŒμ— λŒ€ν•œ 정보λ₯Ό μ •μ˜ → Employee ν΄λž˜μŠ€λŠ” μ‚¬λžŒμ— λŒ€ν•œ μ •μ˜μ™€ ν•¨κ»˜ μΌν•˜λŠ” μ‹œκ°„κ³Ό 월급에 λŒ€ν•œ λ³€μˆ˜λ₯Ό μΆ”κ°€
  • 즉 init() ν•¨μˆ˜λ₯Ό μž¬μ •μ˜
    • μ΄λ•Œ λΆ€λͺ¨ 클래슀의 __init () ν•¨μˆ˜λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λ €λ©΄ λ³„λ„μ˜ init() ν•¨μˆ˜λ₯Ό λ§Œλ“€μ§€ μ•Šμ•„λ„ 됨
    • ν•˜μ§€λ§Œ κΈ°μ‘΄ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ μƒˆλ‘œμš΄ λ‚΄μš©μ„ μΆ”κ°€ν•˜κΈ° μœ„ν•΄μ„œλŠ” μžμ‹ν΄λž˜μŠ€μ— init() ν•¨μˆ˜λ₯Ό 생성할 λ•Œ super().init(λ§€κ°œλ³€μˆ˜) 라고 μž…λ ₯
      • μ—¬κΈ°μ„œ super()λŠ” λΆ€λͺ¨ 클래슀λ₯Ό 가리킴
      • ⇒ 즉, λΆ€λͺ¨ 클래슀의 init() ν•¨μˆ˜λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•œλ‹€λŠ” 뜻
    • κ·Έ μ•„λž˜μ—λŠ” μžμ‹ ν΄λž˜μŠ€μ—μ„œ ν•„μš”ν•œ μƒˆλ‘œμš΄ λ³€μˆ˜λ₯Ό μΆ”κ°€ν•˜λ©΄ 됨
    • μ΄λŸ¬ν•œ ν•¨μˆ˜μ˜ μž¬μ •μ˜λ₯Ό μ˜€λ²„λΌμ΄λ”© overriding이라고 함
    • μ˜€λ²„λΌμ΄λ”©
      • 상속 μ‹œ ν•¨μˆ˜ 이름과 ν•„μš”ν•œ λ§€κ°œλ³€μˆ˜λŠ” κ·ΈλŒ€λ‘œ μœ μ§€ → ν•¨μˆ˜μ˜ μˆ˜ν–‰ μ½”λ“œλ₯Ό λ³€κ²½ν•˜λŠ” 것
      • 같은 λ°©μ‹μœΌλ‘œ about_me() ν•¨μˆ˜κ°€ μ˜€λ²„λΌμ΄λ”©λœ 것을 확인할 수 있음
      • Personκ³Ό Employee에 λŒ€ν•œ μ„€λͺ…을 μΆ”κ°€ν•œ 것
    • μœ„ μ½”λ“œλ“€μ€ μ„€λͺ…μ˜ μš©μ΄μ„±μ„ μœ„ν•΄ ν…μŠ€νŠΈ ν˜•νƒœμ˜ μ„€λͺ…λ§Œ μΆ”κ°€ν•˜μ˜€μ§€λ§Œ μ‹€μ œλ‘œλŠ” ν”„λ‘œκ·Έλž¨μ— μ‚¬μš©ν•˜κΈ° μœ„ν•œ λ‹€μ–‘ν•œ κΈ°λŠ₯이 좔가될 수 있음
      • do_work처럼 μžμ‹ ν΄λž˜μŠ€μ—λ§Œ ν•„μš”ν•œ μƒˆλ‘œμš΄ ν•¨μˆ˜λ₯Ό 생성할 수 있음
      • μ•žμ„œ μ„€λͺ…ν–ˆλ“―이 자 식 ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€λ³΄λ‹€ 더 μƒμ„Έν•œ 일
      • λ”°λΌμ„œ μžμ‹ ν΄λž˜μŠ€κ°€ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆλ„λ‘ μ½”λ“œλ₯Ό μž‘μ„±
    • νŒŒμ΄μ¬μ—μ„œλŠ” 이외에도 λ‹€μ–‘ν•œ 상속 κΈ°λŠ₯을 지원
      • 예λ₯Ό λ“€μ–΄, 1개 μ΄μƒμ˜ 클래슀 νŠΉμ§•μ„ μƒμ†ν•˜λŠ” 닀쀑상속을 μ§€μ›ν•˜κΈ°λ„ 함

λ‹€ν˜•μ„±


같은 μ΄λ¦„μ˜ λ©”μ„œλ“œκ°€ λ‹€λ₯Έ κΈ°λŠ₯을 ν•˜λŠ” 것을 말함

  • 예λ₯Ό λ“€μ–΄, about_meλΌλŠ” ν•¨μˆ˜λ₯Ό λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ μžμ‹ ν΄λž˜μŠ€κ°€ μ„œλ‘œ λ‹€λ₯΄κ²Œ κ΅¬ν˜„ν–ˆλŠ”λ°, 이것도 μΌμ’…μ˜ λ‹€ν˜•μ„±μ΄λ‹€.

κ·Έλ ‡λ‹€λ©΄ λ‹€ν˜•μ„±μ„ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

  • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ λ‹€λ₯Έ μ‚¬λžŒμ˜ μ½”λ“œλ₯Ό μ‰½κ²Œ μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
  • 이λ₯Ό μœ„ν•΄μ„œλŠ” 내뢀적인 κ΅¬ν˜„ 과정은 잘 λͺ¨λ₯΄λ”라도 κ·Έ ν•¨μˆ˜λ‚˜ 클래슀의 역할은 λͺ…ν™•νžˆ μ•Œ ν•„μš” 있음
  • μΈν„°λ„·μ—μ„œ 데이터λ₯Ό λͺ¨μœΌλŠ” ν”„λ‘œκ·Έλž¨μ„ 크둀러 crawler라고 ν•˜λŠ”λ°.
  • μ΄λ²ˆμ—λŠ” λ‰΄μŠ€λ₯Ό λͺ¨μœΌλŠ” 크둀러λ₯Ό λ§Œλ“€μ–΄λ³΄λ©΄μ„œ μ„€λͺ…
    • λ¨Όμ € λΆ€λͺ¨ Crawler 클래슀λ₯Ό λ§Œλ“€κ³  do_crawling이라 λŠ” ν•¨μˆ˜λ₯Ό 생성
    • 그리고 Crawler 클래슀λ₯Ό μƒμ†μ‹œμΌœ NaverCrawler와 DaumCrawlerλ₯Ό λ§Œλ“¦
    • 이제 두 μžμ‹ ν΄λž˜μŠ€λŠ” λͺ¨λ‘ do_crawling ν•¨μˆ˜λ₯Ό κ°–κ²Œ 됨
    • 같은 μ΄λ¦„μ΄μ§€λ§Œ κ΅¬ν˜„ λ‚΄μš©μ€ 닀름
    • 각각 ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„λ˜λŠ” λ‚΄λΆ€ λ‘œμ§μ— 차이가 있음
      • 이λ₯Ό ν•¨μˆ˜μ˜ λ‹€ν˜•μ„±μ΄λΌκ³  함.
    • μ—¬κΈ°μ„œ Crawler ν΄λž˜μŠ€λ“€μ˜ do crawling ν•¨μˆ˜λŠ” 각각 넀이버와 λ‹€μŒμ—μ„œ λ‰΄μŠ€λ₯Ό κ°€μ Έμ˜€λŠ” μ—­ν• 
    • ν•΄λ‹Ή 클래슀의 μ‚¬μš©μžλŠ” 데이터λ₯Ό μ–΄λ–»κ²Œ κ°€μ Έμ˜€λŠ”μ§€ λͺ¨λ₯΄μ§€λ§Œ κ²°κ³ΌλŠ” 두 클래슀 λͺ¨λ‘ κ°™λ‹€λŠ” 것을 μ•Œ 수 있음

  • ν•΄λ‹Ή 클래슀의 μ‚¬μš©μž μž…μž₯μ—μ„œλŠ” ν•¨μˆ˜μ˜ μ΄λ¦„λ§Œ μ•Œλ©΄ 같은 ν˜•νƒœλ‘œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ. 클래슀 의 개발자 μž…μž₯μ—μ„œλŠ” 내뢀적인 κ΅¬ν˜„μ„ 각 ν΄λž˜μŠ€λ³„ λ‹€λ₯΄κ²Œ κ°œλ°œν•  ν•„μš”κ°€ 있음
  • 이λ₯Ό λ‹€ν˜•μ„± 이라고 ν•˜λŠ”λ°, λ‹€ν˜•μ„±μ„ μ‚¬μš©ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ μ‚¬μš©μžκ°€ μ’€ 더 μ‰½κ²Œ 클래슀λ₯Ό μ‚¬μš© ν•  수 있음.
  • μ•„λž˜ [μ½”λ“œ 10-6]은 μ˜μ‚¬=pseudo-code둜 μ‹€μ œ μž‘λ™λ˜μ§€λŠ” μ•Šκ³  단지 λ‹€ν˜•μ„±μ„ μ„€λͺ… ν•˜κΈ° μœ„ν•΄ λ§Œλ“  μ½”λ“œ
  • μ½”λ“œ

→ λΆ€λͺ¨ ν΄λž˜μŠ€λŠ” Animal

  • Catκ³Ό DogλŠ” Animal 클래슀λ₯Ό μƒμ†λ°›μŒ
  • 핡심 ν•¨μˆ˜λŠ” talk → 각각 두 동물 클래슀의 역할이 λ‹€λ₯Έ 것을 확인
  • Animal ν΄λž˜μŠ€λŠ” 아직 μ„€λͺ…ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ NotlmplementedErrorλΌλŠ” 클래슀λ₯Ό 호좜
    • 이 ν΄λž˜μŠ€λŠ” μžμ‹ ν΄λž˜μŠ€μ—λ§Œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ 함
    • λ”°λΌμ„œ 두 ν΄λž˜μŠ€κ°€ λ‚΄λΆ€ λ‘œμ§μ—μ„œ 같은 μ΄λ¦„μ˜ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λ„λ‘ 함
    • μ •μ˜λœ λͺ¨λ“  ν΄λž˜μŠ€λŠ” 15γ€œ 17ν–‰κ³Ό 같이 μ‚¬μš©κ°€

κ°€μ‹œμ„±


객체의 정보λ₯Ό λ³Ό 수 μžˆλŠ” λ ˆλ²¨μ„ μ‘°μ ˆν•˜μ—¬ 객체의 정보 접근을 μˆ¨κΈ°λŠ” 것

  • 이 νŠΉμ§•μ€ λ‹€μ–‘ν•œ μ΄λ¦„μœΌλ‘œ 뢈림
    • μ’€ 더 μ€‘μš”ν•œ 핡심 κ°œλ…μ€ μΊ‘μŠν™”encapsulation와 정보 은닉 information hiding
  • νŒŒμ΄μ¬μ—μ„œλŠ” 객체의 μž¬μ‚¬μš©μ„ μœ„ν•΄ 각 객체가 무슨 역할을 ν•˜λŠ”μ§€ μ•Œμ•„μ•Ό 함
    • .κ΅¬ν˜„μ˜ 세뢀적인 λ‚΄μš©μ„ λͺ¨λ‘ μ•Œ ν•„μš”λŠ” μ—†μŒ. 단지 μ‚¬μš©ν•˜λŠ” λ°©λ²•λ§Œ μ•Œλ©΄ 됨.
    • ⇒ 즉. 객체의 λ§€κ°œλ³€μˆ˜ μΈν„°νŽ˜μ΄μŠ€λ§Œ λͺ…ν™•νžˆ μ•Œλ©΄ μ‚¬μš©ν•  수 있음
    • μ΄λŸ¬ν•œ κ°œλ…μ„ μΊ‘μŠν™”λΌκ³  ν•˜λ©°. 객체의 μ„ΈλΆ€ λ‚΄μš©μ€ λͺ¨λ₯Έ 채 객체의 μ‚¬μš©λ²•λ§Œ μ•Œκ³  μ‚¬μš©ν•œλ‹€λŠ” 뜻
  • λ™μ‹œμ— ν•„μš”ν•œ μ •λ³΄λŠ” μˆ¨κ²¨μ•Ό 함
  • μΊ‘μŠν™”μ™€ μ •λ³΄μ€λ‹‰μœΌλ‘œ ν‘œν˜„μ€ λ‹€λ₯΄κ²Œ ν•˜μ§€λ§Œ λ‘˜ λ‹€ μ½”λ“œμ˜ λ‚΄λΆ€ κ΅¬ν˜„μ„ μž˜ν•΄μ„œ μ™ΈλΆ€μ—μ„œ μ‰½κ²Œ μ‚¬μš©ν•˜κ²Œ ν•˜κ³ , μ½”λ“œμ˜ 세뢀적인 λ‚΄μš©μ€ λͺ¨λ₯΄κ²Œ ν•œλ‹€λŠ” μΈ‘λ©΄μ—μ„œ λΉ„μŠ·ν•œ 의미둜 μ‚¬μš©λ¨
  • μΊ‘μŠν™”λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?
    • μ—¬λŸ¬ 가지가 μžˆμ§€λ§Œ 일단 클래슀λ₯Ό 섀계할 λ•Œ 클래슀 κ°„ κ°„μ„­ 및 정보 곡유λ₯Ό μ΅œμ†Œν™”ν•˜μ—¬ κ°œλ³„ ν΄λž˜μŠ€κ°€ λ‹¨λ…μœΌλ‘œλ„ 잘 λ™μž‘ν•  수 μžˆλ„λ‘ ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έ
    • 각 ν΄λž˜μŠ€κ°€ κ°•ν•˜κ²Œ μ—°κ²°λ˜μ–΄ μžˆλ‹€λ©΄ λ…λ¦½μ μœΌλ‘œ μ‚¬μš©ν•˜κΈ° 어렀움
    • λ˜ν•œ.사 용자 μž…μž₯μ—μ„œλŠ” μƒμ„Έν•œ λ‚΄μš©μ„ λͺ¨λ₯΄λ”라도 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄ν•΄ν•˜λ©΄ 클래슀λ₯Ό μ‰½κ²Œ μ‚¬μš©ν•  수 있음
    • νŒŒμ΄μ¬μ—μ„œλŠ” μ΄λŸ¬ν•œ κ°œλ…μ„ κ°€μ‹œμ„±μ΄λΌλŠ” μ΄λ¦„μœΌλ‘œ 적용 → 정보 은닉을 μ–΄λ–»κ²Œ ν•  것인가λ₯Ό μ½”λ“œ λ ˆλ²¨μ—μ„œ 쑰절
  • μ‹€μ œ 파이썬의 κ°€μ‹œμ„± μ‚¬μš© 방법에 λŒ€ν•΄ μ˜ˆμ‹œλ₯Ό λ“€μ–΄ μ„€λͺ…
  • λ¨Όμ € μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜λŠ” 상황은 λ‹€μŒκ³Ό κ°™μŒ

→ [μ½”λ“œ 10—8]μ—μ„œλŠ” Inventory 객체에 add_new_item() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒˆλ‘­κ²Œ μƒμ„±λœ Product 객체λ₯Ό λ„£μ–΄μ€Œ

  • μ—¬κΈ°μ„œ μžλ£Œν˜•μ„ λΉ„κ΅ν•˜μ—¬ ν•΄λ‹Ή 객체가 Product 객체인지 확인 ν•˜κ³ , 그렇지 μ•Šμ„ 경우 ValueErrorκ°€ λ°œμƒ
  • itemsλŠ” Product 객체가 λ“€μ–΄κ°€λŠ” 곡간 → get_number_of_items()λ₯Ό μ‚¬μš©ν•˜μ—¬ 총 객체의 개수λ₯Ό λ°˜ν™˜
  • μ—¬κΈ°μ„œ 핡심은___items λ³€μˆ˜
    • Inventoryλ₯Ό μ €μž₯ν•˜λŠ” 곡간 → add_new_item()을 톡해 Product 객체λ₯Ό 넣을 수 있음
  • ν•˜μ§€λ§Œ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ΄ add_new_item()이 μ•„λ‹ˆλΌ 직 μ ‘ ν•΄λ‹Ή 객체에 μ ‘κ·Όν•΄ μƒˆλ‘œμš΄ 값을 μΆ”κ°€ν•˜λ €κ³  ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ ν• κΉŒ?
    • #20
      • λ‹€λ₯Έ μ½”λ“œμ—μ„œλŠ” 잘 μ‹€ν–‰λ˜λ‹€κ°€ 20ν–‰μ˜ my_inventory._itemsμ—μ„œ 였λ₯˜κ°€ λ°œμƒ
      • μ™œλƒν•˜λ©΄ __κ°€ ν•¨μˆ˜ 역할을 ν•˜λŠ” μ˜ˆμ•½ 문자둜 ν΄λž˜μŠ€μ—μ„œ λ³€μˆ˜μ— 두 κ°œκ°€ λΆ™μ–΄μžˆμ–΄ μ‚¬μš©λ  클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Όν•  수 있고, μ™ΈλΆ€μ—λŠ” ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έ
      • ⇒ 즉, 클래슀 λ‚΄λΆ€μš©μœΌλ‘œλ§Œ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ λ³€μˆ˜λͺ…’ ν˜•νƒœλ‘œ λ³€μˆ˜λ₯Ό μ„ μ–Έ
      • μ΄λŸ¬ν•œ νŠΉμ§•μ„ μžλ°”μ— μ„œλŠ” private variable이라고도 함
      • 즉, κ°€μ‹œμ„±μ„ 클래슀 λ‚΄λ‘œ ν•œμ •ν•˜λ©΄μ„œ 값이 λ‹€λ₯΄κ²Œ λ“€ μ–΄κ°€λŠ”κ²ƒμ„ 막을 수 μžˆλ‹€. 이λ₯Ό 정보은닉이라고함
  • κ·Έλ ‡λ‹€λ©΄ μ΄λŸ¬ν•œ 정보λ₯Ό 클래슀 μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ?
    • λ°μ½”λ ˆμ΄ν„° decorator라고 λΆˆλ¦¬λŠ” ©propertyλ₯Ό μ‚¬μš©
    • 클래슀의 각 λ©”μ„œλ“œ 상단에 μ‚½μž… ν•˜μ—¬ ν•΄λ‹Ή λ©”μ„œλ“œμ˜ κΈ°λŠ₯을 μΆ”κ°€ν•˜λŠ” 파이썬 문법
    • [μ½”λ“œ 10-8]의 14ν–‰ 뒷뢀뢄에 [μ½”λ“œ 10-이λ₯Ό μΆ”κ°€ν•˜μ—¬ ©propertyλ₯Ό μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μ™ΈλΆ€μ—μ„œ μ‚¬μš© κ°€λŠ₯

  • λ‹€λ₯Έ μ½”λ“œλŠ” κ·ΈλŒ€λ‘œ μœ μ§€ν•˜κ³  λ§ˆμ§€λ§‰μ— itemsλΌλŠ” μ΄λ¦„μœΌλ‘œ λ©”μ„œλ“œλ₯Ό λ§Œλ“€λ©΄μ„œ ©property λ₯Ό λ©”μ„œλ“œ 상단에 μž…λ ₯
  • 그리고 μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•  λ³€μˆ˜μΈ __itemsλ₯Ό λ°˜ν™˜
  • μ΄λ ‡κ²Œ μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λ©΄ λ‹€μŒκ³Ό 같이 μ™ΈλΆ€μ—μ„œλ„ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ‚¬μš©κ°€λŠ₯

  • 이번 μ½”λ“œμ—μ„œλŠ” 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ
    • μ—¬κΈ°μ„œ μ£Όλͺ©ν•  뢀뢄은 __items λ³€μˆ˜μ˜ μ›λž˜ 이름이 μ•„λ‹Œ items둜 ν˜ΈμΆœν•œλ‹€λŠ” 것
    • λ°”λ‘œ ©propertyλ₯Ό 뢙인 ν•¨μˆ˜ μ΄λ¦„μœΌλ‘œ μ‹€μ œ __itemsλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” 것
    • μ΄λŠ” κΈ°μ‘΄ private λ³€μˆ˜λ₯Ό λˆ„κ΅¬λ‚˜ μ‚¬μš©ν•  수 μžˆλŠ” public λ³€μˆ˜λ‘œ λ°”κΎΈλŠ” 방법 쀑 ν•˜λ‚˜