λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

🐍 Python/OOP

[OOP] (1) 클래슀, 객체, μΈμŠ€ν„΄μŠ€, 객체지ν–₯ vs μ ˆμ°¨μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° μ •μ˜

HelloπŸ‘‹ I'm Dona!:)

객체 지ν–₯ν”„λ‘œκ·Έλž˜λ° μ˜μ–΄λ‘œλŠ” OOP(Object-Oriented-Programming)λ₯Ό μ •λ¦¬ν•΄λ³΄μž! 🏑


πŸ” κ°μ²΄λž€?

μš°μ„ , μœ„ν‚€λ°±κ³Όλ₯Ό λ¨Όμ € λœ―μ–΄λ³΄λ©΄ μ•„λž˜μ™€ 같이 μ •μ˜ν•˜κ³  μžˆλ‹€.

컴퓨터 κ³Όν•™μ—μ„œ κ°μ²΄ λ˜λŠ” μ˜€λΈŒμ νŠΈ(object)λŠ” ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ 것을 ν† λŒ€λ‘œ λ©”λͺ¨λ¦¬(μ‹€μ œ μ €μž₯곡간)에 ν• λ‹Ήλœ κ²ƒμœΌλ‘œ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λ˜λŠ” 데이터 λ˜λŠ” μ‹λ³„μžμ— μ˜ν•΄ μ°Έμ‘°λ˜λŠ” 곡간을 μ˜λ―Έν•˜λ©°, λ³€μˆ˜μžλ£Œ κ΅¬μ‘°ν•¨μˆ˜ λ˜λŠ” λ©”μ†Œλ“œκ°€ 될 수 μžˆλ‹€. ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” λ³€μˆ˜λ₯Ό μ΄μš©ν•΄ 객체에 μ ‘κ·Όν•˜λ―€λ‘œ κ°μ²΄μ™€ λ³€μˆ˜λΌλŠ” μš©μ–΄λŠ” μ’…μ’… ν•¨κ»˜ μ‚¬μš©λœλ‹€. κ·ΈλŸ¬λ‚˜ λ©”λͺ¨λ¦¬κ°€ ν• λ‹Ήλ˜κΈ° μ „κΉŒμ§€ κ°μ²΄λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

클래슀? λ©”λͺ¨λ¦¬? μ‹λ³„μž? μ–΄λ €μš΄ 말이 μž”λœ© μžˆλŠ”λ°, μ‰½κ²Œ μ •μ˜ν•˜λ©΄ μ•„λž˜μ™€ 같이 생각할 수 μžˆλ‹€

ν˜„μ‹€μ΄λ“  가상이든 속성과 ν–‰λ™μœΌλ‘œ 이루어진 λͺ¨λ“  것!

μš°λ¦¬κ°€ 자주 ν•˜λŠ” SNSλ₯Ό 예둜 λ“€λ©΄, μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” μœ μ €λŠ” 이메일, 아이디, λΉ„λ°€λ²ˆν˜Έ, νŒ”λ‘œμ›Œ λ“±μ˜ 속성과 μ’‹μ•„μš”, κ²Œμ‹œκΈ€ μ—…λ‘œλ“œ λ“±μ˜ ν–‰λ™μœΌλ‘œ 이루어진 객체라고 ν•  수 μžˆλ‹€.

κ°μ²΄λž€ 속성과 행동!

μ΄λ―Έμ§€λŠ” 직접 ppt둜 μ œμž‘ν•˜μ˜€μŠ΅λ‹ˆλ‹€, μ‚¬μš©ν•˜μ‹€ λ•ŒλŠ” 좜처λ₯Ό λ°ν˜€μ£Όμ„Έμš”! :)

πŸ” ν΄λž˜μŠ€μ™€ 객체 그리고 μΈμŠ€ν„΄μŠ€

