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

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

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

8μ£Όμ°¨ - 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

 

8μ°¨μ‹œ_객체지ν–₯ν”„λ‘œκ·Έλž˜λ°_κ°•μ˜μ•ˆ.pdf
1.13MB
8μ°¨μ‹œ_객체지ν–₯ν˜•_과제.pdf
1.39MB

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

:μ—¬λŸ¬ μ‚¬λžŒμ΄ ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  λ•Œ μ–΄λ–€ 방법이 쒋은지에 λŒ€ν•œ κ³ λ―Όκ³Ό λΉ„μŠ·ν•¨

>λ‚΄κ°€ μ•„λ‹ˆλΌ 남이 λ§Œλ“  μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” λŒ€ν‘œμ μΈ 방법

 

ν•¨μˆ˜μ²˜λŸΌ μ–΄λ–€ κΈ°λŠ₯을 ν•¨μˆ˜ μ½”λ“œλ‘œ λ¬Άμ–΄ λ‘λŠ” 것이 μ•„λ‹ˆλΌ, μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” ν•˜λ‚˜μ˜ 단일 ν”„λ‘œκ·Έλž¨μ„ 객체라고 ν•˜λŠ” μ½”λ“œλ₯Ό λ§Œλ“€μ–΄ λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ 함. 이것은 μ»΄ν“¨ν„°κ³΅ν•™μ˜ 였래된 ν”„λ‘œκ·Έλž˜λ° 기법 쀑 ν•˜λ‚˜μž„.

 

 

-객체와 클래슀
객체
μ‹€μƒν™œμ— μ‘΄μž¬ν•˜λŠ” μ‹€μ œμ μΈ 물건, κ°œλ…μ„ λœ»ν•˜λ©°, 속성과 ν–‰λ™μœΌλ‘œ ꡬ성됨
객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μ΄λŸ¬ν•œ 객체의 κ°œλ…μ„ ν™œμš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 기법이닀.
속성은 λ³€μˆ˜variable둜, 행동은 ν•¨μˆ˜function둜 μ •μ˜λ¨

 

객체듀을 μœ„ν•œ 섀계도λ₯Ό λ§Œλ“€μ–΄μ•Ό 함 > 클래슀

: 객체가 κ°€μ Έμ•Ό ν•  κΈ°λ³Έ 정보λ₯Ό 담은 μ½”λ“œλ‘œ μΌμ’…μ˜ 섀계도 μ½”λ“œ

μ„ μˆ˜μ˜ 이름, ν¬μ§€μ…˜, μ†Œμ†νŒ€λ“±μ€ 기본적으둜 가지고 μžˆμ–΄μ•Ό ν•  속성이며,

μ΄λŸ¬ν•œ 정보λ₯Όμ‹€μ œ μƒμ„±λ˜λŠ” 객체에 손ν₯λ―Ό 같은 μ„ μˆ˜ 이름을 할당함

 

  •  
  • - 클래슀λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•œ κΈ°λ³Έ μ½”λ“œ ν…œν”Œλ¦Ώ
  •  

μ˜ˆμ•½μ–΄μΈ class μ½”λ“œλ₯Ό λ§¨μ•žμ— μž…λ ₯, λ§Œλ“€κ³ μž ν•˜λŠ” 클래슀 이름, μƒμ†λ°›μ•„μ•Όν•˜λŠ” λ‹€μŒ 클래슀의 이름을 κ΄„ν˜Έ μ•ˆμ— λ„£μŒ

 

(상속: 기쑴에 λ§Œλ“  클래슀의 νŠΉμ§•μ„ κ·ΈλŒ€λ‘œ 이어받아 μ‚¬μš©ν•˜λŠ” 것을 말함 객체 지ν–₯ ν”„λ£¨κ·Έλž˜λ°μ˜ μž₯점 쀑 ν•˜λ‚˜λŠ” μž¬μ‚¬μš©μ„±μ΄κ³ , 이λ₯Ό μ†μ‰½κ²Œ ν•˜λŠ” 것이 λ°”λ‘œ μƒμ†μž„ μ΄λŸ¬ν•œ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ λŒ€ν‘œμ μΈ νŠΉμ§•μ€ λ’€μ—μ„œ λ‹€μ‹œ λ‹€λ£Έ)

 

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

:속성에 λŒ€ν•œ 정보λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•΄μ„œλŠ” _ init__()λΌλŠ”μ˜ˆμ•½ ν•¨μˆ˜λ₯Ό μ‚¬μš©

이외에도 str, add 등이 있음

 

