Post

[Python] 클래슀

πŸ“Œ λ“€μ–΄κ°€λ©°

이번 κΈ€μ—μ„œλŠ” OOP의 꽃인 클래슀(class)λ₯Ό 닀룬닀. C와 Javaμ—μ„œ κΈ°λ³Έ 지식을 μŒ“κ³  듀어와 비ꡐ적 μˆ˜μ›”ν–ˆμ§€λ§Œ, μ—¬μ „νžˆ μ‰¬μš΄ κ°œλ…μ€ μ•„λ‹ˆλ‹€.

ν΄λž˜μŠ€λž€? ν•¨μˆ˜μ²˜λŸΌ μ½”λ“œλ₯Ό μ •λ¦¬ν•˜λ˜, ν•œ 발 더 λ‚˜μ•„κ°€ κ΄€λ ¨λœ ν•¨μˆ˜μ™€ λ³€μˆ˜λ₯Ό ν•˜λ‚˜λ‘œ λ¬ΆλŠ”λ‹€. ν†΅κ³„ν•™Β·κ²½μ œν•™Β·μ •μΉ˜ν•™μ„ β€˜μ‚¬νšŒκ³Όν•™β€™μ΄λΌλŠ” 큰 μΉ΄ν…Œκ³ λ¦¬λ‘œ λ¬ΆλŠ” 것과 κ°™λ‹€.


1. 클래슀 μ •μ˜μ™€ self

1
2
3
4
5
6
7
class μ‚¬νšŒκ³Όν•™:
    def 톡계학(self):
        print("톡계학")
    def κ²½μ œν•™(self):
        print("κ²½μ œν•™")
    def μ •μΉ˜ν•™(self):
        print("μ •μΉ˜ν•™")

πŸ’‘ 클래슀 μ•ˆ ν•¨μˆ˜(λ©”μ†Œλ“œ)λŠ” 첫 νŒŒλΌλ―Έν„°λ‘œ selfλ₯Ό κ°–λŠ”λ‹€. 객체화됐을 λ•Œ κ·Έ 객체 μžμ‹ μ΄ λ“€μ–΄κ°€λŠ” μžλ¦¬λ‹€. ν˜ΈμΆœν•  λ•ŒλŠ” μƒλž΅ν•œλ‹€.

1
2
3
λ³€μˆ˜ = μ‚¬νšŒκ³Όν•™()   # 객체화
λ³€μˆ˜.κ²½μ œν•™()
# >>> κ²½μ œν•™

Desktop View

πŸ’‘ λ³€μˆ˜1, λ³€μˆ˜2처럼 객체λ₯Ό μ—¬λŸ¬ 개 λ§Œλ“€λ©΄ λ©”λͺ¨λ¦¬μ— μ„œλ‘œ λ‹€λ₯Έ 곡간에 ν• λ‹Ήλœλ‹€. λ³΅μž‘ν•΄ λ³΄μ΄μ§€λ§Œ, λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ λ‹€ν˜•ν™”λœ 클래슀λ₯Ό μ“°λ €λ©΄ ν•„μˆ˜λ‹€.


2. λ°˜ν™˜ vs 좜λ ₯ λ©”μ†Œλ“œ

1
2
3
4
5
class μˆ˜μ—…μ‹œκ°„:
    def 예제1(self):
        return "μ–΄λ €μ›Œμš”"      # λ°˜ν™˜
    def 예제2(self, κ°’):
        print("μž…λ ₯:", κ°’)      # 좜λ ₯
λ©”μ†Œλ“œλ™μž‘
예제1()값을 λ°˜ν™˜ β†’ print(예제1())처럼 좜λ ₯ν•΄μ•Ό λ³΄μž„
예제2(κ°’)λ‚΄λΆ€μ—μ„œ 직접 좜λ ₯

3. νŒŒλΌλ―Έν„°κ°€ μžˆλŠ” λ©”μ†Œλ“œ

1
2
3
4
5
6
7
8
9
10
class μ˜ˆμ˜λ°”λ₯Έν•™μƒ:
    def 첫인사(self, 이름):
        print("μ•ˆλ…•ν•˜μ„Έμš”")
        print(f"내이름은 {이름}!")
    def μž‘λ³„μΈμ‚¬(self):
        print("μ•ˆλ…•νžˆκ°€μ„Έμš”")

홍길동 = μ˜ˆμ˜λ°”λ₯Έν•™μƒ()
홍길동.첫인사("신동희")   # selfλŠ” μžλ™, μ΄λ¦„λ§Œ 전달
홍길동.μž‘λ³„μΈμ‚¬()

πŸ’‘ 두 κ°€μ§€ 호좜 방식이 μžˆλ‹€.

  • 홍길동.첫인사("신동희") β€” 객체둜 호좜 (self μžλ™)
  • μ˜ˆμ˜λ°”λ₯Έν•™μƒ.첫인사(홍길동, "신동희") β€” self에 객체λ₯Ό 직접 전달

4. self둜 객체의 λ³€μˆ˜ λ§Œλ“€κΈ°

1
2
3
4
5
6
7
8
9
10
class μ‚¬λžŒ:
    def μ΄λ¦„μž…λ ₯(self, 이름):
        self.이름 = 이름        # 객체 μžμ‹ μ˜ λ³€μˆ˜ 생성
    def 좜λ ₯ν•˜κΈ°(self):
        print(self.이름)

첫째 = μ‚¬λžŒ()
첫째.μ΄λ¦„μž…λ ₯("신동희")
print(첫째.이름)
# >>> 신동희

πŸ’‘ self.이름 = 이름은 κ·Έ 객체(첫째)κ°€ κ°€μ§„ λ³€μˆ˜λ₯Ό λ§Œλ“ λ‹€. κ·Έλž˜μ„œ 첫째.이름에 β€œμ‹ λ™ν¬β€κ°€ μ €μž₯λœλ‹€. κ°μ²΄λ§ˆλ‹€ 독립적인 μƒνƒœλ₯Ό κ°–κ²Œ ν•˜λŠ” 핡심이닀.


πŸ“ 정리

1
2
3
4
5
파이썬 클래슀
β”œβ”€ μ •μ˜    class 이름:  + λ©”μ†Œλ“œ(첫 νŒŒλΌλ―Έν„° self)
β”œβ”€ 객체화  λ³€μˆ˜ = 클래슀()  β†’ λ©”λͺ¨λ¦¬μ— 독립 곡간
β”œβ”€ self    객체 μžμ‹  (호좜 μ‹œ μžλ™ 전달)
└─ self.λ³€μˆ˜  κ°μ²΄λ§ˆλ‹€ 독립적인 μƒνƒœ μ €μž₯
κ°œλ…ν•œ 쀄 μ •μ˜
ν΄λž˜μŠ€κ΄€λ ¨ ν•¨μˆ˜Β·λ³€μˆ˜λ₯Ό λ¬ΆλŠ” ν‹€
selfλ©”μ†Œλ“œκ°€ κ°€λ¦¬ν‚€λŠ” 객체 μžμ‹ 
self.λ³€μˆ˜κ°μ²΄ 고유의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

파이썬 클래슀의 νŠΉμ§•μ€ selfλ‹€. β€œλ©”μ†Œλ“œμ˜ 첫 μΈμžλŠ” 객체 μžμ‹ β€μ΄λΌλŠ” κ·œμΉ™λ§Œ 작으면, C/Java의 클래슀 지식이 κ·ΈλŒ€λ‘œ 이어진닀.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.