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

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

μ•Œ 수 μ—†λŠ” μ‚¬μš©μž 2023. 5. 18. 09:03

8μ°¨μ‹œ_객체지ν–₯_과제.pdf
0.58MB
8μ°¨μ‹œ_객체지ν–₯_κ°•μ˜μ•ˆ.pdf
0.97MB

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

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

 

ν•¨μˆ˜λ₯Ό 배울 λ•Œμ™€ 같이, μ—¬λŸ¬ μ‚¬λžŒμ΄ ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  λ•Œ μ–΄λ–€ 방법이 쒋은지에 λŒ€ν•œ κ³ λ―ΌμœΌλ‘œλΆ€ν„° μ‹œμž‘! πŸ‘‰λ‹€λ₯Έ μ‚¬λžŒμ΄ μž‘μ„±ν•œ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ μ‚¬μš©!

 

>객체와 클래슀

 

객체(object)

  • μ‹€μƒν™œμ— μ‘΄μž¬ν•˜λŠ” μ‹€μ œμ μΈ 물건 λ˜λŠ” κ°œλ…
  • 속성(attribute)와 행동(action)으둜 ꡬ성
  • μ΄λ•Œ 속성은 λ³€μˆ˜λ‘œ, 행동은 ν•¨μˆ˜λ‘œ μ •μ˜
    • ex) 인곡지λŠ₯ 좕ꡬ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“ λ‹€λŠ” κ°€μ •
    • → μ–΄λ–€ μ’…λ₯˜μ˜ 객체가 ν•„μš”ν•œμ§€ 생각해야 ν•œλ‹€.
    • → 객체듀을 μœ„ν•œ 섀계도λ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€. (= class)

 

클래슀(class)

  • 객체가 κ°€μ Έμ•Ό ν•  κΈ°λ³Έ 정보λ₯Ό 담은 μ½”λ“œλ‘œ μΌμ’…μ˜ 섀계도 μ½”λ“œ
  • 객체의 정보λ₯Ό ν΄λž˜μŠ€μ— λ‹΄κ³ , μ‹€μ œ μƒμ„±λ˜λŠ” κ°μ²΄μ—λŠ” 객체의 이름을 ν• λ‹Ήν•œλ‹€. (→ μ‹€μ œλ‘œ μƒμ„±λ˜λŠ” 객체 = instance)

DOG ν΄λž˜μŠ€μ™€ DOG μΈμŠ€ν„΄μŠ€ (클래슀 : λΆ•μ–΄λΉ΅ ν‹€, μΈμŠ€ν„΄μŠ€ : λΆ•μ–΄λΉ΅)

 

02 파이썬의 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

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

더보기

좕ꡬ μ„ μˆ˜ 클래슀λ₯Ό νŒŒμ΄μ¬μ—μ„œ κ΅¬ν˜„ν•˜κΈ°

*class μ„ μ–Έ

νŒŒμ΄μ¬μ—μ„œμ˜ 클래슀 μ„ μ–Έμ˜ κΈ°λ³Έ μ½”λ“œ ν…œν”Œλ¦Ώμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. λ¨Όμ € μ˜ˆμ•½μ–΄μΈ classλ₯Ό μ½”λ“œμ˜ 맨 μ•žμ— μž…λ ₯ν•©λ‹ˆλ‹€.
  2. 그리고 λ§Œλ“€κ³ μž ν•˜λŠ” 클래슀 이름을 μž‘μ„±ν•©λ‹ˆλ‹€.
  3. κ·Έ λ‹€μŒ 상속받아야 ν•˜λŠ” λ‹€λ₯Έ 클래슀의 이름을 κ΄„ν˜Έ μ•ˆμ— λ„£μŠ΅λ‹ˆλ‹€. (μ—¬κΈ°μ„œ μƒμ†μ΄λž€ 기쑴에 λ§Œλ“  클래슀의 νŠΉμ§•μ„ κ·ΈλŒ€λ‘œ 이어받아 μ‚¬μš©ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ μž₯점 쀑 ν•˜λ‚˜μΈ μž¬μ‚¬μš©μ„±μ„ μš©μ΄ν•˜κ²Œ ν•΄μ€λ‹ˆλ‹€. )