κ°μ²΄λŠ” 속성(λ³€μˆ˜) + 행동(λ©”μ†Œλ“œ)둜 이루어진 λͺ¨λ“  것! 이라고 μ •μ˜ν–ˆλ‹€. ν΄λž˜μŠ€μ™€ μΈμŠ€ν„΄μŠ€ 그리고 객체의 κ΄€κ³„λŠ” λΉ„μœ λ₯Ό 톡해 λ°°μ›Œλ³΄μž

  • 클래슀(Class) : μ–΄λ– ν•œ λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ₯Ό κ°€μ§€λŠ” λͺ…μ„Έμ„œ, 객체의 ν‹€ = 섀계도 λ˜λŠ” λΆ•μ–΄λΉ΅ 틀이라고 μƒκ°ν•˜μž
  • 객체(Object) : λŒ€μƒ, 클래슀둜 κ΅¬ν˜„ν•  μ–΄λ–€ 것(μ •μ˜λ§Œ ν•œ 것) = λΆ•μ–΄λΉ΅ 자체
  • μΈμŠ€ν„΄μŠ€(Instance) : 객체λ₯Ό 싀체화 μ‹œν‚¨ 것(객체의 μ •μ˜λ₯Ό μ‹€μ²΄ν™”ν•œ 것) = 뢕어빡도 μ’…λ₯˜κ°€ λ§Žλ‹€. νŒ₯ λΆ•μ–΄λΉ΅, 슈크림 λΆ•μ–΄λΉ΅, 와사비 λΆ•μ–΄λΉ΅ λ“±λ“± 🐟

클래슀 - 객체 - μΈμŠ€ν„΄μŠ€

μ΄λ―Έμ§€λŠ” 직접 ppt둜 μ œμž‘ν•˜μ˜€μŠ΅λ‹ˆλ‹€, μ‚¬μš©ν•˜μ‹€ λ•ŒλŠ” 좜처λ₯Ό λ°ν˜€μ£Όμ„Έμš”! :)

μ°Έκ³  : μΈμŠ€ν„΄μŠ€ μœ„ν‚€λ°±κ³Ό

참고둜 λ©”μ†Œλ“œλ„ ν•¨μˆ˜μΈλ°, 클래슀 μ•ˆμ—μ„œ μ •μ˜λœ 객체의 행동을 λ‚˜νƒ€λ‚΄λŠ” ν•¨μˆ˜λ₯Ό λ©”μ†Œλ“œλΌκ³  λΆ€λ₯Έλ‹€!

 

πŸ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)μ΄λž€?

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(μ˜μ–΄: Object-Oriented Programming, OOP)은 컴퓨터 ν”„λ‘œκ·Έλž˜λ°μ˜ νŒ¨λŸ¬λ‹€μž„ 쀑 ν•˜λ‚˜μ΄λ‹€. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ 컴퓨터 ν”„λ‘œκ·Έλž¨μ„ λͺ…λ Ήμ–΄μ˜ λͺ©λ‘μœΌλ‘œ λ³΄λŠ” μ‹œκ°μ—μ„œ λ²—μ–΄λ‚˜ μ—¬λŸ¬ 개의 λ…λ¦½λœ λ‹¨μœ„, 즉 "객체"λ“€μ˜ λͺ¨μž„μœΌλ‘œ νŒŒμ•…ν•˜κ³ μž ν•˜λŠ” 것이닀. 각각의 κ°μ²΄λŠ” λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›κ³ , 데이터λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ‹€. - μœ„ν‚€λ°±κ³Ό
  • ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬ 개의 λ…λ¦½λœ 객체듀과 κ·Έ 객체듀 κ°„μ˜ μƒν˜Έμž‘μš©μœΌλ‘œ νŒŒμ•…ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 접근법
  • ν”„λ‘œκ·Έλž˜λ°μ„ 객체듀과 객체듀 κ°„μ˜ μ†Œν†΅μœΌλ‘œ λ°”λΌλ³΄λŠ” 것
  • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ STEP
    1. ν”„λ‘œκ·Έλž¨μ— ν•„μš”ν•œ 객체 μ •ν•˜κΈ°
    2. ν•΄λ‹Ή κ°μ²΄λ“€μ˜ 속성과 행동 μ •ν•˜κΈ°
    3. 객체 κ°„ μ†Œν†΅ 방법 μ •ν•˜κΈ°
  • νŒŒμ΄μ¬μ€ 순수 객체 지ν–₯ μ–Έμ–΄(Pure Object Oriented Language)이닀 = 파이썬의 λͺ¨λ“  것은 객체이닀
    ➑️ 파이썬의 μ •μˆ˜, λ¬Έμžμ—΄, 리슀트, λ”•μ…”λ„ˆλ¦¬, νŠœν”Œ λ“±μ˜ λͺ¨λ“  μžλ£Œν˜•μ€ μ–΄λ–€ 클래슀의 μΈμŠ€ν„΄μŠ€λΌλŠ” 것!
    μ•„λž˜μ˜ μ‚¬μ§„μ²˜λŸΌ pythonμ—μ„œ 각각의 μžλ£Œν˜•λ“€μ˜ type을 printν•˜λ©΄ class의 이름을 확인 ν•  수 μžˆλ‹€.
    μ˜ˆμ‹œλ‘œ 넣은 2, 'str', [] 등은 λͺ¨λ‘ ν•΄λ‹Ή 클래슀의 μΈμŠ€ν„΄μŠ€λΌκ³  ν•  수 μžˆλ‹€πŸ™‚