class SoccerPlayer(object):
def__init__(self, name, position, back_number):
    self .name = name
    self.position = position
    self .back_number = back_number
  • init ν•¨μˆ˜μ˜ 첫번째 λ§€κ°œλ³€μˆ˜λŠ” λ°˜λ“œμ‹œ selfλ³€μˆ˜ μ‚¬μš©
  • self λ³€μˆ˜λŠ” μƒμ„±λœ μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•˜λŠ” μ˜ˆμ•‘μ–΄, μƒμ„±λœ μΈμŠ€ν„΄μŠ€λ₯Ό μ§€μ •ν•˜λŠ” λ³€μˆ˜
  • self λ’€μ˜ λ§€κ²¨λ³€μˆ˜λ“€μ€ μ‹€μ œ ν΄λž˜μŠ€κ°€ 가진 μ†μ„±μœΌλ‘œ 이름,ν¬μ§€μ…˜,λ“±λ²ˆν˜Έμž„ >μ‹€μ œλ‘œ μƒμ„±λ˜λŠ” μΈμŠ€ν„΄μŠ€μ— ν• λ‹Ή
  • self.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λ₯Ό λ§€κ°œλ³€μˆ˜μ— λ°˜λ“œμ‹œ λ„£μ–΄μ•Ό 함

 

-_의 μ“°μž„

(1) _1개λ₯Ό μ‚¬μš©ν•  λ•Œ

: μ΄ν›„λ‘œ 쓰이지 μ•Šμ€ λ³€μˆ˜μ— νŠΉλ³„ν•œ 이유λ₯Ό λΆ€μ—¬ν•˜κ³  싢지 μ•Šμ„ λ•Œ

for _ in range(10):
    print("Hello, World")

(2)_ _2개λ₯Ό μ‚¬μš©ν•  λ•Œ

: νŠΉμˆ˜ν•œ μ˜ˆμ•½ ν•¨μˆ˜λ‚˜ λ³€μˆ˜λ₯Ό 의미

λŒ€ν‘œμ μœΌλ‘œ _ _ str _ _ μ΄λ‚˜ _ _ init_ _ 같은 ν•¨μˆ˜

str() ν•¨μˆ˜λŠ” 클래슀둜 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν–ˆμ„ λ•Œ, κ·Έ μΈμŠ€ν„΄μŠ€ 자체λ₯Ό print() ν•¨μˆ˜λ‘œ 화면에 좜λ ₯ν•˜λ©΄ λ‚˜μ˜€λŠ” 값을 뜻

 

  • μΈμŠ€ν„΄μŠ€ μ‚¬μš©ν•˜κΈ°
    μΈμŠ€ν„΄μŠ€:ν΄λž˜μŠ€μ—μ„œ μ‹€μ œμ μΈ 데이터가 μž…λ ₯λ˜μ–΄ μ‚¬μš©ν•  수 μžˆλŠ” ν˜•νƒœμ˜ 객체
    (λΆ•μ–΄λΉ΅ν‹€: 클래슀, λΆ•μ–΄λΉ΅: μΈμŠ€ν„΄μŠ€ (μ—¬λŸ¬ 가지 μž¬λ£Œκ°€ λ“€μ–΄κ°„ λΆ•μ–΄λΉ΅))
    • ν΄λž˜μŠ€μ—μ„œ μΈμŠ€ν„΄μŠ€λ₯Ό ν˜ΈμΆœν•˜λŠ” 방법
    :클래슀 이름 ν˜ΈμΆœν•˜κ³ , __init() λ§€κ°œλ³€μˆ˜μ— λ§žμΆ”μ–΄ 값을 μž…λ ₯
    : jinhyunμ΄λΌλŠ” μΈμŠ€ν„΄μŠ€ μžμ²΄κ°€ soccerplayer클래슀 기반으둜 생성
    jinhyunμ΄λΌλŠ” μΈμŠ€ν„΄μŠ€ μžμ²΄κ°€ soccerplayer ν΄λž˜μŠ€μ—μ„œ self에 ν• λ‹Ή
    :ν•΄λ‹Ή μ½”λ“œλŠ” self λ³€μˆ˜μ— μ•„λ¬΄λŸ° 값도 ν• λ‹Ή μ•ˆν•¨

 # 전체 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)