++νŒŒμ΄μ¬μ—μ„œμ˜ μž‘λͺ…기법++

λ³€μˆ˜μ™€ ν•¨μˆ˜λŠ” snack_case

ν΄λž˜μŠ€λŠ” CamelCase

 

*μ†μ„±μ˜ μ„ μ–Έ

좕ꡬ μ„ μˆ˜ 클래슀λ₯Ό ꡬ성해보도둝 ν•©μ‹œλ‹€.

  • _ _ init _ _ ( ) : 속성에 λŒ€ν•œ 정보 μ„ μ–Έ
  • μ˜ˆμ‹œμ½”λ“œ
class SoccerPlayer(object):
    def__init__(self, name, position, back_number):
        self.name = name
        self.position = position
        self.back_number = back_number

- _ _ init _ _ ( ) ν•¨μˆ˜λŠ” 이 ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  λ³€μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

- _ _ init _ _ ( ) ν•¨μˆ˜μ˜ 첫 번째 λ§€κ°œλ³€μˆ˜λŠ” λ°˜λ“œμ‹œ self λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. (self λ³€μˆ˜λŠ” ν΄λž˜μŠ€μ—μ„œ μƒμ„±λœ μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•˜λŠ” μ˜ˆμ•½μ–΄)

- self λ’€μ˜ λ§€κ°œλ³€μˆ˜λ“€μ€ μ‹€μ œλ‘œ ν΄λž˜μŠ€κ°€ 가진 μ†μ„±μœΌλ‘œ 좕ꡬ μ„ μˆ˜μ˜ 이름, ν¬μ§€μ…˜, λ“±λ²ˆν˜Έ λ“±μž…λ‹ˆλ‹€. 이 값듀은 μ‹€μ œλ‘œ μƒμ„±λ˜λŠ” μΈμŠ€ν„΄μŠ€μ— ν• λ‹Ήλ©λ‹ˆλ‹€.

 → ν• λ‹Ήλ˜λŠ” μ½”λ“œλŠ” self.name = name (name λ³€μˆ˜μ— λ§€κ°œλ³€μˆ˜λ‘œ μž…λ ₯된 nameμ΄λΌλŠ” 값을 ν• λ‹Ήν•œλ‹€λŠ” 뜻)

 

*ν•¨μˆ˜μ˜ μ„ μ–Έ

좕ꡬ μ„ μˆ˜κ°€ ν•˜λŠ” λ™μž‘μΈ ‘λ“±λ²ˆν˜Έ ꡐ체’λΌλŠ” 행동을 ꡬ성해보도둝 ν•©μ‹œλ‹€.

class SoccerPlayer(object):
    def change_back_number(self, new_number):
        print("μ„ μˆ˜μ˜ λ“±λ²ˆν˜Έλ₯Ό λ³€κ²½ν•œλ‹€: From %d to %d" % (self .back_number, new_number))
        self.back_number = new_number

- 기쑴의 ν•¨μˆ˜μ™€ 같이 ν•¨μˆ˜μ˜ 이름과 λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 

- λ§€κ°œλ³€μˆ˜μ— selfλ₯Ό !λ°˜λ“œμ‹œ! λ„£μ–΄μ•Όν•©λ‹ˆλ‹€. (selfκ°€ μžˆμ–΄μ•Όλ§Œ μ‹€μ œλ‘œ μΈμŠ€ν„΄μŠ€κ°€ μ‚¬μš©ν•  수 μžˆλŠ” ν•¨μˆ˜λ‘œ μ„ μ–Έ)

 

*_의 μ“°μž„

_ 1개 : 이후에 쓰이지 μ•Šμ„ λ³€μˆ˜μ— νŠΉλ³„ν•œ 이름을 λΆ€μ—¬ν•˜κ³  싢지 μ•Šμ„ λ•Œ μ‚¬μš©

_ _ 2개 : νŠΉμˆ˜ν•œ μ˜ˆμ•½ ν•¨μˆ˜λ‚˜ λ³€μˆ˜λ₯Ό μ˜λ―Έν•¨

 

 

 

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

더보기

μƒμ„±λœ 클래슀λ₯Ό μΈμŠ€ν„΄μŠ€λ‘œ ν˜ΈμΆœν•΄ μ‚¬μš©ν•˜λŠ” 방법을 μ•Œμ•„λ΄…μ‹œλ‹€!

