Studynote/Python

[Python] 클래슀(class)λž€?

minzhen 2022. 6. 14. 19:03

μš©μ–΄μ™€ κ°œλ…

classλž€?

클래슀 = 객체λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ 문법

ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ κ°μ²΄*λ₯Ό λ§Œλ“€ λ•Œμ— μ‚¬μš©ν•˜λŠ” 것이 ν΄λž˜μŠ€μ΄λ‹€. ν΄λž˜μŠ€λŠ” 크게 μ†μ„±κ³Ό λ©”μ†Œλ“œλ‘œ κ΅¬λΆ„λœλ‹€.

  • attribute (속성)    : λ§€κ°œλ³€μˆ˜λ₯Ό λ°›κ³  μ‚¬μš©ν•˜κΈ° μœ„ν•œ κ°’
  • method (λ©”μ†Œλ“œ)  : λ§Œλ“€μ–΄μ§„ 속성듀을 μ΄μš©ν•˜μ—¬ μ–΄λ–€ ν–‰μœ„λ₯Ό ν•˜λŠ” μ‹€ν–‰μ½”λ“œ. 즉, 클래슀 μ•ˆμ— λ“€μ–΄μžˆλŠ” ν•¨μˆ˜

 

πŸ’‘
Pythonμ—μ„œ 정말 많이 μ‚¬μš©λ˜λŠ” list dict λ“±λ„ λͺ¨λ‘ 각자의 μš©λ„μ— 맞게 λ§Œλ“€μ–΄μ§„ 클래슀 !

 

 

class와 object

  • Object (객체)* : μ²΄ν¬λ°•μŠ€, μŠ€ν¬λ‘€λ°” λ“± νŠΉμ •ν•œ κ°œλ…μ΄λ‚˜ λͺ¨μ–‘μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” 것
  • OOL (Object Oriented Language, 객체지ν–₯μ–Έμ–΄) : 객체λ₯Ό μ‚¬μš©ν•œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄
  • OOP (Object Oriented Programming, 객체지ν–₯ν”„λ‘œκ·Έλž˜λ°)  : 이렇듯 λ³΅μž‘ν•œ 문제λ₯Ό 잘게 λ‚˜λˆ„μ–΄ 객체둜 λ§Œλ“€κ³ , 객체λ₯Ό μ‘°ν•©ν•΄μ„œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ°

 

 

πŸ“
클래슀λ₯Ό ν™œμš©ν•˜μ—¬ 객체지ν–₯ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ©΄ μž₯점은?

ν˜„μ‹€ μ„Έκ³„μ˜ λ³΅μž‘ν•œ 문제λ₯Ό μ²˜λ¦¬ν•˜λŠ”λ° μœ μš©ν•˜λ©°, κΈ°λŠ₯을 κ°œμ„ ν•˜κ³  λ°œμ „μ‹œν‚¬ λ•Œμ—λ„ ν•΄λ‹Ή 클래슀만 μˆ˜μ •ν•˜λ©΄ λ˜λ―€λ‘œ μœ μ§€ λ³΄μˆ˜μ—λ„ νš¨μœ¨μ μ΄λ‹€.

 

 

 

μ‚¬μš©ν•˜κΈ°

1. 기초 문법

1-1. class μƒμ„±ν•˜κΈ°

ν΄λž˜μŠ€λŠ” class ν΄λž˜μŠ€μ΄λ¦„ : 라고 μž‘μ„±ν•œ ν›„, λ‹€μŒ μ€„λ‘œ λ„˜μ–΄κ°€ def둜 methodλ₯Ό μž‘μ„±ν•¨μœΌλ‘œμ¨ 생성할 수 μžˆλ‹€.

class Person:
    def greeting(self):
    	print('Hello')

 

1-2. class μ‚¬μš©ν•˜κΈ°

 

❗
ν΄λž˜μŠ€λŠ” νŠΉμ • κ°œλ…μ„ ν‘œν˜„λ§Œ ν•  뿐, μ‚¬μš©μ„ ν•˜κΈ° μœ„ν•΄μ„œλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό 생성해야 ν•œλ‹€.

μΈμŠ€ν„΄μŠ€ = 클래슀()ν˜•μ‹μ„ 톡해 클래슀λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλ‹€. 즉 μ•„λž˜μ˜ μ½”λ“œλŠ” Person을 톡해 λ³€μˆ˜ jamesλ₯Ό λ§Œλ“œλŠ” 것인데, 이 jamesλŠ” Person의 instance(μΈμŠ€ν„΄μŠ€)이닀. 

james = Person()

 

1-3. method ν˜ΈμΆœν•˜κΈ°

λ©”μ†Œλ“œλŠ” ν΄λž˜μŠ€κ°€ μ•„λ‹ˆλΌ μΈμŠ€ν„΄μŠ€λ₯Ό 톡해 ν˜ΈμΆœν•œλ‹€. λ‹€μŒκ³Ό 같이 μΈμŠ€ν„΄μŠ€ 뒀에 .을 뢙이고 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ λœλ‹€.

