Classes and Pointers

μ±„μ˜λ―ΌΒ·2024λ…„ 3μ›” 20일
0
post-custom-banner

πŸ“š class

πŸ’‘ λŒ€λΆ€λΆ„μ˜ 데이터 κ΅¬μ‘°λŠ” 클래슀λ₯Ό μ‚¬μš©ν•΄μ„œ λ§Œλ“€μ–΄μ§„λ‹€.
πŸ’‘ 클래슀λ₯Ό λ§Œλ“ λ‹€λŠ” 것은, λ‚˜λ§Œμ˜ 데이터 νƒ€μž…μ„ λ§Œλ“œλŠ” 것과 κ°™λ‹€.

class Cookie :
	def __init__(self, color) : # μƒμ„±μž
    	# pythonμ—μ„œ λ©”μ†Œλ“œμ™€ ν•¨μˆ˜μ— 차이점은 self ν‚€μ›Œλ“œ 포함 여뢀이닀. 
    	self.color = color # self.colorλŠ” λ§Œλ“œλŠ” νŠΉμ • μΈμŠ€ν„΄μŠ€μ— μ μš©λœλ‹€. 

	def get_color(self) :
    	return self.color

	def set_color(self, color) :
    	self.color = color
       
 	cookie_one = Cookie('green') # cookie_one μΈμŠ€ν„΄μŠ€ κ·Έ 자체(self)에 색은 green 이닀.     >
# class둜 LinkedList κ΅¬ν˜„ν•˜κΈ°
class LinkedList :
	def __init__(self, value) :
		pass 
    def append(self, value) :
		pass  

	#.....   	

πŸ“š pointer - immutable

πŸ’‘ ꡬ체적으둜 데이터 νƒ€μž…μ— 따라 포인터가 μ–΄λ–»κ²Œ λ‹€λ₯΄κ²Œ μž‘λ™ν•˜λŠ”μ§€μ— λŒ€ν•˜μ—¬.
πŸ’‘ μ •μˆ˜λŠ” immutable ν•˜λ‹€. λ”°λΌμ„œ 이 데이터 νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λŠ” μƒμ„±λœ ν›„ κ·Έ μƒνƒœλ₯Ό λ³€κ²½ν•  수 μ—†λ‹€. λ§Œμ•½ λ³€ν™”κ°€ ν•„μš”ν•œ 경우, μƒˆλ‘œμš΄ 객체가 μƒμ„±λ˜κ³  κΈ°μ‘΄ κ°μ²΄λŠ” λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

πŸ—£οΈ νŒŒμ΄μ¬μ—μ„œ, λ³€μˆ˜κ°€ μ €μž₯된 곡간을 λ¦¬ν„΄ν•΄μ£ΌλŠ” ν•¨μˆ˜ => id() // id(num1)

  • immutable(λΆˆλ³€) νƒ€μž…
num1 = 11
num2 = num1
num2 = 22
  1. λ©”λͺ¨λ¦¬ μ–΄λ”˜κ°€μ— μ •μˆ˜ 11을 생성
  2. 그리고 λ³€μˆ˜ num1은 μƒμ„±λœ μ •μˆ˜ μ£Όμ†Œλ₯Ό κ°€λ₯΄ν‚¨λ‹€.
  3. num2λŠ” num1이 κ°€λ₯΄ν‚€κ³  μžˆλŠ” μ£Όμ†Œλ₯Ό ν• λ‹Ή λ°›λŠ”λ‹€.
  4. λ©”λͺ¨λ¦¬ μ–΄λ”˜κ°€μ— μ •μˆ˜ 22λ₯Ό 생성
  5. 그리고 λ³€μˆ˜ num2λŠ” μƒμ„±λœ μ •μˆ˜ μ£Όμ†Œλ₯Ό κ°€λ₯΄ν‚¨λ‹€.
  6. 이제, num1 κ³Ό num2 더 이상 같은 id 값을 갖지 μ•ŠλŠ”λ‹€.

πŸ“š pointer - mutable (1)

πŸ’‘ λ”•μ…”λ„ˆλ¦¬λŠ” mutable ν•˜λ‹€. λ”°λΌμ„œ 이 데이터 νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λŠ” μƒμ„±λœ 후에도 κ·Έ μƒνƒœλ₯Ό λ³€κ²½ν•  수 μžˆλ‹€.

  • mutable νƒ€μž…
dict1 = {
	'value': 11
}

dict2 = dict1
dict2['value'] = 22
  1. λ©”λͺ¨λ¦¬ μ–΄λ”˜κ°€μ— μœ„μ— λ”•μ…”λ„ˆλ¦¬κ°€ 생성될 것이닀.
  2. dict1은 μƒμ„±λœ λ”•μ…”λ„ˆλ¦¬λ₯Ό κ°€λ₯΄ν‚¬ 것이닀.
  3. dict2λŠ” dict1이 κ°€λ₯΄ν‚€κ³  μžˆλŠ” μ£Όμ†Œλ₯Ό ν• λ‹Ή λ°›λŠ”λ‹€.
  4. dict2에 value 값을 μˆ˜μ •ν•˜λ©΄, dict1, dict2κ°€ κ°€λ₯΄ν‚€κ³  μžˆλŠ” λ©”λͺ¨λ¦¬μ— λ”•μ…”λ„ˆλ¦¬ 값이 μˆ˜μ •λœλ‹€.
  5. κ·ΈλŸ¬λ―€λ‘œ dict1 κ³Ό dict2λŠ” 값이 μˆ˜μ •λ˜λ”λΌλ„ 항상 같은 id 값을 갖기에 ν•΄λ‹Ή 값을 κ³΅μœ ν•œλ‹€.

πŸ“š pointer - mutable (2)

πŸ’‘ linkedList에 node등을 ν™œμš©ν•˜κΈ° μœ„ν•΄ λ°˜λ“œμ‹œ μ΄ν•΄ν•˜κ³  μžˆμ–΄μ•Ό ν•˜λŠ” κ°œλ…

  • mutable νƒ€μž… ν™œμš©
dict1 = {
	'value': 11
}

dict2 = dict1
dict2['value'] = 22

dict3 = {
	'value': 22
}
dict2 = dict3
  • λΆ„λͺ…νžˆ dict1와 dict2κ°€ 같은 λ©”λͺ¨λ¦¬μƒμ˜ 곡간을 가리킀고 μžˆμ—ˆμ§€λ§Œ dict2 = dict3κ°€ μ‹€ν–‰λ˜λŠ” μˆœμž” dict2κ°€λŠ” dict3의 λ©”λͺ¨λ¦¬μƒ 곡간을 κ°€λ¦¬ν‚€κ²Œ λœλ‹€.

πŸ—£οΈ 가비지 μ»¬λ ‰μ…˜ (Garbage Collection) :
μœ„μ— mutable νƒ€μž… ν™œμš© μ˜ˆμ‹œμ—μ„œ, dict1, dict2, dict3 κ°€ λͺ¨λ‘ 같은 곡간을 κ°€λ¦¬ν‚€κ²Œ 됐을 경우, 즉 λ©”λͺ¨λ¦¬μƒ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 데이터 값이 생길 경우 νŒŒμ΄μ¬μ€ Garbage Collection ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‚¬μš©ν•΄μ„œ ν•΄λ‹Ή 데이터 값을 μ œκ±°ν•œλ‹€.

profile
μ‹œκ°μ μΈ 코딩을 μ¦κΈ°λŠ” 개발자 지망생 μ±„μ˜λ―Ό μž…λ‹ˆλ‹€;
post-custom-banner

0개의 λŒ“κΈ€