μΈμŠ€ν„΄μŠ€ : ν΄λž˜μŠ€μ—μ„œ μ‹€μ œμ μΈ 데이터가 μž…λ ₯λ˜μ–΄ μ‚¬μš©ν•  수 μžˆλŠ” ν˜•νƒœμ˜ 객체

→ μ—¬λŸ¬ 가지 μž¬λ£Œκ°€ λ“€μ–΄κ°„ λΆ•μ–΄λΉ΅ κ·Έ 자체

 

μ•žμ—μ„œ 클래슀λ₯Ό κ΅¬ν˜„ν•  λ•Œ SoccerPlayerλΌλŠ” μ΄λ¦„μœΌλ‘œ μƒμ„±ν–ˆμŠ΅λ‹ˆλ‹€.

이 ν΄λž˜μŠ€λŠ” κ·Έμ € κΈ°λ³Έ 섀계도(λΆ•μ–΄λΉ΅ ν‹€) → μ„ μˆ˜μ˜ μ΄λ¦„μ΄λ‚˜ λ“±λ²ˆν˜Έκ°€ 아직 ν• λ‹ΉX

μ‹€μ œλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ΄λŸ¬ν•œ 정보λ₯Ό ν• λ‹Ήν•œ μƒνƒœλ‘œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€!

 

*μΈμŠ€ν„΄μŠ€ 호좜

- 클래슀 이름을 호좜

- μ•žμ—μ„œ μ •μ˜ν–ˆλ˜ _ _ init _ _ ( ) ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μ— λ§žνˆ¬μ–΄ 값을 μž…λ ₯

- self λ³€μˆ˜μ—λŠ” μ•„λ¬΄λŸ° 값도 ν• λ‹Ήν•˜μ§€ μ•ŠμŒ

- 전체 SoccerPlayer μ½”λ“œ

# 전체 SoccerPlayer μ½”λ“œ
class SoccerPlayer(object):
    def __init__(self, name, position, back_number):
        self.name = name
        self.position = position
        self.back_number = back_number

    def change_back_number(self, new_number):
        print("μ„ μˆ˜μ˜ λ“±λ²ˆν˜Έλ₯Ό λ³€κ²½ν•œλ‹€: From %d to %d" % (self.back_number, new_number))
        self.back_number = new_number

    def __str__(self):
        return "Hello, My name is %s. I play in %s in center." % (self.name, self.position)

 # SoccerPlayerλ₯Ό μ‚¬μš©ν•˜λŠ” instance μ½”λ“œ
jinhyun = SoccerPlayer("Jinhyun", "MF", 10)

print("ν˜„μž¬ μ„ μˆ˜μ˜ λ“±λ²ˆν˜ΈλŠ”:", jinhyun.back_number)
jinhyun.change_back_number(5)
print("ν˜„μž¬ μ„ μˆ˜μ˜ λ“±λ²ˆν˜ΈλŠ”:", jinhyun.back_number)
ν˜„μž¬ μ„ μˆ˜μ˜ λ“±λ²ˆν˜ΈλŠ”: 10
μ„ μˆ˜μ˜ λ“±λ²ˆν˜Έλ₯Ό λ³€κ²½ν•œλ‹€: From 10 to 5
ν˜„μž¬ μ„ μˆ˜μ˜ λ“±λ²ˆν˜ΈλŠ”: 5

- 14ν–‰μ—μ„œ jinhyun = SoccerPlayer("Jinhyun", "MF", 10) μ½”λ“œλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒˆλ‘­κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 

- λ§Œλ“€μ–΄μ§„ μΈμŠ€ν„΄μŠ€μΈ jinhyun은 name, position, back_mimber에 각각 Jinhyiin, MF, 10이 ν• λ‹Ήλ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν• λ‹Ήλœ 값을 λ§Œλ“€μ–΄μ§„ μΈμŠ€ν„΄μŠ€μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ jinhyun.back_number ν˜•μ‹μœΌλ‘œ μΈμŠ€ν„΄μŠ€ λ‚΄μ˜ 값을 ν˜ΈμΆœν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

β—μ£Όμ˜β—

μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λœ ν›„μ—λŠ” ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€μ˜ μ΄λ¦„μœΌλ‘œ 값을 ν• λ‹Ήν•˜κ±°λ‚˜ ν•¨μˆ˜λ₯Ό λΆ€λ₯΄λ©΄ λ˜μ§€λ§Œ, 클래슀 λ‚΄μ—μ„œλŠ” self둜 ν˜ΈμΆœλœλ‹€. 즉, μƒμ„±λœ μΈμŠ€ν„΄μŠ€μΈ jinhyunκ³Ό 클래슀 λ‚΄ selfκ°€ 같은 역할을 ν•˜λŠ” 것이닀.

 

*ν•¨μˆ˜ 호좜

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œμ—λ„ μΈμŠ€ν„΄μŠ€μ˜ 이름과 ν•¨μˆ˜λͺ… μ‚¬μš©ν•©λ‹ˆλ‹€.

μœ„ μ½”λ“œμ—μ„  jihyun.change_back_number(5)λ₯Ό μ‚¬μš©ν•΄ 클래슀 λ‚΄μ˜ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. μœ„ μ½”λ“œμ— 이어 print(jinhyun) 을 μž…λ ₯ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

Hello, My name is Jinhyun. I play in MF in center.

 

 

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

🧐 이처럼 λ³΅μž‘ν•œ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ κ°œλ…μ„ μ™œ μ‚¬μš©ν•˜λŠ” κ²ƒμΌκΉŒμš”?

→ 핡심은, μ½”λ“œλ₯Ό λ‹€λ₯Έ μ‚¬λžŒμ΄ μ†μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ„€κ³„ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€!

  1. 데이터λ₯Ό λ³€ν™˜ν•˜κ±°λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜λŠ” λ“±μ˜ 역할이 ν•„μš”ν•  λ•Œ
  2. μ½”λ“œλ₯Ό μ’€ 더 μ†μ‰½κ²Œ μ„ μ–Έν•˜κ³ μž ν•  λ•Œ

 

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

더보기

πŸ’‘κ°μ²΄ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ κΈ°λ³Έ 철학은 μ‹€μƒν™œμ„ λͺ¨λΈλ§ν•œλ‹€λŠ” κ°œλ…

>상속

상속(inheritance) : ν΄λž˜μŠ€μ— μ •μ˜λœ 속성과 λ©”μ„œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ λ¬Όλ €λ°›μ•„ μ‚¬μš©

→ 이름 κ·ΈλŒ€λ‘œ 무언가λ₯Ό λ‚΄λ €λ°›λŠ” 것을 λœ»ν•©λ‹ˆλ‹€.

→ 이λ₯Ό 톡해 μ½”λ“œμ˜ μž¬μƒμ†μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

 

class ChildClass(object)
    pass

κ΄„ν˜Έ μ•ˆμ— λ“€μ–΄κ°„ 것이 ChildClass의 λΆ€λͺ¨ ν΄λž˜μŠ€μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” objectκ°€ λΆ€λͺ¨ 클래슀.

object = νŒŒμ΄μ¬μ—μ„œ μ‚¬μš©ν•˜λŠ” κ°€μž₯ κΈ°λ³Έ 객체

파이썬이 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄κΈ° λ•Œλ¬Έμ— λͺ¨λ“  λ³€μˆ˜κ°€ 객체가 λœλ‹€!

 

>>> a = 'abc'
>>> type(a)
<class 'str'>

μ§€κΈˆκΉŒμ§€ λ¬Έμžμ—΄μ„ μžλ£Œν˜• 쀑 ν•˜λ‚˜λΌκ³  μ •μ˜ν•˜κ³  λ¬Έμžμ—΄ν˜•μ΄λΌκ³  λΆˆλ €μ§€λ§Œ λ‚΄λΆ€μ μœΌλ‘œλŠ” 객체(class)둜 처리된 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€!

 

- 상속 더 μ•Œμ•„λ³΄κΈ°

>>> class Person(object):
        def __init__(self, name, age):
            self.name = name
            self.age = age
..
>>> class Korean(Person):
        pass
...
>>> first_korean = Korean("Jeeun", 22)
>>> print(first_korean.name)
Jeeun

Person 클래슀 생성