james.greeting()
Hello

james.greeting을 ν˜ΈμΆœν•˜λ‹ˆ 'Hello'κ°€ 좜λ ₯λœλ‹€. μ΄λ ‡κ²Œ μΈμŠ€ν„΄μŠ€λ₯Ό 톡해 ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œλ₯Ό instance method라고 ν•œλ‹€. μ΄λ ‡κ²Œ μ‚¬λžŒ 클래슀λ₯Ό λ§Œλ“€κ³  μΈμ‚¬ν•˜λŠ” κΈ°λŠ₯을 λ„£μ–΄λ³΄μ•˜λ‹€.

 

πŸ’¬
μΈμŠ€ν„΄μŠ€μ™€ 객체의 차이점?

사싀 같은 것을 μ˜λ―Έν•œλ‹€. λ‹€λ§Œ, 객체만 μ§€μ •ν•  λ•ŒλŠ” κ·Έλƒ₯ 객체(object)라고 λΆ€λ₯΄κ³ , ν΄λž˜μŠ€μ™€ μ—°κ΄€μ§€μ–΄ 말할 λ•ŒλŠ” μΈμŠ€ν„΄μŠ€(instance)μ•„κ³  λΆ€λ₯΄λŠ” 것이닀.

 

 

2. ν™œμš© 문법

2-1. 빈 class μƒμ„±ν•˜κΈ°

λ‚΄μš©μ΄ μ—†λŠ” 빈 클래슀λ₯Ό λ§Œλ“€ λ•ŒλŠ” μ½”λ“œ 뢀뢄에 passλ₯Ό λ„£μ–΄μ€€λ‹€.

class Person:
    pass

 

2-2. method μ•ˆμ—μ„œ method ν˜ΈμΆœν•˜κΈ°

λ©”μ†Œλ“œ μ•ˆμ—μ„œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” λ‹€μŒκ³Ό 같이 self.λ©”μ†Œλ“œ()ν˜•μ‹μœΌλ‘œ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. 즉, μ—¬κΈ°μ„œ self μ—†μ΄ λ©”μ†Œλ“œ μ΄λ¦„λ§Œ μ‚¬μš©ν•˜λ©΄ 클래슀 λ°”κΉ₯μͺ½μ— μžˆλŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€λŠ” 뜻이 λ˜λ―€λ‘œ μ£Όμ˜ν•΄μ•Ό ν•œλ‹€.

class Person:
    def greeting(self):
        print('Hello')
 
    def hello(self):
        self.greeting()    # self.λ©”μ„œλ“œ() ν˜•μ‹μœΌλ‘œ 클래슀 μ•ˆμ˜ λ©”μ„œλ“œλ₯Ό 호좜
 
james = Person()
james.hello()    # Hello

 

2-3. νŠΉμ • class의 instance인지 ν™•μΈν•˜κΈ°

ν˜„μž¬ μΈμŠ€ν„΄μŠ€κ°€ νŠΉμ • 클래슀의 μΈμŠ€ν„΄μŠ€μΈμ§€ 확인할 λ•ŒλŠ” isinstanceν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€. νŠΉμ • 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ 맞으면 True, μ•„λ‹ˆλ©΄ Falseλ₯Ό λ°˜ν™˜ν•œλ‹€.

class Person:
	pass
    
james = Person()
isinstance(james, Person)     #  ->  True

πŸ‘‰πŸ»  isinstanceλŠ” 주둜 객체의 μžλ£Œν˜•μ„ νŒλ‹¨ν•  λ•Œ μ‚¬μš©ν•œλ‹€. 예λ₯Ό λ“€μ–΄ νŒ©ν† λ¦¬μ–Ό ν•¨μˆ˜λŠ” 1λΆ€ν„° nκΉŒμ§€ μ–‘μ˜ μ •μˆ˜λ₯Ό μ°¨λ‘€λŒ€λ‘œ κ³±ν•΄μ•Ό ν•˜λŠ”λ°, μ‹€μˆ˜μ™€ 음의 μ •μˆ˜λŠ” 계산할 수 μ—†λ‹€. 이런 κ²½μš°μ— isinstanceλ₯Ό μ‚¬μš©ν•˜μ—¬ 숫자(객체)κ°€ μ •μˆ˜μΌ λ•Œλ§Œ κ³„μ‚°ν•˜λ„λ‘ λ§Œλ“€ 수 μžˆλ‹€.

def factorial(n):
    if not isinstance(n, int) or n < 0:    # n이 μ •μˆ˜κ°€ μ•„λ‹ˆκ±°λ‚˜ 음수이면 ν•¨μˆ˜λ₯Ό 끝냄
        return None
    if n == 1:
        return 1
    return n * factorial(n - 1)

 

 

 


μ°Έκ³  μ‚¬μ΄νŠΈ

  • 코딩도μž₯ (https://dojang.io/mod/page/view.php?id=2372)