inhyun.change_back_number(5)
print("ν˜„μž¬ μ„ μˆ˜μ˜ λ“±λ²ˆν˜ΈλŠ”:", jinhyun.baμ•„c_number

ν˜„μž¬ μ„ μˆ˜μ˜ λ“±λ²ˆν˜ΈλŠ”: 10
μ„ μˆ˜μ˜ λ“±λ²ˆν˜Έλ₯Ό λ³€κ²½ν•œλ‹€: From 10 to 5
ν˜„μž¬ μ„ μˆ˜μ˜ λ“±λ²ˆν˜ΈλŠ”: 5

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

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

데이터λ₯Ό λ³€ν™˜ν•˜κ±°λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜λŠ” λ“±μ˜ 역할이 ν•„μš”

 

λ¦¬μŠ€νŠΈμ™€ ν•¨μˆ˜λ‘œ 각각 λ§Œλ“€μ–΄ κ³΅μœ ν•˜λŠ” 것보닀

ν•˜λ‚˜μ˜ 객체둜 생성해 λ‹€λ₯Έ μ‚¬λžŒλ“€μ—κ²Œ λ°°ν¬ν•œλ‹€λ©΄ μž‘μ—…μ΄ 훨씬 더 μ‰¬μ›Œμ§

 

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

-상속

:κ·ΈλŒ€λ‘œ 무엇인가λ₯Ό λ‚΄λ €λ°›λŠ” 것을 뜻

λΆ€λͺ¨ν΄λž˜μŠ€μ— μ •μ˜λœ 속성과 λ©”μ„œλ“œλ₯Ό μžμ‹ 클래슀 κ°€λ¬Όλ €λ°›μ•„ μ‚¬μš©ν•œλ‹€λŠ” 것

 

μƒμ†μ˜ ꡬ쑰

  • 상속은 λΆ€λͺ¨ ν΄λž˜μŠ€λ³΄λ‹€ μžμ‹ν΄λž˜μŠ€κ°€ 더 ꡬ체둸
  • λΆ€λͺ¨ κ°μ²΄λŠ” 일반적인 κΈ°λŠ₯, μžμ‹ 객체 μƒμ„Έν•œ κΈ°λŠ₯

-λ‹€ν˜•μ„±

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

:각각 ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„λ˜λŠ” λ‚΄λΆ€ λ‘œμ§μ— 차이가 있음 > 이λ₯Ό ν•¨μˆ˜μ˜ λ‹€ν˜•μ„±μ΄λΌκ³  함

  • μ‚¬μš©ν•˜λŠ” 이유?

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

λ‹€λ₯Έ μ‚¬λžŒμ˜ μ½”λ“œλ₯Ό μ‰½κ²Œ μž¬μ‚¬μš©ν•˜κΈ°μœ„ν•΄, 내뢀적인 κ΅¬ν˜„κ³Όμ •μ€ λͺ¨λ₯΄λ”라도, ν•¨μˆ˜,클 래슀의 μ—­ν™œμ€ λͺ…ν™•νžˆ μ•Œμ•„μ•Ό 함

-κ°€μ‹œμ„±

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

핡심 κ°œλ…μ€ μΊ‘μŠν™”(encapsulation)와 정보 은닉(information hiding)μž„

μΊ‘μŠν™”

:μ‚¬μš©ν•˜λŠ” λ°©λ²•λ§Œ μ•Œλ©΄ λ˜λŠ” 것 즉 객체의 λ§€κ°œλ³€μˆ˜ μΈν„°νŽ˜μ΄μŠ€λ§Œ λͺ…ν™•νžˆ μ•Œλ©΄ μ‚¬μš©ν•  수 있음 보톡은 객체의 μ„ΈλΆ€ λ‚΄μš©μ€ λͺ¨λ₯Έ 채 객체의 μ‚¬μš©λ²•λ§Œ μ•Œκ³  μ‚¬μš©ν•œλ‹€λŠ” 뜻

정보은닉

:μ™ΈλΆ€μ—μ„œ μ½”λ“œ λ‚΄λΆ€λ₯Ό λ³Ό 수 μ—†κ²Œ ν•˜κΈ° μœ„ν•΄ λ‚΄λΆ€μ˜ 정보λ₯Ό μˆ¨μ‹œλŠ” κ°œλ…

μΊ‘μŠν™”μ™€ 정보 μ€λ‹‰μœΌλ‘œ ν‘œν˜„μ€ λ‹€λ₯΄κ²Œ ν•˜μ§€λ§Œ λ‘˜ λ‹€ μ½”λ“œμ˜ λ‚΄λΆ€μ˜ κ΅¬ν˜„μ„ 잘 ν•΄μ„œ μ™ΈλΆ€μ—μ„œ μ‰½κ²Œ μ‚¬μš©, 세뢀적인 λ‚΄μš©μ€ λͺ¨λ₯΄κ²Œ ν•˜λŠ” 것이 λΉ„μŠ·ν•¨