파이썬의 λ‹€μ–‘ν•œ μžλ£Œν˜•μ˜ type 확인

πŸ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° vs 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 차이점

1. 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • ν”„λ‘œκ·Έλž¨ μ•ˆμ—μ„œ μ„œλ‘œ κ΄€λ ¨λœ λ™μž‘λ“€λ§Œμ„ λ¬Άμ–΄μ„œ 관리(클래슀)
  • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°κ³Ό 달리 ‘객체’λΌλŠ” κ°œλ…μ΄ μ—†κ³ , λŒ€μ‹  ‘ν•¨μˆ˜’λΌλŠ” κ°œλ…μ€ μžˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ λ•Œ, 데이터와 ν•¨μˆ˜λ₯Ό ν•©μΉ  수 μ—†λ‹€.
  • ν”„λ‘œκ·Έλž¨μ„ λͺ…령어듀을 μˆœμ„œλŒ€λ‘œ μ‹€ν–‰ν•˜λŠ” κ²ƒμœΌλ‘œ λ³Έλ‹€.

2. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • κ΄€λ ¨λœ λ™μž‘λ“€μ„ κ΄€λ ¨λœ 데이터와도 ν•¨κ»˜ λ¬Άμ–΄μ„œ 관리
  • ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ λ•Œ, 데이터와 ν•¨μˆ˜λ₯Ό ν•©μΉ  수 μžˆλ‹€.
  • ν”„λ‘œκ·Έλž¨λ“€μ„ 객체듀이 μˆœμ„œλŒ€λ‘œ μ†Œν†΅ν•˜λŠ” κ³Όμ •μœΌλ‘œ λ³Έλ‹€.

3. 파이썬 μ½”λ“œλ‘œ λŠκ»΄λ³΄λŠ” 차이

# 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ°
# 반볡적으둜 μ‚¬μš©ν•˜λŠ” μ½”λ“œλ₯Ό ν•¨μˆ˜λ‘œ μ •μ˜ν•œλ‹€
def print_person_info(person_name, person_age, person_gender):
    # μ‚¬λžŒμ˜ 이름, λ‚˜μ΄, 성별을 νŒŒλΌλ―Έν„°λ‘œ λ°›μœΌλ©΄ 받은 정보λ₯Ό 이해할 수 μžˆλŠ” λ¬Έμžμ—΄λ‘œ 좜λ ₯ν•΄μ£ΌλŠ” ν•¨μˆ˜
    print("μ‚¬λžŒ ν•œ λͺ…을 μ†Œκ°œν•©λ‹ˆλ‹€")
    print(f"{person_name}λ‹˜μ€ {person_age}살이고 {person_gender}μž…λ‹ˆλ‹€")
    
def is_underage(person_age):
    # μ‚¬λžŒμ˜ λ‚˜μ΄λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„μ„œ λ―Έμ„±λ…„μžμΈμ§€λ₯Ό λ¦¬ν„΄ν•΄μ£ΌλŠ” ν•¨μˆ˜
    return person_age < 20
    
# dona의 정보
dona_name = "dona"
dona_age = 10
dona_gender = "μ—¬μž"
    