_ _ init _ _ ( ) ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ nameκ³Ό age에 κ΄€λ ¨λœ 정보λ₯Ό μž…λ ₯ν•˜λ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.

Korean 클래슀 생성

Person 클래슀λ₯Ό μƒμ†λ°›μ•˜μŠ΅λ‹ˆλ‹€. passλŠ” λ³„λ„μ˜ λ‚΄μš© 없이 클래슀만 μ‘΄μž¬ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€. 

(λ³„λ„μ˜ 의미 없이 Korean 클래슀 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“  것)

μƒμ†λ°›μ•˜κΈ° λ•Œλ¬Έμ— Person ν΄λž˜μŠ€μ—μ„œ μƒμ„±ν•œ λ³€μˆ˜λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

>λ‹€ν˜•μ„±

λ‹€ν˜•μ„±(polymorphism) : 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œκ°€ λ‹€λ₯Έ κΈ°λŠ₯을 ν•˜λŠ” 것

 

[μ˜ˆμ‹œ] μΈν„°λ„·μ—μ„œ 데이터λ₯Ό λͺ¨μœΌλŠ” ν”„λ‘œκ·Έλž¨, 크둀러

<단계>

  1. λΆ€λͺ¨ 크둀러 클래슀 μ œμž‘ν•˜κ³  do_crawlingμ΄λΌλŠ” ν•¨μˆ˜ 생성
  2. Crawler 클래슀λ₯Ό μƒμ†μ‹œμΌœ NaverCrawler와 DaumCrawlerλ₯Ό 생성 (이 λ•Œ 두 μžμ‹ ν΄λž˜μŠ€λŠ” λͺ¨λ‘ do_crawling ν•¨μˆ˜λ₯Ό κ°–κ²Œ 됨)

같은 μ΄λ¦„μ΄μ§€λ§Œ κ΅¬ν˜„ λ‚΄μš©μ€ λ‹€λ₯΄λ‹€! = κ΅¬ν˜„λ˜λŠ” λ‚΄λΆ€ λ‘œμ§μ— 차이가 μžˆλ‹€! = λ‹€ν˜•μ„±

 

 

>κ°€μ‹œμ„±

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

κ°€μ‹œμ„± = μΊ‘μŠν™” = 정보 은닉

 

*νŒŒμ΄μ¬μ—μ„œμ˜ 객체의 μž¬μ‚¬μš©

- μž¬μ‚¬μš©μ„ μœ„ν•΄ 각 객체가 무슨 역할을 ν•˜λŠ”μ§€ μ•Œμ•„μ•Ό 함

- κ·ΈλŸ¬λ‚˜ 세뢀적인 κ΅¬ν˜„ λ‚΄μš©μ€ μ•Œ ν•„μš” μ—†μŒ (단지 μ‚¬μš©λ²•λ§Œ ν•„μš”)

- 즉, 객체의 λ§€κ°œλ³€μˆ˜ μΈν„°νŽ˜μ΄μŠ€λ§Œ λͺ…ν™•νžˆ μ•Œλ©΄ μ‚¬μš©ν•  수 μžˆλ‹€!

μΊ‘μŠν™” : 객체의 μ„ΈλΆ€ λ‚΄μš©μ€ λͺ¨λ₯Έ 채 객체의 μ‚¬μš©λ²•λ§Œ μ•Œκ³  μ‚¬μš©ν•˜λŠ” 것

 

*μΊ‘μŠν™”λ₯Ό μ‚¬μš©ν•΄ν– ν•˜λŠ” 이유

  1. 클래슀λ₯Ό 섀계할 λ•Œ 클래슀 κ°„ κ°„μ„­ 및 정보 곡유λ₯Ό μ΅œμ†Œν™”ν•˜μ—¬ κ°œλ³„ ν΄λž˜μŠ€κ°€ λ‹¨λ…μœΌλ‘œλ„ 잘 λ™μž‘ν•  수 μžˆλ„λ‘ ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έ
  2. μ‚¬μš©μž μž…μž₯μ—μ„œλŠ” μƒμ„Έν•œ λ‚΄μš©μ„ λͺ¨λ₯΄λ”라도 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄ν•΄ν•˜λ©΄ 클래슀λ₯Ό μ‰½κ²Œ μ‚¬μš©ν•  수 있기 λ•Œλ¬Έ