ν‹°μŠ€ν† λ¦¬ λ·°

🐈‍⬛ 객체지ν–₯의 이해

객체지ν–₯의 μ‹œμž‘μ  : μœ μ‚¬μ„±

 

🐈 객체지ν–₯ κ°œλ…

⇨ 객체-객체 사이 μƒν˜Έμž‘μš©μœΌλ‘œ ν”„λ‘œκ·Έλž¨ κ΅¬μ„±ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„

⇨ ν”„λ‘œκ·Έλž¨μ„ μœ μ—°ν•˜κ²Œ, 변경을 μ‰½κ²Œ λ§Œλ“€μ–΄ λŒ€κ·œλͺ¨ μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ— μ‚¬μš©

• 객체지ν–₯ νŒ¨λŸ¬λ‹€μž„μ˜ νŠΉμ§•

βœ“ 좔상화
κ³΅ν†΅μ˜ μ†μ„±μ΄λ‚˜ κΈ°λŠ₯ λ„μΆœ

βœ“ μΊ‘μŠν™”
데이터 ꡬ쑰와 데이터 연산을 κ²°ν•©

βœ“ 상속
μƒμœ„ κ°œλ… νŠΉμ§•μ΄ ν•˜μœ„ κ°œλ…μ— 전달

βœ“ λ‹€ν˜•μ„±
μœ μ‚¬ 객체의 μ‚¬μš©μ„±μ„ κ·ΈλŒ€λ‘œ μœ μ§€

 

🐈 객체와 클래슀

⇨ 객체 : 좔상화와 μΊ‘μŠν™”μ˜ κ²°κ³Ό

• 싀세계 사물에 λŒ€ν•œ μƒνƒœ (데이터) 와 μ—°μ‚° (λ©”μ†Œλ“œ) λ₯Ό ν‘œν˜„ν•œ λ‹¨μœ„
⇨ 멀버(데이터 ν•„λ“œ, λ©”μ†Œλ“œ)λŠ” ν΄λž˜μŠ€μ— μ˜ν•΄ κ²°μ •

 

🐈 클래슀 μ •μ˜

// 클래슀 이름은 λŒ€λ¬Έμž μ‹œμž‘ ꢌ고


⁕ ꡬ문 ν˜•μ‹

 

⁕ λ©”μ†Œλ“œ (method)

β‡’ 객체에 λŒ€ν•œ 행동(μ—°μ‚°) μ •μ˜
β‡’ ν•¨μˆ˜μ˜ μ •μ˜ 및 μ‚¬μš© 방법과 동일

 

⁕ 초기자 (initializer)

β‡’ 객체의 μƒνƒœλ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 특수 λ©”μ†Œλ“œ
β‡’ 항상 __init__ 으둜 λͺ…λͺ…

 

🐈 λ©”μ†Œλ“œ μ •μ˜


⁕ ꡬ문 ν˜•μ‹

 

⁕ self λ§€κ°œλ³€μˆ˜

β‡’ λͺ¨λ“  λ©”μ†Œλ“œμ˜ 첫 번째 λ§€κ°œλ³€μˆ˜
β‡’ λ©”μ†Œλ“œμ˜ κ΅¬ν˜„μ— μ‚¬μš© / λ©”μ†Œλ“œ 호좜 μ‹œ μ‚¬μš©λ˜μ§€ μ•ŠμŒ

β‡’ 객체 μžμ‹ μ„ μ°Έμ‘°ν•˜μ—¬ 클래슀 μ •μ˜μ— ν¬ν•¨λœ 멀버에 μ ‘κ·Ό μ‹œ μ‚¬μš©
( 클래슀 λ‚΄λΆ€μ˜ λ³€μˆ˜μ— μ ‘κ·Όν•  λ•Œ '데이터 ν•„λ“œ' μž„μ„ μ•Œλ €μ£ΌλŠ” self )

 

🐈 self λ§€κ°œλ³€μˆ˜

class Cone :
    def __init__(self, radius = 20, height = 30) :
        self.r = radius
        self.h = height

    def get_vol(self) : 
        return 1/3 * 3.14 * self.r ** 2 * self.h

    def get_surf(self) : 
        return 3.14 * self.r ** 2 + 3.14 * self.r * self.h

⇨ self.r / self.h 둜 selfλ₯Ό λΆ™μž„μœΌλ‘œμ¨ 두 λ³€μˆ˜μ˜ μŠ€μ½”ν”„κ°€ Cone class 전역이 됨

❌ λ§Œμ•½ selfλ₯Ό 뢙이지 μ•ŠλŠ”λ‹€λ©΄? 

class Cone :
    def __init__(self, radius = 20, height = 30) :
        r = radius
        h = height		# rκ³Ό h의 μŠ€μ½”ν”„λŠ” ν•΄λ‹Ή λ²”μœ„ ν•œμ •

    def get_vol(self) : 
        return 1/3 * 3.14 * r ** 2 * h

    def get_surf(self) : 
        return 3.14 * r ** 2 + 3.14 * r * h

 

🐈 클래슀 섀계