# mimi의 정보
mimi_name = "mimi"
mimi_age = 20
mimi_gender = "μ—¬μž"
    
# dona/mimi 정보 좜λ ₯
print_person_info(dona_name, dona_age, dona_gender)
print_person_info(mimi_name, mimi_age, mimi_gender)
    
# dona/mimiκ°€ λ―Έμ„±λ…„μžμΈμ§€ 좜λ ₯
print(is_underage(dona_age))
print(is_underage(mimi_age))

# out
μ‚¬λžŒ ν•œ λͺ…을 μ†Œκ°œν•©λ‹ˆλ‹€
donaλ‹˜μ€ 10살이고 μ—¬μžμž…λ‹ˆλ‹€
μ‚¬λžŒ ν•œ λͺ…을 μ†Œκ°œν•©λ‹ˆλ‹€
mimiλ‹˜μ€ 20살이고 μ—¬μžμž…λ‹ˆλ‹€
True
False

 

# 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°
# 속성과 행동을 κ°–λŠ” 객체듀이 행동을 ν•˜λŠ” λ°©μ‹μœΌλ‘œ μž‘μ„±ν•œλ‹€
class Person:
    # μ‚¬λžŒμ„ λ‚˜νƒ€λ‚΄λŠ” 클래슀
    def __init__(self, name, age, gender):
        # μ‚¬λžŒμ€ 이름, λ‚˜μ΄, 성별을 μ†μ„±μœΌλ‘œ κ°–λŠ”λ‹€
        self.name = name
        self.age = age
        self.gender = gender
    
    def print_info(self):
        # μžμ‹ μ˜ 정보λ₯Ό 좜λ ₯ν•˜λŠ” λ©”μ†Œλ“œ
        print("μ‚¬λžŒ ν•œ λͺ…을 μ†Œκ°œν•©λ‹ˆλ‹€")
        print(f"{self.name}λ‹˜μ€ {self.age}살이고 {self.gender}μž…λ‹ˆλ‹€")
    
    def is_underage(self):
        # μ‚¬λžŒμ˜ λ‚˜μ΄λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„μ„œ λ―Έμ„±λ…„μžμΈμ§€λ₯Ό λ¦¬ν„΄ν•΄μ£ΌλŠ” λ©”μ†Œλ“œ
        return self.age < 20
    
# dona/mimi을 λ‚˜νƒ€λ‚΄λŠ” 객체 생성
dona = Person("dona", 10, "μ—¬μž")
mimi = Person("mimi", 20, "μ—¬μž")
    
# dona/mimi 정보 좜λ ₯
dona.print_info()
mimi.print_info()
    
# dona/mimiκ°€ λ―Έμ„±λ…„μžμΈμ§€ 좜λ ₯
print(dona.is_underage())
print(mimi.is_underage())

# out
μ‚¬λžŒ ν•œ λͺ…을 μ†Œκ°œν•©λ‹ˆλ‹€
donaλ‹˜μ€ 10살이고 μ—¬μžμž…λ‹ˆλ‹€
μ‚¬λžŒ ν•œ λͺ…을 μ†Œκ°œν•©λ‹ˆλ‹€
mimiλ‹˜μ€ 20살이고 μ—¬μžμž…λ‹ˆλ‹€
True
False

μ½”λ“œμ—μ„œλ„ λŠκ»΄μ§€λ“―μ΄, ν™•μ‹€νžˆ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄ 짧아보인닀.

보톡 λ³΅μž‘ν•œ ν”„λ‘œκ·Έλž¨μΌμˆ˜λ‘ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ ν•˜λŠ” 것이 더 λ‚˜μ€ κ²½μš°κ°€ λ§Žλ‹€κ³  ν•œλ‹€.


μ˜€λŠ˜μ€ μ—¬κΈ°κΉŒμ§€! λ‹€μŒ ν¬μŠ€νŒ…μ—λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ 클래슀 λ³€μˆ˜λ₯Ό μ½”λ“œμ™€ ν•¨κ»˜ μ •λ¦¬ν•΄λ³΄μž! πŸ™‚

πŸ“Ž Reference

🏑 ν•΄λ‹Ή λΈ”λ‘œκ·Έ OOP series