⇨ UML 클래슀 λ‹€μ΄μ–΄κ·Έλž¨ 톡해 λ°μ΄ν„°ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œ ν‘œν˜„ 방법 ν‘œμ€€ν™”
(UML : ν‘œμ€€ν™”λœ λͺ¨λΈλ§ μ–Έμ–΄)

• 데이터 ν•„λ“œ 이름 : 데이터 ν•„λ“œ νƒ€μž…

• 클래슀 이름 (λ§€κ°œλ³€μˆ˜ 이름 : λ§€κ°œλ³€μˆ˜ νƒ€μž…)

• λ©”μ†Œλ“œ 이름 (λ§€κ°œλ³€μˆ˜ 이름 : λ§€κ°œλ³€μˆ˜ νƒ€μž…) : λ°˜ν™˜κ°’ νƒ€μž…

 

⁕ UML 클래슀 λ‹€μ΄μ–΄κ·Έλž¨

Cone
r : int
h : int
// 데이터 ν•„λ“œ, νƒ€μž…
Cone(radius = 20 : int,
height = 30 : int)γ€€// μƒμ„±μž
get_vol() : floatγ€€// λ©”μ†Œλ“œ
get_surf() : float γ€€// λ©”μ†Œλ“œ

 

🐈 BMI 계산 ν”„λ‘œκ·Έλž¨

class BMI :
    def __init__(self, name, age, weight, height) :
        # μž…λ ₯ νŒŒλΌλ―Έν„°μ— λ“€μ–΄μ˜¨ 값듀을 데이터 ν•„λ“œμ— λ„£μ–΄μ£ΌλŠ” μž‘μ—…
        self.name = name
        self.age = age
        self.weight = weight
        self.height = height
        
    def get_BMI(self) :
        return self.weight / (self.height / 100) ** 2
        # self.height / 100 은 cm λ‹¨μœ„ ν‚€λ₯Ό m λ‹¨μœ„λ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•¨

    def get_status(self) :
        BMI = self.get_BMI()
        if BMI >= 25 :
            return "λΉ„λ§Œ"
        elif BMI >= 23 and BMI < 25 :
            return "과체쀑"
        elif BMI >= 18.5 and BMI < 23 :
            return "정상"
        else :
            return "저체쀑"

 


🐈‍⬛ ν΄λž˜μŠ€μ™€ μΈμŠ€ν„΄μŠ€ 

 

🐈 객체와 μΈμŠ€ν„΄μŠ€


⁕ ꡬ문 ν˜•μ‹ 

β‡’ κ°’ μ €μž₯, λ³€ν˜• λ“± κ°€λŠ₯ (μ‹€μ²΄ν™”λœ λŒ€μƒ)

• 클래슀의 μƒμ„±μž(constructor)λ₯Ό 톡해 클래슀의 μΈμŠ€ν„΄μŠ€ 생성

• 객체 / μΈμŠ€ν„΄μŠ€ 동일 κ°œλ… 

• 클래슀의 μƒμ„±μžλŠ” 클래슀 이름과 동일

• 클래슀 이름 + 초기자의 λ§€κ°œλ³€μˆ˜ μ‚¬μš©ν•˜μ—¬ μƒμ„±μž 호좜

 

🐈 객체의 생성 κ³Όμ •

 

🐈 객체의 μ‚¬μš©

• 객체의 데이터 ν•„λ“œ μ ‘κ·Ό 및 λ©”μ†Œλ“œ 호좜
⇨ 객체 멀버 μ ‘κ·Ό μ—°μ‚°μž " . " μ‚¬μš© 

⁕ 객체 μ ‘κ·Ό

β‡’ μƒμ„±μžλŠ” λ©”λͺ¨λ¦¬ λ‚΄λΆ€μ˜ 객체만 λ§Œλ“¦
β‡’ λ©”λͺ¨λ¦¬ μ•ˆμ˜ 객체λ₯Ό μ§€μΉ­ν•˜κΈ° μœ„ν•΄ 객체 μ°Έμ‘°λ³€μˆ˜ μ‚¬μš©

•  κ°μ²΄ μ°Έμ‘°λ³€μˆ˜
μƒμ„±μžλ₯Ό 톡해 λ§Œλ“  객체에 μ ‘κ·Όν•  수 μžˆλŠ” μ§€μΉ­ 도ꡬ

⇨ 객체 μ°Έμ‘°λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄ 객체λ₯Ό 생성

 

🐈 원뿔 클래슀 ν™œμš©

Cone
r : int
h : int
// 데이터 ν•„λ“œ, νƒ€μž…
Cone(radius = 20 : int,
height = 30 : int)γ€€// μƒμ„±μž
get_vol() : floatγ€€// λ©”μ†Œλ“œ
get_surf() : float γ€€// λ©”μ†Œλ“œ

≫ λ‹¨μœ„ 원뿔과 λ°˜μ§€λ¦„κ³Ό 높이가 각각 50, 100인
μ›λΏ”μ˜ 뢀피와 겉넓이λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨

# 객체 μ°Έμ‘°λ³€μˆ˜ =  클래슀λͺ…(초기자 νŒŒλΌλ―Έν„°)
unit_cone = Cone()
big_cone = Cone(50, 100)

print("λ‹¨μœ„ μ›λΏ”μ˜ 뢀피와 κ²‰λ„“μ΄λŠ”", unit_cone.get_vol(), unit_cone.get_surf(), "μž…λ‹ˆλ‹€.")
print("큰 μ›λΏ”μ˜ 뢀피와 κ²‰λ„“μ΄λŠ”", big_cone.get_vol(), big_cone.get_surf(), "μž…λ‹ˆλ‹€.")

 

🐈 BMI 클래슀 ν™œμš©

person1 = BMI("μ§€λ‹ˆ", 29, 50, 160)

print(person1.name + "λ‹˜(" + str(person1.age) + "μ„Έ)의 BMI μˆ˜μΉ˜λŠ”", 
      person1.get_BMI(), "κ²°κ³ΌλŠ”", person1.get_status(), "μž…λ‹ˆλ‹€.")

 


🐈‍⬛ 객체지ν–₯의 ν™œμš©

 

🐈 데이터 νƒ€μž…κ³Ό 객체

⇨ μ‹€μ œ μš°λ¦¬κ°€ μ•Œμ•˜λ˜ λͺ¨λ“  λ³€μˆ˜λŠ” 객체

객체 μ§€ν–₯ν˜• ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ
"λͺ¨λ“  것은 λ‹€ 객체λ₯Ό 톡해 이루어진닀"


⇨ number λ³€μˆ˜λŠ” int 20 객체λ₯Ό 가리킴

⇨ symbol λ³€μˆ˜λŠ” str "파이썬" 객체λ₯Ό 카리킴


βœ“
객체둜 μ‘°μž‘/연산을 ν•˜κ³  μ‹Άλ‹€λ©΄ 객체 μ°Έμ‘°λ³€μˆ˜μ— 점 ( . ) 찍기

 

🐈 str λ©”μ†Œλ“œ

λ©”μ†Œλ“œ μ„€λͺ…
upper(), lower() λŒ€ / μ†Œλ¬Έμž λ³€κ²½
title() 각 단어 첫 κΈ€μž λŒ€λ¬Έμžλ‘œ λ³€κ²½
strip(), rstrip(), lstrip() μ–‘μͺ½ / μ™Όμͺ½ / 였λ₯Έμͺ½ νŠΉμ • 문자 제거
replace() λ¬Έμžμ—΄ νŠΉμ • 뢀뢄을 λŒ€μ²΄
split() κ΅¬λΆ„μžλ‘œ λΆ„ν• ν•΄ 리슀트둜 λ°˜ν™˜

 

🐈 데이터 ν•„λ“œ 감좔기

⇨ 데이터 은닉 (data hiding)

• 데이터 ν•„λ“œ 직접 λ³€κ²½ λ°©μ§€λ₯Ό μœ„ν•΄ μ‚¬μš©μžμ˜ 직접 μ ‘κ·Ό 차단
• publicκ³Ό λ‹€λ₯Έ private 데이터 ν•„λ“œλ‘œ μ •μ˜

 

⁕ private 데이터 ν•„λ“œ

• 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯
• μ•ž 두 밑쀄 ( _ _ ) 둜 μ •μ˜

self.__r
self.__h

 

🐈 μ ‘κ·Όμžμ™€ λ³€κ²½μž

⇨ private으둜 μ •μ˜λœ 데이터 ν•„λ“œλŠ” 객체 μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό λΆˆκ°€λŠ₯

⇨ private 데이터 ν•„λ“œμ— μ ‘κ·Όν•˜λŠ” λ©”μ†Œλ“œ

μ ‘κ·Όμž (accessor) : 데이터 ν•„λ“œ λ°˜ν™˜ (get)

λ³€κ²½μž(mutator) : 데이터 ν•„λ“œ μ„€μ • (set)

 

🐈 원뿔 클래슀 κ°œμ„ 

문제 : 멀버 r λ˜λŠ” h에 음수λ₯Ό μž…λ ₯ν•˜λ©΄?

⇨ 멀버 __rκ³Ό __h에 λŒ€ν•œ μ ‘κ·Όμž, λ³€κ²½μž μ •μ˜

class pCone :
    def __init__(self, radius = 20, height = 30) :
        if (radius > 0 and height > 0) :
            self.__r = radius
            self.__h = height

    def get_vol(self) : # λΆ€ν”Ό
        return 1/3 * 3.14 * self.__r ** 2 * self.__h

    def get_surf(self) : # 겉넓이
        return 3.14 * self.__r ** 2 + 3.14 * self.__r * self.__h
    
    # μ ‘κ·Όμž
    def get_radius(self) : 
        return self.__r
    
    def get_height(self) : 
        return self.__h
    
    # λ³€κ²½μž
    def set_radius(self, radius) : 
        # 음수 값이 λ“€μ–΄μ˜€μ§€ μ•Šλ„λ‘ μ œμ–΄
        if (radius > 0) :
            self.__r = radius
    
    def set_height(self, height) : 
        if (height > 0) :
            self.__h = height

 

λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
TAG more
Β«   2025/06   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
κΈ€ 보관함